你现在位置:首页>技术论文>电气常识>嵌入式系统>正文
从矩阵按键扫描谈软硬件配合的重要性
日期:2008-10-9 9:08:06 来源:本站整理  
点击: 作者:
点击【】放大字体.
WWW_P※LCJS_COM-PLC-)技.术_网

按键的矩阵扫描是很多单片机初学者都需要接触的一个实验,然而这样典型的传统电路和扫描思路不知道有多少人真的去仔细研究过.也许在你的系统应用中,就不知不觉的引入了BUG,因为这样的电路太成熟了,很多人用起来都不用去考虑的.从这一点,就说明鉴别的继承观点是很重要的.
W1WW_P4LCJS_COM-PLC-技.术_网

    先看一个扫描的电路,一般在IO资源够用的情况下,都会这样用
WW.W_PLC※JS_C,OM-PL,C-技.术_网

WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

                    图一          
W1WW_P4LCJS_COM-PLC-技.术_网

 很明显这个电路继承传统51的做法,因为传统51的驱动能力很弱,所以作为输出一般都需要加上拉电阻的.其实AVR的驱动能力已经很强了,如果做正常输出是不用考虑加上拉电阻的.而且,如果按传统的扫描方式,输出一路有效的扫描信号为1,其他的扫描信号为0,这样来处理的话,这个电路其实还可能有些问题的,就是不知道这位在软件上会怎么处理了.正因为有问题,所以有人提出了加限流电阻,如下图
WW.W_PLC※JS_C,OM-PL,C-技.术_网

WWW_P※LCJS_COM-PLC-)技.术_网

                      图二    
WWW_P※LCJS_CO※M-PLC-技-.术_网

由于图形没有拷贝完整,已经看不到这位的上拉电阻部分了,为什么加了限流电阻呢,设计者已经考虑到当扫描时,如果有2个以上的按键被按下的话,可能造成IO输出的冲突,冲突的状况如下,当S1和S3被同时按下.
WWcW_PLCJS_COM-PLC-技.术_网

WWcW_PLCJS_COM-PLC-技.术_网

                                     图三
WWW.PLCJS.COM——可编程控制器技术门户

          图二那样处理,是可以避免IO输出冲突对IO的一些影响,但是,这样的思路却无法判断2个以上按键同时在同一输入行线被按下的情况,因为当有2个以上按键被按下时,按键扫描输入端的电平其实不是一个标准的1电平或者0电平.电压大概为多少,这要看有几个按键在同一输入行线上被按下以及MCU的IO驱动能力了.
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

         还是以传统思路,如果在列线输出上加一些二极管,这样由于二极管的单向导通性,电流无法回灌到输出口,哈哈.这样就可以避免冲突,而且又能判断多个按键在同行被输入了.如下图.
WWcW_PLCJS_COM-PLC-技.术_网

WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

                                                          图四
——可——编——程——控-制-器-技——术——门——户

           当然,以上这些加限流电阻,二极管等,都是按传统的扫描思路,从硬件上来处理IO的输出冲突的.万一硬件已经做成如下图这样的扫描方式,IO驱动能力强,直接用IO来扫描按键,不外加任何的电阻,二极管等.你还能做到,即能防止IO冲突,又能识别2个以上的按键在同一行输入呢,这就要看MCU在IO上的配置怎么样,机会不是没有,关键是看软件和硬件怎么配合的问题.
WWW_PL※CJS_COM-PLC-技.术_网

P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

如果真没有任何的外围元件,输入端需要在没有按键时有固定点平呈现,所以io需要配有上拉或者下拉,如果上拉的话,输出端需要以0来做有效的扫描信号,如果下拉,则以1来作为有效的扫描信号, 同时有2个以上按键被按下,又该怎么处理呢.以上拉为例,
WWW_PL※CJS_COM-PLC-技.术_网

        有效的扫描信号必须是0,所以如果同行有直接高电平输出肯定冲突.不输出高,又不能输出0,那输出什么呢.呵呵,输不出就对了,换输入吧,所以这样处理起来,整个扫描过程中,其实只有一条线是输出的,其他的行和剩余的列都是输入,现在想冲突都冲突不起来了.当然,如果你的mcu还不能单独的设置某个io为输入输出的话,那你的mcu太落伍了,赶紧换吧.在IO控制方面,所有的FPPA产品都能够单独控制单个IO为输入或者输出,而且还内置了上拉功能,这样IO使用起来是很方便的,不象一些6502核的MCU,IO需要一组一组的设定为输入或者输出,这样他们产品中的GUB就在所难免了,别看外面卖的遥控器很多,可能考虑了按键输出冲突应该很少.所以,从这个传统的矩阵扫描中,我们也可以看到,其实,软件有时可以帮助硬件解决一些问题的.而一个好的软件工程师,也应该对硬件有很好的掌握,这样,才能让软件和硬件充分配合起来,发挥更好的功能.
plcjs.技.术_网

上一篇: Arm7和arm9的不同之处
下一: 没有了
评论内容
载入中...
载入中...
P
L
C



|










|


P
L
C









·最新招聘信息
·最新求职信息
·推荐产品
·推荐厂商
·栏目热门排行
·站内热门排行