资源描述:
《片机独立式按键、矩形按键的应用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第八章常规按键的应用硅谷芯微技术贡献网址:www.threeway.cc键盘分编码键盘和非编码键盘。键盘上闭合键的识别由专用硬件编码器实现,并产生键编码号或键值的称为编码键盘,如BCD码键盘、ASCLL码键盘等;而靠软件来识别的称为非编码键盘;在单片机组成的测控系统及智能化仪器中,用的最多的是非编码键盘。非编码键盘有分为:独立式非编码键盘和行列式非编码键盘(矩阵键盘)。无论是何种按键,其功能实现都是分为三个步骤:键盘的分类8.1.独立按键8.1.1.独立按键原理单片机中除了P0接口,其它I/O接口内部都有上拉电阻。上图所示P1.0-P1.2接了4个按键,当没有按下按键时对应的I/O接口为高
2、电平。当按下按键时,对应管脚会变为低电平。因此只要检测到对应管脚是否为低电平就知道此按键是否被按下。8.1.2.按键消抖当某个按键被按下,由于其触点的机械特性,会抖动约20mS,才会稳定下来,如图所示的波形。如果在此期间去检测,很可能产生误判,所以检测到有键被按下并延时20ms避开抖动期,然后才去检测是哪个被按下。另外手松开也有抖动,所以很有可能在刚才判断时,有按键,等延时20ms之后,就没有按键了。为了提高效率,应在延时20ms后再次判断一下,是否有键被按下。扫描按键式独立按键中断式独立按键扫描式独立按键,这种接法只是将每个按键连接在了I/O口上,在编写程序时只需要不断的扫描I/O口电平
3、的变化就可以了,如果I/O口有电平变化,说明有按键按下,则此时只需要按按键判别的顺序进行判断,这种方法的缺点是,CPU要不断的扫描I/O的电平,占用CPU的时间,较为好的方法是上图所示的中断方案,在这种连接中,当有按键按下时,7408就会在P3.2口产生一个低电平,触发中断,所以此时,单片机不需要不断的扫描I/O口上是否有电平的变化,只需要在产生中断后进行按键处理就可以了,这种方案的缺点是要多占用一个单片机的中断,且要在硬件连接上较为复杂。ORG0000HLJMPMAINORG0030HMAIN:MOVP1,#0FFHMOVA,P1CJNEA,#0FFH,L_PRESSLJM
4、PMAINL_PRESS:LCALLDELAY20MS;消抖MOVP1,#0FFHMOVA,P1CJNEA,#0FFH,L_TUREPRESSLJMPMAINL_TUREPRESS:CJNEA,#11111110BLCALLKEY0;KEY0服务程序LJMPL_EXITCJNEA,#11111101BLCALLKEY1;KEY1服务程序LJMPL_EXIT………..CJNEA,#11111110BLCALLKEY7;KEY7服务程序L_EXIT:LJMPMAIN8.1.3.独立按键流程图与软件实现8.2矩阵按键8.2.1.矩阵按键的原理在矩阵式键盘中,每条水平线
5、和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。矩阵式结构的键盘显然比独立键盘要复杂一些。8.2.2.矩阵按键检测硬件电路如上图单片机的P1口用作键盘I/O口,键盘的行线接到P1口的低4位,键盘的列线接到P1口的高4位。4根行线和4根列线形成16个相交点。每个交点为一个按键,每个按键赋一个键值,从左到右从上到下依次为0-15。检测当
6、前是否有键被按下。检测的方法是P1.4-P1.7输出全“0”,P1.0-P1.3设置为1读取P1.0-P1.3的状态,若P1.0-P1.3为全“1”,则无键闭合,否则有键闭合。或者将列设为输入,行设为输出。L_LOOP:MOVP1,#0FHMOVA,P1CJNEA,#0FH,L_PRESS;判断是否有按键LJMPL_EXIT8.2.3.计算键值若有键被按下,判断是哪一个键闭合。方法是对键盘的行线进行扫描。然后进行列线扫描。在列输出行输入时(即列P1.4-P1.7全为0,行P1.0-P1.3全为1)读取P1.0-P1.3,若全为“1”,则表示没有键闭合,否则有键闭合。由此得到闭合键的行值,然
7、后行输出列输入时(即列P1.4-P1.7全为1,行P1.0-P1.3全为0)读取P1.4-P1.7,由此得到闭合键的列值。最后可采用计算法或查表法将闭合键的行值和列值转换成所定义的键值。按照上面所赋的键值标示,键值=行*4+列。如果键值标示有所改变那么此公式就要相应的发生改变。计算行:行全部输出高电平,列全部输出低电平,读回数据,如果P1.0-P1.3某行变为低电平就知道该行上面有按键。代码如左下:计算列:行全部输出低电