EDN首页   博客首页 用户登陆  |  注册
aaa
发表于 2008/12/19 22:10:28

0

关于投票

三线16键电路及分析(菜农马甲分析)

耕在此行 发表于 2008-12-14 14:36 侃单片机 ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

楼主: 很牛的键盘电路。

朋友发了一张图叫我帮他看看,在他上面发现了一个很牛的键盘接口电路。
发上来分享一下。
16个键,只用了4个IO。

点击看大图


awey 发表于 2008-12-19 21:03 侃单片机 ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

30楼: 即兴画了个三线16键的图给你们玩

三个IO口只需要置为输入和低电平两种状态。




点击看大图


洪七公 发表于 2008-12-19 22:09 侃单片机 ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

34楼: 无BUG,4次扫描~~俺来仔细分析一下~~~

GND实际是恒为低电平的虚拟“IO0”,3线为IO1,IO2,IO3.
实际是4线~~~

依次扫描顺序:(K后第1个数字为扫描发送者,其后数字为扫描接收者)
1.IO1=IO2=IO3=1 (7个键)
  K0123 (GND发送0,IO1IO2IO3读000)
  K012  (GND发送0,IO1IO2IO3读001)
  K013  (GND发送0,IO1IO2IO3读010)
  K023  (GND发送0,IO1IO2IO3读100)
  K01   (GND发送0,IO1IO2IO3读011)
  K02   (GND发送0,IO1IO2IO3读101)
  K03   (GND发送0,IO1IO2IO3读110)
2.IO1=0,IO2=IO3=1 (3个键)
  K123  (IO1发送0,IO2IO3读00)
  K12   (IO1发送0,IO2IO3读01)
  K13   (IO1发送0,IO2IO3读10)
3.IO2=0,IO1=IO3=1 (3个键)
  K213  (IO2发送0,IO1IO3读00)
  K21   (IO2发送0,IO1IO3读01)
  K23   (IO2发送0,IO1IO3读10)
4.IO3=0,IO1=IO2=1 (3个键)
  K321  (IO3发送0,IO1IO2读00)
  K31   (IO3发送0,IO1IO2读01)
  K32   (IO3发送0,IO1IO2读10)

哈哈~~~3IO(隐藏了GND~~~),16键(7+3+3+3+3),4次扫描~~~

点击看大图

系统分类: 单片机  |  用户分类: 尿童答疑  |  标签: 无标签  |  来源: 整理  | 

点击查看原文

发表评论 阅读全文(592) | 回复(1)

发表于 2008/9/24 1:00:35

0

关于投票

一维数组和两维数组的关系

hotpower 发表于 2008-9-24 00:47 侃单片机 ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

楼主: 一维数组和两维数组的关系

一维数组:matr1[K]
char data matr1[6]=
{
  00,01,0x10,0x11,0x20,0x21
};

其中:matr1[k]
matr1[0]=0,matr1[1]=1,matr1[2]=0x10...matr1[5]=0x21

两维数组:matr2[M][N]
char data matr2[3][2]=
{
  {00,01},
  {0x10,0x11},
  {0x20,0x21}
};
其中:matr2[m][n]
matr2[0][0]=0,matr2[0][1]=1,matr2[1][0]=0x10...matr2[2][1]=0x21

它们的关系为:
k = m*N + n  (其中:k=0~K-1, m="0"~M-1, n="0"~N-1)

即当matr1和matr2的存储地址相同时,就有:
matr1[0]等同matr2[0][0]
matr1[1]等同matr2[0][1]
matr1[2]等同matr2[1][0]
matr1[3]等同matr2[1][1]
matr1[4]等同matr2[2][0]
matr1[5]等同matr2[2][1]

那么matr2[2][2]又是什么呢???
因为matr2定义为char data matr2[3][2]即M=3,N=2
那么matr2[2][2]即matr2[m][n].这里m=2,n=2(已经不满足n=0~N-1的条件)

所以matr2[2][2]应该属于非法访问,这在很多编译器编译时会报错误的!!!

但也有些编译器却可通过,实在是倒塌~~~

那么matr2[2][2]访问在何处???

根据一维数组和两维数组的关系:
k = m*N + n  (其中:k=0~K-1, m="0"~M-1, n="0"~N-1)

可知:
k = 2*2+ 2 = 6,即matr2[2][2]等同matr1[6].即matr1一维数组的第7个单元.

所以matr2[2][2]越界.


实际应用中,编译器都会先把两维数组用k = m*N + n转换为一维数组的.

而且可能还转换为指针.

所以在很多实际应用中,一维数组可能是不错的选择.

菜农不想加入以下21ic数组战斗贴,故写此贴以示自己的看法:

http://bbs.21ic.com/club/bbs/list.asp?Page=1&boardid=11&t=3099691

系统分类: 单片机  |  用户分类: 尿童答疑  |  标签: 无标签  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(894) | 回复(0)

发表于 2008/9/14 10:15:37

2

关于投票

如何防74164干扰

http://bbs.ednchina.com/ShowTopic.aspx?id=59624

#1 楼主:如何防74164干扰 精华帖

贴子发表于:2008-5-28 10:55:56

我是一名电子爱好者,一个月前用51单片机和74164做了一款单片机显示,74164后接LED灯,就是单片机和74164传数据时有干扰,调试了很长时间,还没调试出来,单独调试74164时有干扰,请各位师兄,师姐帮帮忙阿!!

#11 上万台和15年以上的实战经验

贴子回复于:2008-9-14 10:13:24

1.在数据和时钟线上各对地接1只小电容,我用300p左右,最早用681P


2.发送完串行数据串后将时钟线拉低。


3.每半秒刷新整个LED阵列一次。

系统分类: 单片机  |  用户分类: 尿童答疑  |  标签: 无标签  |  来源: 整理  | 

点击查看原文

发表评论 阅读全文(969) | 回复(0)

发表于 2008/7/13 23:27:06

1

关于投票

网管让线了~~~正式解答串口数据丢失的问题

问题见: http://bbs.21ic.com/club/bbs/ShowAnnounce.asp?v=&ID=3031251

hotpower 发表于 2008-7-13 23:20 侃单片机 ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

26楼: 网管让线了~~~正式解答串口数据丢失的问题

常用的通讯方式肯定是我们MCU人的MCU<->PC.

而数据丢失看着好象总是PC的问题,实际不能单凭感觉判断.

应该首先检查各自多能出现的错误,最简单而有效的方法是各自自环测试.

即将PC的2,3脚短路(当然MCU要脱机了,废话一下~~~),再用常用的串口

调试工具在一定的波特率下自发自收.

俺喜欢汽车电子的串口通V3.20,下载地址: http://blog.ednchina.com/hotpower/66284/message.aspx

如果自环测试通过,在不考虑长线通讯带来的时延,则认为MCU可能有错.

再将MCU上的DB9的2,3脚短路,再MCU上编一个很小的自发自收程序.

在接收程序里进行比较,结果可以用LED/LCD等输出.

若不通过,肯定是MCU的问题.

若通过则问题就复杂了~~~

一般可能也肯定是MCU的错误,不妨再与PC联机,并将停止位改为2位

或MCU发送程序在发送一块数据包后加点停顿, 这样处理后应该不会出大问题.

若再出现问题,且PC侧的串口软件采用常用控件如MSComm,SPComm等,

这就带来了控件的正确应用的问题了~~~

再谈控件的正确应用的问题:

俺看过很多MCU编写的上位机应用程序,包括汽车电子的串口通~~~

哈哈~~~小小的批评一下汽车电子~~~

MCU人编写的串口控件有时很倒塌~~~思路全是MCU的裸奔或OS奔,和PC的Windows事件驱动机制有很大的冲突~~~

所以大家可以看出串口通的CPU占有率大的毛病所在~~~

所以它只能作为调试而不能应用到用户真正的程序中...

大家有没注意到---俺的帖图几乎全是串口通????哈哈~~~因为它很美~~~

可惜它不如HotComm很黄很暴力~~~

因为它是用CVI自带的串口函数编的,而HotComm是用API函数重新用多线程封装的~~~

所以即使一样的PC端程序,结果相差可谓万里~~~

PC端正确的编程:

接收端:
1.一定要在控件的事件或回调函数中编写.

2.每次在事件或回调函数中编写的代码停留时间不要过长.

  最好在下次引发事件或回调前退出.

3.应该正确选择或适当调整每次引发事件或回调的接收字节数目.

4.应该正确选择或适当调整接收缓冲区的大小.


总之,MCU人只要把PC的事件触发看成中断来编程即可~~~


结论: 一个巴掌拍不响~~~

系统分类: 单片机  |  用户分类: 尿童答疑  |  标签: 无标签  |  来源: 整理  | 

点击查看原文

发表评论 阅读全文(866) | 回复(1)

发表于 2007/7/4 22:27:59

1

关于投票

请教,只有8个I/O口,怎样供20个按键扫描使用?

原帖出处: http://bbs.21ic.com/club/bbs/ShowAnnounce.asp?id=2589682

HOTPOVER 发表于 2007-7-4 19:40 侃单片机 ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖


楼主: 请教,只有8个I/O口,怎样供20个按键扫描使用?

不许加外围器件

hotpower 发表于 2007-7-4 19:44 侃单片机 ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

2楼: ID有点像~~~
hotpower 发表于 2007-7-4 21:57 侃单片机 ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

14楼: 键盘知识---数学排列与组合中的"组合键"->Cm2

Cmn=Am2/Pn=M!/(n!(m-n)!)=Cm(m-n)
由于是键盘操作,故取n=2,m>=2

m=2时. C22=2!/2!/0!=1  即最小组合键需要2个IO.即2线1键
       设2个IO为Pin0,Pin1.
       组合扫描为Key1=Pin0,Pin1

m=3时. C32=3!/2!/1!=3  即3线3键.
       设3个IO为Pin0,Pin1,Pin2.
       组合扫描为Key1=Pin0,Pin1
                 Key2=Pin0,Pin2
                 Key3=Pin1,Pin2

m=4时. C42=4!/2!/2!=4*3/2=6  即4线6键.
       设4个IO为Pin0,Pin1,Pin2,Pin3.
       组合扫描为Key1=Pin0,Pin1
                 Key2=Pin0,Pin2
                 Key3=Pin0,Pin3
                 Key4=Pin1,Pin2
                 Key5=Pin1,Pin3
                 Key6=Pin2,Pin3

m=5时. C52=5!/2!/3!=5*4*3/6=10  即5线10键.
       设5个IO为Pin0,Pin1,Pin2,Pin3,Pin4.
       组合扫描为Key1=Pin0,Pin1
                 Key2=Pin0,Pin2
                 Key3=Pin0,Pin3
                 Key4=Pin0,Pin4
                 Key5=Pin1,Pin2
                 Key6=Pin1,Pin3
                 Key7=Pin1,Pin4
                 Key8=Pin2,Pin3
                 Key9=Pin2,Pin4
                 Key10=Pin3,Pin4

m=6时. C62=6!/2!/4!=6*5*4!/2/4!=15  即6线15键.
       设6个IO为Pin0,Pin1,Pin2,Pin3,Pin4,Pin5.
       组合扫描为Key1=Pin0,Pin1
                 Key2=Pin0,Pin2
                 Key3=Pin0,Pin3
                 Key4=Pin0,Pin4
                 Key5=Pin0,Pin5
                 Key6=Pin1,Pin2
                 Key7=Pin1,Pin3
                 Key8=Pin1,Pin4
                 Key9=Pin1,Pin5
                 Key10=Pin2,Pin3
                 Key11=Pin2,Pin4
                 Key12=Pin2,Pin5
                 Key13=Pin3,Pin4
                 Key14=Pin3,Pin5
                 Key15=Pin4,Pin5

m=7时. C72=7!/2!/5!=7*6*5!/2/5!=21  即7线21键.
       设7个IO为Pin0,Pin1,Pin2,Pin3,Pin4,Pin5,Pin6.
       组合扫描为Key1=Pin0,Pin1
                 Key2=Pin0,Pin2
                 Key3=Pin0,Pin3
                 Key4=Pin0,Pin4
                 Key5=Pin0,Pin5
                 Key6=Pin0,Pin6
                 Key7=Pin1,Pin2
                 Key8=Pin1,Pin3
                 Key9=Pin1,Pin4
                 Key10=Pin1,Pin5
                 Key11=Pin1,Pin6
                 Key12=Pin2,Pin3
                 Key13=Pin2,Pin4
                 Key14=Pin2,Pin5
                 Key15=Pin2,Pin6
                 Key16=Pin3,Pin4
                 Key17=Pin3,Pin5
                 Key18=Pin3,Pin6
                 Key19=Pin4,Pin5
                 Key20=Pin4,Pin6
                 Key21=Pin5,Pin6

m=8时. C82=8!/2!/6!=8*7*6!/2/6!=28  即8线28键.
       设8个IO为Pin0,Pin1,Pin2,Pin3,Pin4,Pin5,Pin6,Pin7.
       组合扫描为Key1=Pin0,Pin1
                 Key2=Pin0,Pin2
                 Key3=Pin0,Pin3
                 Key4=Pin0,Pin4
                 Key5=Pin0,Pin5
                 Key6=Pin0,Pin6
                 Key7=Pin0,Pin7
                 Key8=Pin1,Pin2
                 Key9=Pin1,Pin3
                 Key10=Pin1,Pin4
                 Key11=Pin1,Pin5
                 Key12=Pin1,Pin6
                 Key13=Pin1,Pin7
                 Key14=Pin2,Pin3
                 Key15=Pin2,Pin4
                 Key16=Pin2,Pin5
                 Key17=Pin2,Pin6
                 Key18=Pin2,Pin7
                 Key19=Pin3,Pin4
                 Key20=Pin3,Pin5
                 Key21=Pin3,Pin6
                 Key22=Pin3,Pin7
                 Key23=Pin4,Pin5
                 Key24=Pin4,Pin6
                 Key25=Pin4,Pin7
                 Key26=Pin5,Pin6
                 Key27=Pin5,Pin7
                 Key28=Pin6,Pin7

如果加"独占键"即8个IO的接地键,那么8个IO不加如何器件的键盘个数为28+8=36个.

"组合键"的程序很好编写,可能比行扫描更好编~~~不要被它吓到,问问数学家~~~

祥见菜农的"键盘论"~~~

IO键盘编码技术

签名:

●█〓██▄▄▄▄▄▄ ●●●●●●→ ''''╭WWWW╮
▄▅██████▅▄▃▂ 灌水入坛传播非典 ( ●_●)
██████████████ '''',,,;,;,;'''/▇\''
◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤ 东戳西顶一片天/MMMM\
点击遨游水上蔬菜批发市场


打造菜农最倒塌的BLOG

系统分类: 单片机  |  用户分类: 尿童答疑  |  标签: 无标签  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(1541) | 回复(2)

Total , Page /