当前位置:文档之家› 第10章行列式(矩阵式)键盘接口

第10章行列式(矩阵式)键盘接口


AJMP
LKP
LTW0:JB MOV AJMP LTHR:JB MOV LKP: ADD PUSH LK3: ACALL
A.2,LTHR A,#10H LKP Acc.3,NEXT A,#18H A,R4 A DIR
;2行线为高,无键闭合,跳LTHR, ;转判3行 ;2行有键闭合,首键号10H→A ;跳LKP,计算键号 ;3行线为高,无键 ;闭合,跳NEXT,准备下一列扫描 ;3行有键闭合,首键号18H→A ;计算键号:首键号+列号=键号 ;键号进栈保护 ;调用显示子程序,延时6ms ;调用判有无键闭合子程序,延时 ;6ms ;判键释放否,未释放,则循环 ;键已释放,键号出栈→A
ACALL KS1 JNZ POP RET LK3 A
NEXT:INC
R4
;列计数器加1,为下一列扫描作准备
MOV JNB
RL MOV AJMP KND: AJMP KS1: MOV “0”→ MOV MOVX
A,R2 ;判是否已扫到最后一列(最右一列) Acc.7,KND ;键扫描已扫到最后一列,跳KND,
(2)按键的识别方法
a. 扫描法 图10-10(b)中3号键被按下为例,来说明此键 时如何被识别出来的。
识别键盘有无键被按下的方法,分两步进行: 第1步:识别键盘有无键按下; 第2步:如有键被按下,识别出具体的按键。 把所有列线置0,检查各行线电平是否有变化,如 有变化,说明有键按下,如无变化,则无键按下。 上述方法称为扫描法,即先把某一列置低电平, 其余各列为高电平,检查各行线电平的变化,如果某 行线电平为低,可确定此行列交叉点处的按键被按 下。 b. 线反转法
原则:即要保证能及时响应按键操作,又不要过多占 用CPU的工作时间。 通常,键盘工作方式有3种,即编程扫描、定时扫 描和中断扫描。 1. 编程扫描方式 只有当单片机空闲时,才调用键盘扫描子程序, 扫描键盘。 工作过程:
(1)在键盘扫描子程序中,先判断有无键按下。
方法:PA口8位输出全0,读PC口低4位状态,若PC0~ PC3为全1,则说明键盘无键按下;若不全为1,则说明 键盘可能有键按下。
键盘子程序如下:
KEYI:ACALL JNZ NI: ACALL AJMP LK1: ACALL ACALL ACALL JNZ ACALL AJMP KS1 LK1 DIR KEYI DIR DIR KS1 LK2 DIR KEYI ;调用判有无键闭合子程序 ;有键闭合,跳LK1 ;无键闭合,调用显示子程序,延 ;迟6ms后,跳KEYI ;可能有键闭合,延迟12ms,软件去抖 ;调用判有无键闭合子程序 ;经去抖,判键确实闭合,跳LK2处理 ;调用显示子程序延迟6ms ;抖动引起,跳KEYI
31H,6EH,1CH,23H,40H,03H 18H,00H ;延时1ms子程序
MOV R7,#02H MOV R6,#0FFH DJNZ R6,DL6 DJNZ R7,DL RET
2.键盘程序设计
(1)判别键盘上有无键闭合 (2)去除键的机械抖动 (3)判别闭合键的键号 (4)使CPU对键的一次闭合仅作一次处理 键盘程序的流程如图10-16。
A ;重新进行整个键盘扫描 ;键扫描未扫到最后一列,,位选码左移 ;一位 R2,A ;位选码→R2 LK4 ; KEYI ; DPTR ,#7F01H;判有无键闭合子程序,全 A,#00H @DPTR,A ;扫描口(PA口) ;即列线全为低电平 ;
INC
DPTR
;DPTR增2,指向PC口
INC MOVX CPL ANL RET
8031外扩一片8155H。RAM地址为7E00H~7EFFH。 I/O口地址为7F00H~7F05H。 PA口为输出口,控制键盘列线的扫描,同时又是6 位共阴极显示器的位扫描口。 PB口作为显示器段码输出口,PC口作为键盘的行 线状态的输入口。
75452:反相驱动器,7407:同相驱动器。
1.动态显示程序设计 8031内部RAM设置6个显示缓冲单元79H~7EH,存 放要显示的6位数据。 8155H的PB口输出相应位的段码,依次的改变PA口 输出为高的位使某一位显示某一字符,其它位为暗。 动态地显示出由缓冲区中显示数据所确定的字符。 程序流程如图10-15 。
74LS164(0)~74LS164(7):作为8位LED的段码输出,
8031的P3.4、P3.5:两行键的行状态输入 P3.3(TXD):同步移位脉冲输出控制线,
优点:亮度大,容易做到显示不闪烁,且CPU不必 频繁的为显示服务,从而使单片机有更多的时间处理 其它事务。 显示子程序:
DIR: SETB P3.3 MOV R7,#08H ;P3.3=1允许TXD脚同步移位 ;脉冲输出 ;送出的段码个数,R7为段 ;码个数计数器
; 右边的下一位LED亮位选码
MOV R3,A AJMP LD0 ;送R3中保存 ;
LD1: RET ; DSEG: DB 3FH,06H,5BH,4FH,66H,6DH ;共阴极段码表 DB DB 7DH,07H,7FH,6FH,77H,7CH 39H,5EH,7L: DL6:
KL0: JNB TI,KL0 CLR TI KL1: JNB JB P3.4,PK1 P3.5,KL1
PK1: ACALL DL10
JNB
P3.4,PK2
;判是否抖动引起的?
JB PK2: MOV MOV
P3.5,KL1 R7,#08H R6,#0FEH
;不是抖动引起的 ;判别是哪一个键按下,FEH为最 ;左一列为低 ;R3为列号寄存器 ; ;列扫描码从串行口输出 ;等待串行口发送完 ;串行口发送完毕,清TI标志 ;读第1行线状态,第1行有键闭 ;合,跳PKONE处理 ;读第2行状态,是第2行某键否? ;第2行键中有键被按下,行首键 ;号08H送R4 ;
DPTR A,@DPTR A A,#0FH
;指针增1,指向PC口 ;从PC口读行线的状态 ;行线取反,如无键按下,则A为0; ;屏蔽无用的高4位
10.3.2 利用8031的串行口实现键盘/显示器接口 串行口未作它用,可用来外扩键盘/显示器。 串行口为方式0输出,串行口外接移位寄存器74LS164。 接口电路如图10-17。
LK2: MOV MOV
R2,#0FEH ;列选码→R2 R4,#00H ;R4为列号计数器
LK4: MOV
DPTR,#7F01H ;列选码→8155H的PA口
MOV MOVX INC INC MOVX JB
MOV AJMP
A,R2 @DPTR,A DPTR DPTR A,@DPTR Acc.0,LONE
(2)用软件来消除按键抖动的影响。如有键按下,则 进行下一步。 (3)求按下键的键号。
(4)等待按键释放后,再进行按键功能的处理操作。
2. 定时扫描工作方式
利用单片机内的定时器,产生10ms的定时中断,对 键盘进行扫描。
3.中断工作方式 只有在键盘有键按下时,才执行键盘扫描程序,如 无键按下,单片机将不理睬键盘。
MOV MOV KL5: MOV KL2: JNB CLR JNB
R3,#00H A,R6 SBUF,A TI,KL2 TI P3.4,PKONE
JB P3.5,NEXT MOV R4,#08H AJMP PK3
PKONE:MOV R4,#00H ;第1行有键按下,行首键号00H送R4 PK3: MOV SBUF,#00H ;等待键释放,发送00H使所有列 ;线为低 KL3: JNB TI,KL3 ;
TI,DL1 TI R0 R7,DL0 P3.3
;输出段码,查询TI状态,1个字节 ;的段码输出完否? ;1个字节的段码输出完,清TI标志 ;指向下一个显示数据单元 ;段码个数计数器R7是否为0, 如不 ; 为0,继续送段码 ;8个段码输出完毕,关显示器输出 ;返回 ;共阳极段码表,
0C0H,0F9H,0A4H,0B0H,99H 92H,82H,0F8H,90H 88H,83H,0C6H,0A1H,86H
MOVC
A,@A+PC
;根据显示数据来查表取段码
DIR1:
MOVX @DPTR,A ACALL DL1ms INC R0 MOV A,R3 JB Acc.5,LD1 RL A
;段码→8155HPB口 ;该位显示1ms ;指针指向下一个数据单元 ;位选码送入A中 ;判断是否扫描到最右边的 ; LED,如到最右边则返回 ;位选码向左移一位,准备让
A,#00H LKP
; ; ;数据指针增2,指向PC口 ; ;读8155H PC口 ;0行线为高,无键闭合,跳 LONE,转判1行
;0行有键闭合,首键号0→A ;跳LKP,计算键号
LONE:JB
MOV
Acc.1,LTW0
A,#08H
;1行线为高,无键闭合,跳LTW0, ;转判2行
;1行有键闭合,首键号8→A
DB
8FH,0BFH,8CH,0FFH,0FFH
;0,1,2,3,4 ;5,6,7,8,9 ;A,B,C,D,E ;F,-,P,暗
键盘扫描子程序: KEYI:MOV MOV A,#00H SBUF,A ;判有无键按下,使所有列线为0 ;的编码送A ;扫描键盘的(8)号74LS164输 ;出为00H,使所有列线为0 ;串行输出完否? ;串行输出完毕,清TI ;第1行有闭合键吗?如有,跳 ;PK1进行处理 ;在第2行键中有闭合键吗?无闭 ;合键跳KL1 ;调用延时10ms子程序DL10,软 ;件消除抖动
键盘所做的工作分为三个层次,如图10-13。
第1层:单片机如何来监视键盘的输入。三种工作方 式:①编程扫描②定时扫描③中断扫描。
第2层:确定具体按键的键号。体现在按键的识别方 法上就是:①扫描法;②线反转法。 第3层:执行键处理程序。 10.3 键盘/显示器接口设计实例 一般把键盘和显示器放在一起考虑。 10.3.1 利用并行I/O芯片实现键盘/显示器接口 图10-14:8031用扩展I/O接口芯片8155H实现的 6位LED显示和32键的键盘/显示器接口电路。图中的 8155H也可用8255A来替代。
相关主题