1、8 8.3 键盘键盘接口技术接口技术一、一、 键盘输入应解决的问题键盘输入应解决的问题键盘是一组按键的集合,它是最常用的单片机输入设备键盘是一组按键的集合,它是最常用的单片机输入设备操作人员可以通过键盘输入数据或命令,实现简单的人机通讯。操作人员可以通过键盘输入数据或命令,实现简单的人机通讯。键是一种常开型按钮开关,平时键是一种常开型按钮开关,平时(常态常态)键的二个触点处于断开状键的二个触点处于断开状态,按下键时它们才闭合态,按下键时它们才闭合(短路短路)。键盘分编码键盘和非编码键盘。键盘分编码键盘和非编码键盘。键盘上闭合键的识别由专用的硬件译码器实现并产生编号键盘上闭合键的识别由专用的硬件
2、译码器实现并产生编号或键值的称为编码键盘,或键值的称为编码键盘,如:如:ASC码键盘、码键盘、BCD 码键盘等;码键盘等;靠软件识别的称为非编码键盘。靠软件识别的称为非编码键盘。在单片机组成的测控系统及智能化仪器中用得最多的是非编码在单片机组成的测控系统及智能化仪器中用得最多的是非编码键盘。键盘。本节着重讨论非编码键盘的原理、接口技术和程序设计。本节着重讨论非编码键盘的原理、接口技术和程序设计。键盘中每个按键都是键盘中每个按键都是个常开关电路,如图所示。个常开关电路,如图所示。1. 按键的确认:按键的确认:P1.7=1 无按键;无按键;P1.7=0 有按键;有按键;2. 去抖动去抖动去抖动的方
3、法:去抖动的方法: 硬件去抖动硬件去抖动采用采用 RS 触发器:触发器:优点优点:速度快速度快,实时实时,缺点缺点:增加了硬件成本增加了硬件成本 软件去抖动软件去抖动采用延时方法采用延时方法延时延时 510ms延时延时 510msP1.7=0确认确认 P1.7=0P1.7=1(去前沿抖动去前沿抖动)(去后沿抖动去后沿抖动)二、二、 独立式键盘独立式键盘每个每个 I/O 口连接一个按,口连接一个按,S1P1.0S2P1.1.S8P1.7软件:软件:START:MOVP1,#0FFH;置置 P1 口为高电平口为高电平JNBP1.0,RS1;S1S1 按下按下, ,程序去执行程序去执行 RS1RS1
4、JNBP1.1,RS2;S2S2 按下按下, ,程序去执行程序去执行 RS2RS2JNBP1.2,RS3;S3S3 按下按下, ,程序去执行程序去执行 RS3RS3JNBP1.3,RS4;S4S4 按下按下, ,程序去执行程序去执行 RS4RS4JNBP1.4,RS5;S5 按下按下,程序去执行程序去执行 RS5JNBP1.5,RS6;S6 按下按下,程序去执行程序去执行 RS6JNBP1.6,RS7;S7 按下按下,程序去执行程序去执行 RS7JNBP1.7,RS8;S8 按下按下,程序去执行程序去执行 RS8AJMPSTART;继续扫描按键继续扫描按键.RS1:AJMPPK1;RS2:AJ
5、MPPK2;RS3:AJMPPK3;RS4:AJMPPK4;RS5:AJMPPK5;RS6:AJMPPK6;RS7:AJMPPK7;RS8:AJMPPK8;AJMPSTART; 无键按下无键按下,继续扫描继续扫描PK1:.; 按键按键 S1 功能处理程序功能处理程序AJMPSTART; 处理处理 S1 按键后按键后, 继续扫描继续扫描PK2:.; 按键按键 S2 功能处理程序功能处理程序AJMPSTART.PK8:; 按键按键 S8 功能处理程序功能处理程序AJMPSTART; 处理处理 S8 按键后按键后, 继续扫描继续扫描优点优点: 连线简单连线简单,程序容易程序容易.缺点缺点: 太浪费资
6、源太浪费资源适用于按键较少适用于按键较少、I/O 口空闲的场合。口空闲的场合。三、行列式非编码键盘接口方法三、行列式非编码键盘接口方法按键较多时按键较多时, ,一般采用行列式键盘一般采用行列式键盘. .采用扫描方式采用扫描方式, ,软件扫描方式有三种软件扫描方式有三种: :程序扫描方式程序扫描方式: : 当当 CPUCPU 空闲时空闲时, ,扫描键盘扫描键盘, ,判断有无键按下判断有无键按下. .定时扫描方式定时扫描方式: : 利用利用 CPUCPU 的定时器的定时器, ,每隔一定时间扫描一次键盘每隔一定时间扫描一次键盘. .中断扫描方式中断扫描方式: : 在硬件上采用中断在硬件上采用中断,
7、,有键按下时有键按下时, ,产生中断产生中断, ,由中断服务程序来处理由中断服务程序来处理. .下面是下面是 1616 个按键个按键, ,构成的构成的 4 44 4 键盘键盘行线行线: : 四根四根, ,接接 P1.0-P1.3P1.0-P1.3列线列线: : 四根四根, ,接接 P1.4-P1.7P1.4-P1.7程序扫描法原理程序扫描法原理: :1 1P1.0-P1.3P1.0-P1.3 输出低电平输出低电平, ,读读 P1.4P1.4P1.7,P1.7,若全为若全为 1,1,无键按下无键按下若不全为若不全为 1,1,有键按下有键按下在有键按下的情况下在有键按下的情况下, ,进一步判断是那
8、个键按下进一步判断是那个键按下使使 P1.0-P1.3P1.0-P1.3 依次输出低电平依次输出低电平, ,读读 P1.4-P1.7P1.4-P1.7判断有无键按下子程序判断有无键按下子程序, ,程序名程序名: : KAPKAP 键盘查询子程序键盘查询子程序KAP:KAP:MOVMOVP1,#0F0HP1,#0F0H;行线输出低电平行线输出低电平,列线输出高电平列线输出高电平MOVMOVA A,P1P1;P1P1 口读入口读入 A ACPLCPLA A;取反取反ANLANLA A,#0F0H#0F0H;取高四位,即取高四位,即 P1.4-P1.7P1.4-P1.7RETRET程序出口程序出口:
9、 : A=0,A=0,则无键按下则无键按下. .A A0 0则有键按下则有键按下. .去抖动去抖动-延时延时 10ms 子程序子程序: 程序名程序名 D10MSD10MS:MOV R6,#14H;DL:MOVR7,#0FFH;DJNZR7,$DJNZR6,DLRETKINP:LCALLKAP; 调键盘查询子程序调键盘查询子程序,JNZKP1;A0,有键按下有键按下SJMPKINP;A=0,无键按下无键按下,重新查询重新查询KP1:LCALLD10MS;延时延时 10MS,去抖动去抖动LCALLKAP;再次查询键盘再次查询键盘,JNZKP2;A0,确认有键按下确认有键按下SJMPKINP;A=0
10、,误操作误操作,重新查询重新查询KP2 为取键值子程序为取键值子程序KP2:MOV R2,#0FEH; R2 为行扫描值为行扫描值MOV R4,#00H; R4 初值为第初值为第 0 行行首键号行行首键号KP4:MOV P1,R2; 扫描行为低扫描行为低MOV A,P1; 读读 P1JB ACC.4,L1; 第第 0 列不为低列不为低,则检查第则检查第 1 列列MOV A,#00H; 为低为低,则行首键值送入则行首键值送入 AAJMPKP5;KP5L1:JBACC.5, L2; 检查第一列检查第一列MOV A,#04H; 第一列行首键值送入第一列行首键值送入 AAJMPKP5L2:JBACC.
11、6 , L3; 检查第二列检查第二列MOV A,#08H; 第二列行首键值送入第二列行首键值送入 AAJMPKP5L3:JBACC.7 , NEXT ; 检查第三列检查第三列,若为若为 1,则检查下一则检查下一行行MOV A,#0CH; 第三列行首键值送入第三列行首键值送入 AKP5:ADDA,R4;AA+R4,键值调整键值调整PUSHA;KP3:LCALLD10MS; 后沿去抖动后沿去抖动LCALLKAP; 查询按键是否释放查询按键是否释放JNZKP3;A0 未释放未释放,继续查询继续查询POPA; 键已释放键已释放,弹出键值弹出键值RETNEXT:INCR4; 下一列下一列,行键值加行键值加 1MOV A,R2; 取扫描值取扫描值JNBACC.4, KINP; 判断扫描是否结束判断扫描是否结束?RLA; 下一个扫描值下一个扫描值MOV R2,A;AJMPKP4;