1、第9章 键盘接口及其设计9.1 按键的状态输入及去抖动 9.2 键盘与CPU的连接方式 9.3 键盘扫描控制方式9.4 独立式按键9.5 矩阵式键盘9.6 实践训练电子密码锁设计9.7 思考与练习本章要点在单片机控制系统中,为了实现人对系统的操纵控制及向系统输入参数,都需要为系统设置按键或键盘,实现简单的人机会话。键盘是一组(通常多于8个)按键的集合。键盘所使用的按键一般都是具有一对常开触点的按钮开关,平时不按键时,触点处于断开(开路)状态,当按下按键时,触点才处于闭合(短路)状态,而当按键被松开后,触点又处于断开状态。根据键盘上闭合键的识别方法不同,键盘可分为非编码键盘和编码键盘两种。非编码
2、键盘上,闭合键的识别采用软件实现;编码键盘上,闭合键的识别则由专门的硬件译码器产生按键的编号(即键码),并产生一个脉冲信号,以通知CPU接收键码。编码键盘使用较为方便,易于编程,但硬件电路较复杂,因此在单片机控制系统中应用较少。而非编码键盘几乎不需要附加什么硬件电路,因此在实际单片机控制系统中较多采用。从键盘的结构来分,键盘可分为独立式和矩阵式两类。当系统操作较简单,所需按键较少时,可采用独立式非编码键盘;而当系统操作较复杂,需要数量较多的按键时,可采用矩阵式非编码键盘。本章要点本章要点:单片机键盘的特点和应用独立式键盘及其接口矩阵式键盘及其接口 按键扫描驱动程序的设计和应用CONTNTS9.
3、1 按键的状态输入 及去抖动9.1 按键的状态输入及去抖动01 按键在电路中的连接如图9-1(a)所示。当操作按键时,对触点闭合或断开,引起A点电压的变化。A点电压就用来向单片机输入按键的通断状态。由于机械触点的弹性作用,触点在闭合和断开瞬间的电接触情况不稳定,造成了电压信号的抖动现象,如图9-1(b)所示。按键的抖动时间一般为510 ms。这种现象会引起单片机对于一次按键操作进行多次处理,因此必须设法消除按键通、断时的抖动现象。去抖动的方法有硬件和软件两种。在按键数较少时,可采用硬件去抖,而当按键数较多时,采用软件去抖。9.1 按键的状态输入及去抖动01 在硬件上可采用在按键输出端加RS触发
4、器(双稳态触发器)或单稳态触发器构成去抖动电路,图9-2所示是一种由RS触发器构成的去抖动电路,当触发器一旦翻转,触点抖动不会对其产生任何影响。电路工作过程如下:按键未按下时,a=0,b=1,输出Q=1,按键按下时,因按键的机械弹性作用的影响,使按键产生抖动,当开关没有稳定到达b端时,因与非门2输出为0反馈到与非门1的输入端,封锁了与非门1,双稳态电路的状态不会改变,输出保持为1,输出Q不会产生抖动的波形。当开关稳定到达b端时,因a=1,b=0,使Q=0,双稳态电路状态发生翻转。当释放按键时,在开关未稳定到达a端时,因Q=0,封锁了与非门2,双稳态电路的状态不变,输出Q保持不变,消除了后沿的抖
5、动波形。当开关稳定到达b端时,因a=0,b=0,使Q=1,双稳态电路状态发生翻转,输出Q重新返回原状态。由此可见,经双稳态电路之后,输出已变为规范的矩形方波。9.1 按键的状态输入及去抖动01软件上采取的措施是:在检测到有按键按下时,执行一个10 ms左右(具体时间应视所使用的按键进行调整)的延时程序后,再确认该键电平是否仍保持闭合状态电平,若仍保持闭合状态电平,则确认该键处于闭合状态;同理,在检测到该键释放后,也应采用相同的步骤进行确认,从而可消除抖动的影响。9.1 按键的状态输入及去抖动01【例9-1】利用外部中断INT0作为键盘输入端,当按键按下时,让单片机执行外部中断服务程序,在中断服
6、务中完成键盘控制。电路如图9-3所示。单片机的P0.0口接一只LED,键盘接在P3.2端口,按键不按时,由于P3.2接有上啦电阻R3,所以P3.2此时为高电平+5V,如果按键按下,P3.2电源地短路,P3.2为低电平。为了消除键盘抖动现象,键盘两端并联滤波电容器C4。9.1 按键的状态输入及去抖动01这里没有设置INT0是下降沿触发中断或是低电平触发中断,原因是按键按下,不管产生不产生键抖现象,总能使INT0引脚产生1个下降沿和低电平。如果设置只有下降沿才触发INT0中断,需要利用设置计时器控制寄存器TCON的IT0=1位,按键按下是否产生中断,可以利用程序检测TCON的IE0位。利用外部中断
7、触发作为按键输入很好的解决了键盘抖动问题。如果需要多个键盘,把INT0口与I/O口之间用键盘连接,I/O输出低电平扫面信号即可。在数码管动态显示电路中,为了节省硬件资源,可以在INT0口和P2口之间接入键盘,实现8只按键输入。CONTNTS9.2 键盘与CPU 的连接方式9.2 键盘与CPU的连接方式02键盘与CPU的连接方式有两大类,一类是独立式,另一类为矩阵式。独立式按键的每个按键都有一根信号线与单片机电路相连,所有按键有一个公共地或公共正端,每个按键相互独立互不影响。如图9-4所示,当按下按键1时,无论其他按键是否按下,按键1的信号线就由1变0;当松开按键1时,无论其他按键是否按下,按键
8、1的信号线就由0变1。独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O端线,在按键数量较多时,I/O端线耗费较多,且电路结构繁杂。故这种形式适用于按键数量较少的场合。9.2 键盘与CPU的连接方式02无论独立式按键还是矩阵式键盘,与8051 I/O口的连接方式可分为与I/O口直接连接和与扩展I/O口连接,与扩展I/O口连接又可分为与并行扩展I/O口连接和与串行扩展I/O口连接。矩阵式键盘的按键触点接于由行、列母线构成的矩阵电路的交叉处,每当一个键按下时通过该键将相应的行、列母线连通。若在行、列母线中把行母线逐行置0(一种扫描方式),那么列母线就用来作信号输入线。矩阵式键盘原理
9、图如图9-5所示。CONTNTS9.3 键盘扫描控制方式9.3 键盘扫描控制方式03在单片机应用系统中,对键盘的处理工作仅是CPU工作内容的一部分,CPU还要进行数据处理、显示和其他输入/输出操作,因此键盘处理工作既不能占用CPU太多时间,又需要对键盘操作能及时作出响应。CPU对键盘处理控制的工作方式有以下几种。1.程序控制扫描方式程序控制扫描方式是在CPU工作空余调用键盘扫描子程序,响应按键输入信号要求。程序控制扫描方式的按键处理程序固定在主程序的某个程序段。当主程序运行到该程序段时,依次扫描键盘,判断有否按键输入。若有,则计算按键编号,执行相应按键功能子程序。这种工作方式,对CPU工作影响
10、小,但应考虑键盘处理程序的运行间隔周期不能太长,否则会影响对按键输入响应的及时性。9.3 键盘扫描控制方式03 2.定时控制扫描方式定时控制扫描方式是利用定时/计数器每隔一段时间产生定时中断,CPU响应中断后对键盘进行扫描,并在有按键闭合时转入该按键的功能子程序。定时控制扫描方式与程序控制扫描方式的区别是,在扫描间隔时间内,前者用CPU工作程序填充,后者用定时/计数器定时控制。定时控制扫描方式也应考虑定时时间不能太长,否则会影响对按键输入响应的及时性。3.中断控制方式中断控制方式是利用外部中断源,响应按键输入信号。当无按键按下时,CPU执行正常工作程序。当有按键按下时,CPU立即产生中断。在中
11、断服务子程序中扫描键盘,判断是哪一个按键被按下,然后执行该按键的功能子程序。这种控制方式克服了前两种控制方式可能产生的空扫描和不能及时响应按键输入的缺点,既能及时处理按键输入,又能提高CPU运行效率,但要占用一个宝贵的中断资源。CONTNTS9.4 独立式按键9.4 独立式按键04独立式按键是指各按键相互独立地接通一条输入数据线。当任何一个键按下时,与之相连的输入数据线即可读入数据0,而没有按下时读入1。优点:电路简单;缺点:键数较多时,要占用较多的I/O线。单片机控制系统中,往往只需要几个按键,因此,可采用独立式按键结构,如图9-6所示。图9-6(a)为低电平有效输入,图9-6(b)为高电平
12、有效输入。独立式按键一般是每个按键占用一根I/O线。9.4 独立式按键04独立式按键的软件编程常采用查询式结构。先逐位查询每根I/O口线的输入状态,确定按键是否按下,如果按下,则转向该按键的功能处理程序。图9-6(a)所示的独立按键扫描C 语言程序如下:CONTNTS9.5 矩阵式键盘9.5 矩阵式键盘 05为了减少键盘与单片机接口时所占用I/O线的数目,在键数较多时,通常都将键盘排列成行列矩阵形式。每一水平线(行线)与垂直线(列线)的交叉处通过一个按键来连通。利用这种结构只需N条行线和M条列线,即可组成具有NM个按键的键盘。矩阵式键盘是由多个按键组成的开关矩阵,其按键识别方法有行反转法和扫描
13、法等。1.行反转法行反转法需要两个双向I/O口分别接行、列线。步骤如下:(1)输出。将矩阵键盘中与行、列相连的两组I/O口线中的一组(行或列均可)设置为输入线(接收线),输入线的初值应为全1,另一组设置为输出线(扫描线)。设置输出线的初值为全0,读取接收线口,若其中某1位为0,则说明有按键被按下,并保存。否则,无按键被按下。(2)行反转。将原有输入线和输出线的功能互换,即原扫描线设定为输入,初值为全1。原接收线设定为输出,并将第一步保存的原接收线的值输出,读取目前的接收线口(原扫描线口),并保存。9.5 矩阵式键盘 05(3)判定。第一步保存值中为0的位是被按下按键所在的接收线,即被按键所在的
14、行号(或列号);第二步保存值中为0的位是被按下按键所在的扫描线,即被按键所在的列号(或行号);可以判定:行线中为0位与列线中为0位的交叉点处的按键被按下。这样,根据扫描线和接收线读取的值就可以得出被按键的具体位置。9.5 矩阵式键盘 05 解答过程:图9-7所示为44矩阵式键盘。当无按键闭合时,P1.0P1.3与相应的P1.4P1.7之间开路。当有按键闭合时,与闭合按键相连接的两条I/O端线之间短路。判断有无按键按下的方法是:第一步,置列线P1.4P1.7为输入态,行线P1.0P1.3输出低电平,读入列线数据,若某一列线为低电平,则该列线上有按键闭合。第二步,置行线P1.0P1.3为输入态,列
15、线P1.4P1.7输出低电平,读入行线数据,若某一行线为低电平,则该行线上有按键闭合。综合一、二两步的结果,可确定按键编号。但是按键闭合一次只能进行一次按键功能操作,因此需等待按键释放后,再进行按键功能操作,否则按一次按键,有可能会连续多次进行同样的按键操作。9.5 矩阵式键盘 05C51程序:9.5 矩阵式键盘 052.扫描法行反转法是一种有效的键盘接口方法,不仅节省I/O口线,编程实现也较容易。在只需要扩展键阵的情况下是一种很好的方案,但是多数单片机应用系统中,不仅需要扩展键阵,同时还要扩展显示器,此时行反转法将不能满足要求。下面介绍另一种常用的键盘接口方法动态扫描法,动态扫描法不仅可以扫
16、描键阵,也可以实现显示,是目前应用十分广泛的一种方法。对键盘的扫描过程可分两步:第一步是CPU首先检测键盘上是否有按键按下;第二步是再识别是哪一个按键按下。对键盘的识别方法通常采用逐行(或列)扫描法,如图8-9所示。首先判断键盘中有无按键按下,由单片机通过I/O接口向键盘送(输出)全扫描字,然后读入(输入)行线状态来判别。其方法是:向列线输出全扫描字00H,即所有列线置成低电平,读入行线状态来判断。如果有按键按下,总会有一根行线电平被拉至低电平,从而使输入状态不全为1。9.5 矩阵式键盘 05键盘中按键的按下是通过列线逐列置低电平后,检查行输入状态来实现的,这称为逐行(或逐列)扫描。其方法是:
17、依次给列线送低电平,然后查所有行线状态,如果全为1,则所按下的按键不在此行;如果不全为1,则按下的按键必在此行,而且是与0电平列线相交的交点上的那个按键。这种逐行逐列地检查键盘状态的过程称为对键盘的一次扫描。单片机对键盘的扫描可以采取程序控制的随机方式,CPU空闲时扫描键盘,也可以采取定时控制方式,每隔一定的时间,CPU对键盘扫描一次,还可以采取中断方式,每当键盘上有按键闭合时,CPU请求中断,对键盘扫描,以识别哪一个按键处于闭合状态,并对此信息做出相应处理。CPU可以根据行线和列线的状态来确定键盘上闭合按键的键号,也可以根据行线和列线状态查表求得。9.5 矩阵式键盘 05CONTNTS9.6
18、 实践训练电子密码锁设计9.6 实践训练电子密码锁设计06根据设定好的密码,采用二个按键实现密码的输入功能,当密码输入正确之后,锁就打开,如果输入的三次的密码不正确,就锁定按键3秒钟,同时发现报警声,直到没有按键按下3种后,才打开按键锁定功能;否则在3秒钟内仍有按键按下,就重新锁定按键3秒时间并报警。9.6.1 应用环境 防盗门以及保险柜的密码设计系统9.6.2 电路图 电子密码锁的电路原理图如图9-9所示。9.6 实践训练电子密码锁设计069.6 实践训练电子密码锁设计069.6.3训练内容密码的设定,在此程序中密码是固定在程序存储器ROM中,假设预设的密码为“12345”共5位密码。初始化
19、时,是允许按键输入密码,当有按键按下并开始进入按键识别状态时,按键禁止功能被激活,但启动的状态在3次密码输入不正确的情况下发生的。或者输入确认功能键之后,才能完成密码的输入过程。进入密码的判断比较处理状态并给出相应的处理过程。由于采用两个按键来完成密码的输入,那么其中一个按键为功能键,另一个按键为数字键。在输入过程中,首先输入密码的长度,接着根据密码的长度输入密码的位数,直到所有长度的密码都已经输入完毕。C语言源程序如下:9.6 实践训练电子密码锁设计069.6 实践训练电子密码锁设计069.6 实践训练电子密码锁设计06CONTNTS9.7 思考与练习9.7 思考与练习071.概念题1)常用
20、的键盘有()和()两种。2)独立式按键键盘就是采用单独的按键直接连接到一个单片机的输入引脚上,每个按键占用()。3)()是将各个按键排列成行和列的阵列结构,其中,单片机的I/O接口一部分作为行,一部分作为列,按键布置在行线和列线的()位置。4)如下哪些方法不能实现按键去抖()。软件延时 电容式硬件结构 电阻式硬件结构 双稳态电路消抖5)哪个方法可以获取阵列式键盘的键值()。动态扫描法 行反转法 中断法 以上都可以6)键盘程序设计需要注意的问题为()。按键消抖 多按键处理 避免重复响应 以上都是7)按键开关为什么有去抖动问题?如何消除?8)键盘与CPU的连接方式如何分类?各有什么特点?9)键盘扫描控制方式有哪几种?各有什么优缺点?10)试述矩阵式键盘判别按键闭合的方法。9.7 思考与练习072.操作题1)设计一个8051外扩键盘和显示器电路,要求扩展8个键,4位LED显示器。2)使用8155的PC口设计一个3行6列键盘矩阵的接口电路,并编写出与之对应的键盘识别程序。3)设计一个含8位动态显示和28键阵的硬件电路,并编写程序,实现将按键内容显示在LED数码管上的功能。Thank you for viewing