单片机键盘原理和实现(共9页).doc
精选优质文档-倾情为你奉上§8.3 键盘接口技术一、 键盘输入应解决的问题键盘是一组按键的集合,它是最常用的单片机输入设备操作人员可以通过键盘输入数据或命令,实现简单的人机通讯。键是一种常开型按钮开关,平时(常态)键的二个触点处于断开状态,按下键时它们才闭合(短路)。键盘分编码键盘和非编码键盘。键盘上闭合键的识别由专用的硬件译码器实现并产生编号或键值的称为编码键盘,如:ASC码键盘、BCD码键盘等;靠软件识别的称为非编码键盘。在单片机组成的测控系统及智能化仪器中用得最多的是非编码键盘。本节着重讨论非编码键盘的原理、接口技术和程序设计。键盘中每个按键都是个常开关电路,如图所示。1. 按键的确认: P1.7=1 无按键; P1.7=0 有按键;2. 去抖动 去抖动的方法: 硬件去抖动 采用RS触发器: 优点: 速度快,实时, 缺点: 增加了硬件成本 软件去抖动 采用延时方法 延时510ms 延时510ms P1.7=0 确认P1.7=0 P1.7=1(去前沿抖动) (去后沿抖动) 二、 独立式键盘 每个I/O口连接一个按,S1 P1.0S2 P1.1.S8 P1.7 软件: START: MOV P1,#0FFH ;置P1口为高电平JNB P1.0, RS1 ; S1按下,程序去执行RS1JNB P1.1, RS2 ; S2按下,程序去执行RS2JNB P1.2, RS3 ; S3按下,程序去执行RS3JNB P1.3, RS4 ; S4按下,程序去执行RS4JNB P1.4, RS5 ; S5按下,程序去执行RS5JNB P1.5, RS6 ; S6按下,程序去执行RS6JNB P1.6, RS7 ; S7按下,程序去执行RS7JNB P1.7, RS8 ; S8按下,程序去执行RS8AJMPSTART ; 继续扫描按键.RS1:AJMP PK1 ;RS2:AJMP PK2;RS3:AJMP PK3;RS4:AJMP PK4;RS5:AJMP PK5;RS6:AJMP PK6;RS7:AJMP PK7;RS8:AJMP PK8;AJMP START ; 无键按下,继续扫描PK1:. ; 按键S1功能处理程序 AJMP START ; 处理S1按键后, 继续扫描PK2:. ; 按键S2功能处理程序 AJMP START .PK8: ; 按键S8功能处理程序 AJMP START ; 处理S8按键后, 继续扫描优点: 连线简单,程序容易.缺点: 太浪费资源适用于按键较少、I/O口空闲的场合。三、行列式非编码键盘接口方法 按键较多时,一般采用行列式键盘.采用扫描方式,软件扫描方式有三种: 程序扫描方式: 当CPU空闲时,扫描键盘,判断有无键按下. 定时扫描方式: 利用CPU的定时器,每隔一定时间扫描一次键盘. 中断扫描方式: 在硬件上采用中断,有键按下时,产生中断, 由中断服务程序来处理.下面是16个按键,构成的4×4键盘 行线: 四根,接P1.0-P1.3 列线: 四根,接P1.4-P1.7 程序扫描法原理: P1.0-P1.3输出低电平,读P1.4P1.7,若全为1,无键按下若不全为1,有键按下 在有键按下的情况下,进一步判断是那个键按下 使P1.0-P1.3依次输出低电平,读P1.4-P1.7判断有无键按下子程序, 程序名: KAP键盘查询子程序KAP:MOV P1,#0F0H ;行线输出低电平,列线输出高电平 MOVA,P1 ;P1口读入ACPL A ;取反ANL A,#0F0H ;取高四位,即P1.4-P1.7RET程序出口: A=0, 则无键按下. A0 则有键按下.去抖动-延时10ms子程序: 程序名D10MSD10MS:MOVR6, #14H;DL:MOV R7,#0FFH; DJNZ R7,$DJNZ R6,DLRETKINP:LCALLKAP; 调键盘查询子程序,JNZKP1; A0,有键按下SJMP END_KINP ; A=0,无键按下,退出按键查询程序KP1:LCALLD10MS;延时10MS,去抖动LCALLKAP;再次查询键盘,JNZKP2; A0,确认有键按下SJMPEND_KINP; A=0,误操作,重新查询KP2为取键值子程序KP2:MOVR2,#0FEH; R2为行扫描值MOVR4,#00H; R4初值为第0行行首键号CLRF0; F0=0表示正在扫描键盘KP4:MOV P1,R2; 扫描行为低MOV A,P1; 读P1JBACC.4, L1; 第0列不为低,则检查第1列MOVA,#00H; 为低,则行首键值送入AAJMPKP5; KP5L1:JB ACC.5,L2; 检查第一列MOVA,#04H; 第一列行首键值送入AAJMPKP5L2:JB ACC.6 ,L3 ; 检查第二列MOVA,#08H; 第二列行首键值送入AAJMPKP5L3:JB ACC.7 , NEXT; 检查第三列,若为1,则检查下一行MOVA,#0CH; 第三列行首键值送入AKP5:ADDA , R4; A A+R4,键值调整PUSHA; KP3:LCALLD10MS; 后沿去抖动LCALLKAP; 查询按键是否释放JNZKP3; A0 未释放,继续查询POPA; 键已释放,弹出键值RETNEXT:INCR4; 下一列,行键值加1MOV A ,R2; 取扫描值JNB ACC.3,END_KINP; 判断扫描是否结束?RLA; 下一个扫描值MOVR2, A;AJMP KP4 ; END_KINP:SETB F0 RET专心-专注-专业