1、PC机除了主机以外还需要哪些部分呢?单片机电路有时候也需要键盘、显示等外设。单片机组成的控制系统通常需要配置键盘,用单片机组成的控制系统通常需要配置键盘,用户可以通过键盘向单片机输入数据或命令,以便实户可以通过键盘向单片机输入数据或命令,以便实现控制系统的人机对话。键盘可以直接利用口线连现控制系统的人机对话。键盘可以直接利用口线连接按键开关、开关型传感器或电子线路来实现,内接按键开关、开关型传感器或电子线路来实现,内部程序仅通过判断口线的电平就能够确定输入的键部程序仅通过判断口线的电平就能够确定输入的键值。采用这种识别方式的键盘称为非编码键盘。非值。采用这种识别方式的键盘称为非编码键盘。非编码
2、键盘设计简单,使用方便,且因为具有共用端,编码键盘设计简单,使用方便,且因为具有共用端,容易直接同开关电路或开关型传感器连接。但是这容易直接同开关电路或开关型传感器连接。但是这种方式的口线利用率较低,受单片机口线数量的限种方式的口线利用率较低,受单片机口线数量的限制,其键盘规模无法做大。制,其键盘规模无法做大。按键的特点及工作原理独立式按键矩阵式按键 键盘接口技术键盘接口技术按键的特点及工作原理v按键的分类:按键的分类:触点式:机械;无触点式:电气触点式:机械;无触点式:电气v键输入原理:键输入原理:通过按键的接通与断开,产生两种相反的逻辑通过按键的接通与断开,产生两种相反的逻辑状态状态 低电
3、平低电平“0 0”与与高电平高电平“1 1”。v键功能的实现:键功能的实现:对于一组键或一个键盘,需通过接口电路与单对于一组键或一个键盘,需通过接口电路与单片机相连。可采用查询或中断方式测试有无键按下,片机相连。可采用查询或中断方式测试有无键按下,再确定是哪一个键按下,将该键号送入累加器再确定是哪一个键按下,将该键号送入累加器ACCACC,然后判断是数字键还是功能键,若是数字键,则,然后判断是数字键还是功能键,若是数字键,则将键号对应的数字送入相关输入缓冲区;若是功能将键号对应的数字送入相关输入缓冲区;若是功能键,则通过跳转指令转入执行该键的功能程序,执键,则通过跳转指令转入执行该键的功能程序
4、,执行完后再返回主程序。行完后再返回主程序。键盘接口需要解决的问题是否有键按下(通过编程来判断是否有键按下)是否有键按下(通过编程来判断是否有键按下)按键识别:按键识别:键抖动及消除:主要指机械按键键抖动及消除:主要指机械按键抖动就是键处于似接非接的状态。抖动就是键处于似接非接的状态。机械按键抖动时间在机械按键抖动时间在5 5msms10ms10ms之之间间 硬件方案硬件方案双稳态去抖电路双稳态去抖电路 软件方案软件方案延时延时10ms10ms20ms20ms后再次判断,按下去了说明后再次判断,按下去了说明键确实按下了,没有按下说明前一次是抖动产生的。键确实按下了,没有按下说明前一次是抖动产生
5、的。消除方法消除方法:求键号(确定有键按下了,还要确定是哪个键按下了)求键号(确定有键按下了,还要确定是哪个键按下了)键盘在使用中还应考虑到人员操作或机械特性在接键盘在使用中还应考虑到人员操作或机械特性在接触时产生的抖动问题,即按键开关在接通或断开瞬间并触时产生的抖动问题,即按键开关在接通或断开瞬间并非完全可靠接触,而是存在一个抖动期,在此期间的电非完全可靠接触,而是存在一个抖动期,在此期间的电平变化波形如图所示。图中平变化波形如图所示。图中t tH H为开关断开时口线上高电为开关断开时口线上高电平存在的时间,平存在的时间,t tL L为开关闭合时口线上低电平稳定存在为开关闭合时口线上低电平稳
6、定存在的时间,的时间,t tW1W1、t tW2W2为键按下和松开时的抖动期存在时间。为键按下和松开时的抖动期存在时间。抖动期一般不超过抖动期一般不超过10 ms10 ms。在口线电平抖动期间,单片。在口线电平抖动期间,单片机无法准确检测出口线电平的正确值,必须采取一定的机无法准确检测出口线电平的正确值,必须采取一定的措施进行鉴别。措施进行鉴别。独立式按键独立式按键接口电路:特点:一线一键,按键识别(编程)简单;但占用特点:一线一键,按键识别(编程)简单;但占用特点:一线一键,按键识别(编程)简单;但占用特点:一线一键,按键识别(编程)简单;但占用较多口线,适合较多口线,适合较多口线,适合较多
7、口线,适合8 8 8 8键以下使用。键以下使用。键以下使用。键以下使用。例例1 1:用:用P1P1口检测三个按键的状态并完成相应的功能口检测三个按键的状态并完成相应的功能解:资源分配:用P1口的低3位检测3个按键的输入,为1则表示按键没有按下,为0则表示相应按键被按下。流程图:抖抖动动来来的的判断完是否有键按下后有两种执行方式:判断完是否有键按下后有两种执行方式:1.1.判断键按下去后就执行该按键的功能判断键按下去后就执行该按键的功能2.2.判断键释放后才执行该按键的功能判断键释放后才执行该按键的功能 ORG 0000H 如果不送高电平如果不送高电平,原来是低电平,原来是低电平KB:MOV P
8、1,#0FFH;状态的管脚读进来会出错状态的管脚读进来会出错 MOV A,P1;有键按下为;有键按下为0,无键按下为,无键按下为1 CPL A ANL A,#07H;屏蔽其它位状态;屏蔽其它位状态 JZ KB LCALL D10MS;去抖动;去抖动 MOV A,P1 CPL A ANL A,#07H JZ KB 编程:按三个按键中的任一键都对应一个特定功能。判断按键是否按下?CJNE A,#01H,KB01 LCALL PGM1 SJMP KBKB01:CJNE A,#02H,KB02 LCALL PGM2 SJMP KBKB02:CJNE A,#04H,KB LCALL PGM3 SJMP
9、KBPGM1:RET判断具体哪个键按下并转去执行相应功能矩矩阵阵式式按按键键关键:如何关键:如何判断键号?判断键号?3210476511109815141312+5VP1.4P1.3P1.0MCS-51P1.7P1.6P1.5P1.2P1.1接口电路:特点:按键识别应采用扫描法或线路反转法特点:按键识别应采用扫描法或线路反转法特点:按键识别应采用扫描法或线路反转法特点:按键识别应采用扫描法或线路反转法 编程较为复杂,节省口资源,编程较为复杂,节省口资源,编程较为复杂,节省口资源,编程较为复杂,节省口资源,8 8 8 8键以上使用键以上使用键以上使用键以上使用行行首首号号列首号列首号键号键号=行
10、首号行首号+列首号列首号 键值产生的原理键值产生的原理 1)1)扫描法产生键值扫描法产生键值具体方法是,以行线作为扫描输出,以列线作为接收输具体方法是,以行线作为扫描输出,以列线作为接收输入,依次将行线置为低电平,并在列线上逐次接收数据。扫入,依次将行线置为低电平,并在列线上逐次接收数据。扫描完成后,如果发现接收到的某一列线有低电平,则表示该描完成后,如果发现接收到的某一列线有低电平,则表示该列线与行线连接的按键已经闭合。在接收到低电平的那次扫列线与行线连接的按键已经闭合。在接收到低电平的那次扫描中,行线数据与列线数据的组合便是所期望的键值,由该描中,行线数据与列线数据的组合便是所期望的键值,
11、由该键值可确定闭合键在矩阵连接中的连接位置。键值可确定闭合键在矩阵连接中的连接位置。2)2)线反转识别法产生键值线反转识别法产生键值具体方法是,先将行线全部置为低电平,列线全部置为具体方法是,先将行线全部置为低电平,列线全部置为高电平,从列线对应的高电平,从列线对应的I/OI/O口线接收数据,如果发现有口线口线接收数据,如果发现有口线变低,则证明该列线与闭合的按键连接。反之,将列线全部变低,则证明该列线与闭合的按键连接。反之,将列线全部置为低电平,行线全部置为高电平,从行线对应的置为低电平,行线全部置为高电平,从行线对应的I/OI/O口线口线接收数据,如果发现有口线变低,则证明该行线与闭合的按
12、接收数据,如果发现有口线变低,则证明该行线与闭合的按键连接。对上述两次操作的结果所获得的两个键连接。对上述两次操作的结果所获得的两个8 8位数据进行位数据进行综合分析,便可确定闭合的按键所在位置。综合分析,便可确定闭合的按键所在位置。键盘扫描子程序一般包括以下内容:1.判别有无键按下;2.扫描获取闭合键的行、列值;3.用计算法或查表法得到键值;4.判断闭合键释放否,如没释放则继续等待;5.保存闭合键号。散转指令散转指令 JMP A+DPTRJMP A+DPTR键按下键按下/释放判断释放判断 KS:MOV A,#00H MOV P1,A ;全扫描字#00H送P1口 MOV P1,#0FH ;从P
13、1口的低4位取数,必须使低4位为高电平 MOV A,P1 ;读入P1口状态 CPL A ;变正逻辑,高电平表示有键按下 ANL A,#0FH ;取低4位 RET ;返回,A0表示有键按下MAIN:LCALL KS JZ M ;等于0说明没有键按下,转移到M .按键识别扫描法 流程:当当第第0 0列列处处于于低低电电平平时时,逐逐行行查查找找是是否否有有行行线线变变低低,若若有有,则则第第0 0列列与与该该行行的的交交叉叉点点按按键键按按下下;若若无无,则则表表示示第第0 0列列无无键键按按下下,再再让让下下一一列列处处在在低低电电平平,依依此此循循环环,这这种方式称为种方式称为键盘扫描键盘扫描
14、。键号键号=行首键号(行首键号(0 0、4 4、8 8、1212)+列号(列号(0 0、1 1、2 2、3 3)原理:在某一时刻只让在某一时刻只让一条列线一条列线处于处于低低电平,其余列线均电平,其余列线均处于高电平,则当这一列有键按下时,该键所在的行处于高电平,则当这一列有键按下时,该键所在的行电平将会由高电平变为低电平,可判定该列相应的行电平将会由高电平变为低电平,可判定该列相应的行有键按下。有键按下。例2:键盘扫描程序SERCH:MOV R2,#0EFH;让某一列为0,11101111 MOV R3,#00H;R3作为列号的寄存器 LINE0:MOV A,R2 MOV P1,A;对应的列
15、为低电平了 MOV A,P1 JB ACC.3,LINE1;为1,没有键按下,查下一行 MOV A,#00H ;为0,有键按下,存行首号 AJMP TRYKLINE1:JB ACC.2,LINE2 MOV A,#04H AJMP TRYK LINE2:JB ACC.1,LINE3 MOV A,#08H此时假设键已经按下了,此时假设键已经按下了,我们现在只需判断键号我们现在只需判断键号 AJMP TRYKLINE3:JB ACC.0,LINE4 MOV A,#0CH AJMP TRYKLINE4:INC R3 ;4行都没有查到,列号加1 MOV A,R2 ;初值左移1位,变为11011111 R
16、L A JNB ACC.0,BACK;11111110时,子程序返回,重来 MOV R2,A;列号左移为 11011111,则在从第一行开始查 AJMP LINE0 TRYK:ADD A,R3;行首号和列号相加 BACK:RET定时扫描方式 定时扫描方式就是每隔一段时间对键盘扫描一次,它利用单片机内部的定时器产生一定时间(例如10 ms)的定时,当定时时间到就产生定时器溢出中断。CPU响应中断后对键盘进行扫描,并在有键按下时识别出该键,再执行该键的功能程序。利用定时器,利用定时器,定时的去扫描定时的去扫描按键。查询法按键。查询法;对定时器工作方式进行设定;对定时器工作方式进行设定;对定时器设定
17、初值;对定时器设定初值;启动定时器;启动定时器;定时时间到,转移到查键号;定时时间到,转移到查键号;判断到;判断到100次了吗?次了吗?;调用键测试程序,判断有键按下吗?;调用键测试程序,判断有键按下吗?;A为为0,没有键按下,继续定时,没有键按下,继续定时;有键按下,有可能因为抖动,延时。;有键按下,有可能因为抖动,延时。;调用键测试程序,判断有键按下吗?;调用键测试程序,判断有键按下吗?;调用确定键号程序;调用确定键号程序中断的方法中断的方法;定时器;定时器T1的中断入口地址的中断入口地址;中断允许;中断允许主程序主程序中断子程序中断子程序;对定时器工作方式进行设定;对定时器工作方式进行设
18、定;对定时器设定初值;对定时器设定初值;启动定时器;启动定时器;等待定时时间到,到了就产生中断;等待定时时间到,到了就产生中断;关中断;关中断;调用键测试程序,判断有键按下吗?;调用键测试程序,判断有键按下吗?;A为为0,没有键按下,继续定时,没有键按下,继续定时;有键按下,有可能因为抖动,延时。;有键按下,有可能因为抖动,延时。;调用键测试程序,判断有键按下吗?;调用键测试程序,判断有键按下吗?;调用确定键号程序;调用确定键号程序;确定键号后,执行键的功能;确定键号后,执行键的功能;中断允许;中断允许中断扫描方式 为提高CPU工作效率,可采用中断扫描工作方式。其工作过程如下:当无键按下时,C
19、PU处理自己的工作,当有键按下时,产生中断请求,CPU转去执行键盘扫描子程序,并识别键号。随机性的随机性的与门与门+5+5伏伏0 00 00 00 0;INT0的中断入口地址的中断入口地址;低;低4位为位为0,高,高4位为位为1;中断允许;中断允许;等待有键按下;等待有键按下;调用键测试程序,判断有键按下吗?;调用键测试程序,判断有键按下吗?;A为为0,没有键按下,继续等待,没有键按下,继续等待;调用键测试程序,判断有键按下吗?;调用键测试程序,判断有键按下吗?;有键按下,有可能因为抖动,延时。;有键按下,有可能因为抖动,延时。;调用确定键号程序;调用确定键号程序;A为为0,没有键按下,继续等待,没有键按下,继续等待;中断允许;中断允许