单片机键盘原理及实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
优选文档
§键盘接口技术
一、键盘输入应解决的问题
键盘是一组按键的会集,它是最常用的单片机输入设备.
操作人员可以经过键盘输入数据或命令,实现简单的人机通讯。
键是一种常开型按钮开关,平时 ( 常态 ) 键的二个触点处于断开状
态,按下键时它们才闭合
(
短路 ) 。
键盘分编码键盘和非编码键盘。
键盘上闭合键的鉴别由专用的硬件译码器实现并产生编
号或键值的称为编码键盘,
如: ASCⅡ码键盘、 BCD码键盘
等;靠软件识其余称为非编码键盘。
在单片机组成的测控系统及智能化仪器中用得最多的是非编码
键盘。
本节重视议论非编码键盘的原理、接口技术和程序设计。
键盘中每个按键都是—个常开关电路,以以下列图。
1
1.按键的确认: P1.7=1 无按键;
P1.7=0 有按键;
2.去抖动
去抖动的方法:
①硬件去抖动采用RS触发器:
优点 :速度快,实时,
缺点 :增加了硬件成本
② 软件去抖动采用延时方法
延时 5—10ms延时5—10ms P1.7=0确认P1.7=0P1.7=1
( 去前沿抖动 )(去后沿抖动) 二、独立式键盘
每个 I/O 口接一个按, S1
S2
⋯⋯⋯⋯⋯⋯⋯⋯⋯ .
S8
件:
START: MOV P1 ,#0FFH ;置 P1 口高平
JNB P1.0, RS1 ; S1 按下 , 程序去行 RS1
JNB P1.1, RS2 ; S2 按下 , 程序去行 RS2
JNB P1.2, RS3 ; S3 按下 , 程序去行 RS3
JNB P1.3, RS4 ; S4 按下 , 程序去行 RS4
JNB P1.4, RS5 ; S5 按下 , 程序去行 RS5
JNB P1.5, RS6 ; S6 按下 , 程序去行 RS6
JNB P1.6, RS7 ; S7 按下 , 程序去行 RS7
JNB P1.7, RS8 ; S8 按下 , 程序去行 RS8
AJMP START ; 描按
⋯⋯⋯⋯ .
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.7,
若全为 1, 无键按下
若不全为 1, 有键按下
②在有键按下的情况下 , 进一步判断是那个键按下
使P1.0---P1.3 依次输出低电平 , 读
判断有无键按下子程序,程序名: KAP键盘问问子程序
KAP: MOV P1,#0F0H;行线输出低电平,列线输出高电平
MOV A,P1;P1口读入A
CPL A;取反
ANL A ,#0F0H;取高四位,即
RET
程序出口 : A=0,则无键按下.
A≠0 则有键按下 .
去抖动 ----------- 延时 10ms子程序 : 程序名 D10MS
D10MS: MOV R6, #14H;
DL: MOV R7,#0FFH;
DJNZ R7,$
DJNZ R6,DL
RET
KINP: LCALL KAP ; 调键盘问问子程序 ,
JNZ KP1 ; A ≠0, 有键按下
SJMP END_KINP ; A=0, 无键按下 , 退出按键查询程序
KP1: LCALL D10MS ; 延时 10MS,去抖动
LCALL KAP ; 再次盘问键盘 ,
JNZ KP2 ; A ≠0, 确认有键按下
SJMP END_KINP ; A=0, 误操作 , 重新盘问
KP2为取键值子程序
KP2:MOV R2,#0FEH; R2 为行扫描值
MOV R4, #00H ; R4 初值为第 0 行行首键号
CLR F0 ; F0=0 表示正在扫描键盘KP4: MOV P1, R2 ; 扫描行为低
MOV A, P1 ; 读 P1
JB ACC.4, L1 ; 第 0 列不为低 , 则检查第 1 列
MOV A, #00H ; 为低 , 则行首键值送入 A
AJMP KP5 ; KP5
L1: JB ACC.5, L2 ; 检查第一列
MOV A, #04H ; 第一列行首键值送入 A
AJMP KP5
L2: JB ACC.6 , L3 ; 检查第二列
MOV A, #08H ; 第二列行首键值送入 A
AJMP KP5
L3: JB ACC.7 , NEXT ; 检查第三列 , 若为 1, 则检查下一行
MOV A, #0CH ; 第三列行首键值送入 A KP5: ADD A , R4 ; A A+R4, 键值调整
PUSH A ;
KP3: LCALL D10MS ; 后沿去抖动
LCALL KAP ; 盘问按键可否释放
JNZ KP3 ; A ≠0 未释放 , 连续盘问
POP A ; 键已释放 , 弹出键值
RET
NEXT:INC R4 ; 下一列 , 行键值加 1 MOV A , R2 ; 取扫描值JNB ACC.3, END_KINP ; 判断扫描可否结束 ?
RL A ; 下一个扫描值
MOV R2, A ;
AJMP KP4 ;
END_KINP:SETB F0
RET。