- 2
- 0
- 约5.43千字
- 约 34页
- 2022-11-02 发布于上海
- 举报
会计学;;; 综上所述,对于非编码键盘,按键处理程序应具有如下四个功能:
(1) 判断键盘上有无键按下。
(2) 去除键的机械抖动。
(3) 求按下键的键码。
(4) 闭合一次,只进行一次键功能操作。
8.1.2 单片机对非编码键盘的控制方式
1. 查询方式
这种方式是指在单片机完成其它工作后的空余时间,调用键盘扫描子程序,来响应键盘输入的要求,在执行键功能程序时,CPU不再响应键输入要求。
; [例8.1] 用查询法按图8-1读取行列键盘键码,并将键码存入???部RAM 32H单元。
图中P1.4~P1.7用于控制行线,P1.0~P1.3用于控制列线。行、列线通过上拉电阻接+5 V,没有键按下时,被钳在高电平状态。通过发送扫描字确定键码,具体方法如下:
(1) 由列线输出0,然后读入P1口的值存入内部RAM 30H单元。
; (2) 由行线输出0,然后读入P1口的值存入内部RAM 31H单元。
(3) 把30H的低4位与31H的高4位的值相加存入累加器A。
(4) 最后判断累加器A的值,如果累加器A的数据全为1,说明无键按下,否则说明有键按下,且累加器A的数据就是被按下键的键值(程序中对累加器A取反,目的是用JNZ指令判断是否有键按下)。如图中圆圈所指键的键值。;键扫描程序如下:
BOAD:LCALL BOADD
JNZ BOAD1 ;无键按下转BOAD
LCALL DELAY ;调延时子程序
AJMP BOAD ;继续扫描键盘
BOAD1:LCALL DELAY ;消除键抖动(延时子程序略)
LCALL BOADD ;确认是否有键按下
JNZ BOAD2
LCALL DELAY
SJMP BOAD ;转键扫描
;BOAD2: CPL A
MOV 32H,A ;取键值
BOAD3: LCALL DELAY
LCALL BOADD
JNZ BOAD3 ;等待键松开
B2: RET ;返回
?
;获取键值子程序
;BOADD: MOV P1,#0FH ;置行线为0
MOV A,P1
MOV 30H,A
MOV P1,#0F0H ;置列线为0
MOV A,P1
MOV 31H,A
ANL 30H,#0FH ;取列值
; MOV A,30H
ANL 31H,#0F0H ;取行值
ADD A,31H ;行值加列值
CPL A ;A全0无键按下
RET
; 2. 定时扫描工作方式
定时扫描工作方式是利用单片机内部定时器产生定时中断,CPU响应中断后对键盘进行扫描,当有键按下时,转入键功能的处理程序。
定时扫描在本质上是中断方式,只不过是定时扫描键盘,以中断的方式处理键盘,它的硬件电路与编程扫描工作方式相同。
3. 中断工作方式
单片机应用系统工作时,并不经常需要键输入。因此,无论是编程工作方式或是定时工作方式,CPU经常处于空扫描状态。
图8-3是AT89C51利用中断扫描方式实现的一个2×8矩阵式键盘的硬件接口电路。
;; 通过前面的原理分析可知,完成键盘管理的程序主要有主程序和中断服务程序,主程序主要完成初始化和键值
原创力文档

文档评论(0)