4X4矩阵式键盘输入程序.docx
- 文档编号:29886269
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:36
- 大小:51.39KB
4X4矩阵式键盘输入程序.docx
《4X4矩阵式键盘输入程序.docx》由会员分享,可在线阅读,更多相关《4X4矩阵式键盘输入程序.docx(36页珍藏版)》请在冰豆网上搜索。
4X4矩阵式键盘输入程序
4*4键盘程序
readkeyboard:
begin:
acallkey_on
jnz delay
ajmpreadkeyboard
delay:
acalldelay10ms
acallkey_on
jnz key_num
ajmp begin
key_num:
acallkey_p
anla,#0FFh
jz begin
acallkey_ccode
pusha
key_off:
acallkey_on
jnz key_off
popa
ret
key_on:
mova,#00h
orla,#0fh
movp1,a
mova,p1
orla,#0f0h
cpla
ret
key_p:
movr7,#0efh
l_loop:
mova,r7
movp1,a
mova,p1
orla,#0f0h
movr6,a
cpla
jz next
ajmpkey_c
next:
mova,r7
jnbacc.7,error
rla
movr7,a
ajmpl_loop
error:
mova,#00h
ret
key_c:
movr2,#00h
movr3,#00h
mova,r6
movr5,#04h
again1:
jnbacc.0,out1
rr a
incr2
djnzr5,again1
out1:
incr2
mova,r7
movr5,#04h
again2:
jnbacc.4,out2
rra
incr3
djnzr5,again2
out2:
incr3
mova,r2
swapa
adda,r3
ret
key_ccode:
pusha
swapa
anla,#0fh
deca
rla ;行号乘4
rla
movr7,a
popa
anla,#0fh
deca
adda,r7
ret
delay10ms:
anltmod,#0f0h
orltmod,#01h
movth0,#0d8h
movtl0,#0f0h
setbtr0
wait:
jbctf0,over
ajmpwait
clrtr0
over:
ret
单片机键盘设计
(二)从电路或软件的角度应解决的问题
软件消抖:
如果按键较多,硬件消抖将无法胜任,常采用软件消抖。
通常采用软件延时的方法:
在第一次检测到有键按下时,执行一段延时10ms的子程序后,再确认电平是否仍保持闭合状态电平,如果保持闭合状态电平,则确认真正有键按下,进行相应处理工作,消除了抖动的影响。
(这种消除抖动影响的软件措施是切实可行的。
)
2.采取串键保护措施。
串键:
是指同时有一个以上的键按下,串键会引起CPU错误响应。
通常采取的策略:
单键按下有效,多键同时按下无效。
3.处理连击。
连击:
是一次按键产生多次击键的效果。
要有对按键释放的处理,为了消除连击,使得一次按键只产生一次键功能的执行(不管一次按键持续的时间多长,仅采样一个数据)。
否则的话,键功能程序的执行次数将是不可预知,由按键时间决定。
连击是可以利用的。
连击对于用计数法设计的多功能键特别有效。
三、键盘工作方式
单片及应用系统中,键盘扫描只是CPU的工作内容之一。
CPU忙于各项任务时,如何兼顾键盘的输入,取决于键盘的工作方式。
考虑仪表系统中CPU任务的份量,来确定键盘的工作方式。
键盘的工作方式选取的原则是:
既要保证能及时响应按键的操作,又不过多的占用CPU的工作时间。
键盘的工作方式有:
查询方式(编程扫描,定时扫描方式)、中断扫描方式。
四、键盘电路结构
(一)独立式按键接口设计
优点:
电路配置灵活,软件结构简单。
此键盘是用于按键较少或操作速度较高的场合。
也可以用扩展I/O口搭接独立式按键接口电路,可采用8255扩展I/O口,用三态缓冲器扩展。
这两种配接方式,都是把按键当作外部RAM某一工作单元的位来对待,通过读片外RAM的方法,识别按键的工作状态。
上电路中独立式按键电路,各按键开关均采用了上拉电阻,是为了保证在按键断开时,各I/O有确定的高电平。
如输入口线内部已有上拉电阻,则外电路的上拉电阻可省去。
(二)矩阵式键盘接口设计
矩阵式键盘适用于按键数量较多的场合,由行线和列线组成,按键位于行列的交叉点上。
节省I/O口。
矩阵键盘工作原理:
行线通过上拉电阻接到+5V上。
无按键,行线处于高电平状态,有键按下,行线电平状态将由与此行线相连的列线电平决定。
列线电平为低,则行线电平为低;列线电平为高,则行线电平为高。
五、双功能及多功能键设计
在单片机应用系统中,为简化硬件线路,缩小整个系统的规模,总希望设置最少的按键,获得最多的控制功能。
矩阵键盘与独立式按键键盘相比,硬件电路大大节省。
可通过软件的方法让一键具有多功能。
方法:
选择一个RAM工作单元,对某一个按键进行按键计数,根据不同计数值,转到子程序。
这种计数多功能键最好与显示器结合用,以便知道当前计数值,同时配合一个启动键。
复合键是使用软件实现一键多功能的另一个途径。
所谓复合键,就是两个或两个以上的键的联合,当这些键同时按下时,才能执行相应的功能程序。
实际情况做不到“同时按下”,他们的时间差别可以长到50ms,解决策略是:
定义一个或两个引导键,这些引导键按下时没什么意义,执行空操作。
引导键的例子:
微机键盘上的CTRL、SHIFT、ALT。
缺点:
一是操作变得复杂,二是操作时间变长。
多功能键的利用,应具体情况具体分析。
要求速度的场合最好做一键一功能。
如果系统功能很多,一键一功能不现实,可采取一键多功能。
六、功能开关及拨码盘接口设计
设计原因:
键盘输入灵活性大,操纵方便。
但某些重要功能或数据由键盘输入,误操作将产生一些不良后果。
因此常设定静态开关的方法来执行这些功能或输入数据。
静态开关一经设定,将不再改变,一直维持设定的开关状态。
通常这些开关状态是在单片机系统加电时由CPU读入内存RAM的,以后CPU将不再关注这些开关的状态,因此,即使加电后,这些开关的状态发生变化,也不会影响CPU的正常工作,只有在下一次加电时,这些新状态才能生效。
第一,功能开关:
主要是根据开关的状态执行一些重要的功能。
第二,拨码盘:
单片机应用系统中,有时要输入一些控制参数,这些参数一经设定,将维持不变,除非给系统断电后重新设定。
这时使用数字拨码盘既简单直观,又方便可靠。
七、按键介绍
常用的按键有三种:
机械触点式按键、导电橡胶式和柔性按键(又称触摸式键盘)。
机械触点式按键是利用弹性使键复位,手感明显,连线清晰,工艺简单,适合单件制造。
但是触点处易侵入灰尘而导致接触不良,体积相对较大。
导电橡胶按键是利用橡胶的弹性来复位,通过压制的方法把面板上所有的按键制成一块,体积小,装配方便,适合批量生产。
但是时间长了,橡胶老化而使弹力下降,同时易侵入灰尘。
柔性按键是近年来迅速发展的一种新型按键,可以分为凸球型和平面型两种。
凸球型动作幅度触感明显,富有立体感,但制造工艺相对复杂;平面型幅度微小,触感较弱,但工艺简单,寿命长。
柔性按键最大特点是防尘、防潮、耐蚀,外形美观,装嵌方便。
而且外形和面板的布局、色彩、键距可按照整机的要求来设计。
八、单片机系统键盘设计实例
键盘工作方式采用定时扫描方式。
采用定时器T0定时,CPU每隔200ms扫描键盘一次,即通过读取573的输出数据,识别按键的工作状态。
对于重键(串键:
指同时有一个以上的键按下),采用软件提供保护,当判断为一个以上的键按下,则不处理,返回重新进行监测。
只有监测到一个键按下时,才判断键值,执行相应键处理工作。
键盘对液晶显示的控制是通过显示画面的页码作为接口参数来完成的。
在每一页中,键盘对数据的修改是通过对按键次数的计算作为接口参数来实现的。
具体例程如下:
void keyscan() /*键盘扫描*/
{ucherdatanewz,temp,pat;
if(time_out)
{ACC=MJP; /*读取573数据*/
temp=ACC&0x0f, /*取低四位*/
if(temp!
=0x0f) /*有键按下*/
{msec(10); /*延时10MS*/
ACC=MJP; /*读取573数据*/
temp=ACC&0x0f
if(temp=0x0f)
{newz=temp; /*读取新键值*/
pat=newz^old; /*键值有无变化*/
if(pat)>0) /*有变化*/
{old=newz; /*原键值等于新键值*/
keymana(); /*调键散转程序*/
}
else;
}
else;
}
elsr;
old=temp; /*原键值不变*/
time_out=0 /*标志位置零*/
}
esel;
}
4*4键盘程序
;0123--P30
;4567--P31
;89AB--P32
;CDEF--P33
;P34P35P36P37
ORG0000h
LJMPMAIN
ORG0030h
MAIN:
MOVDPTR,#TAB
LCALLKEY
MOVCA,@A+DPTR
MOVP0,A
CLRP1.3
LJMPMAIN
KEY:
LCALLKS
JNZK1
LCALLDELAY2
AJMPKEY
K1:
LCALLDELAY2
LCALLKS
JNZK2
AJMPKEY
K2:
MOVR2,#0EFH
MOVR4,#00H
K3:
MOVP3,R2
L6:
JBP3.0,L1
MOVA,#00H
AJMPLK
L1:
JBP3.1,L2
MOVA,#04H
AJMPLK
L2:
JBP3.2,L3
MOVA,#08H
AJMPLK
L3:
JBP3.3,NEXT
MOVA,#0cH
LK:
ADDA,R4
PUSHACC
K4:
LCALLDELAY2
LCALLKS
JNZK4
POPACC
RET
NEXT:
INCR4
MOVA,R2
JNBACC.7,KEY
RLA
MOVR2,A
AJMPK3
KS:
MOVP3,#0FH
MOVA,P3
XRLA,#0FH
RET
DELAY2:
MOVR5,#08H
L7:
MOVR6,#0FAH
L8:
DJNZR6,L8
DJNZR5,L7
RET
TAB:
DB0C0H;0
DB0F9H;1
DB0A4H;2
DB0B0H;3
DB099H;4
DB092H;5
DB082H;6
DB0F8H;7
DB080H;8
DB090H;9
DB088H;A
DB083H;b
DB0C6H;C
DB0A1H;d
DB086H;E
DB08EH;F
END
4X4矩阵键盘扫描汇编程序
PROC KEYCHK
KEYNAME DATA 40H
;(b7-b5纪录按键状态,b4位为有效位,;b3-b0纪录按键)
KEYRTIME DATA 43H
SIGNAL DATA 50H
KEY EQU P3
KEYPL EQU P0.6
RTIME EQU 30
KEYCHK:
MOV KEY,#0FH
MOV A,KEY
CJNE A,#0FH,NEXT1
; CLR C
NEXT1:
; SETB C
MOV A,KEYNAME
ANL KEYNAME,#1FH
RRC A
ANL A,#0E0H
ORL KEYNAME,A
CJNE A,#0C0H,NEXT2
SJMP KEYSCAN
NEXT2:
CJNE A,#0E0H,NEXT3
SJMP WAIT
NEXT3:
CJNE A,#0A0H,EXIT
ORL KEYNAME,#0E0H
WAIT:
MOV A,KEYRTIME
JNZ EXIT
KEYSCAN:
MOV R1,#0
MOV R3,#11110111B
LOOP:
MOV A,R3
RL A
MOV R3,A
MOV KEY,A
MOV A,KEY
ORL A,#0F0H
CJNE A,#0FFH,NEXT31
INC R1
CJNE R1,#4,LOOP
SJMP EXIT
NEXT31:
JB ACC.0,NEXT32
MOV R2,#0
SJMP NEXT5
NEXT32:
JB ACC.1,NEXT33
MOV R2,#1
SJMP NEXT5
NEXT33:
JB ACC.2,NEXT34
MOV R2,#2
SJMP NEXT5
NEXT34:
MOV R2,#3
NEXT5:
MOV A,R1
RL A
RL A
ADD A,R2
MOV DPTR,#KEYTAB
MOVC A,@A+DPTR
ANL KEYNAME,#0E0H
ORL KEYNAME,A
MOV KEYRTIME,#RTIME
CLR KEYPL
MOV SIGNAL,#10
EXIT:
MOV KEY,#0FFH
RET
KEYTAB:
;//=按键名称表=
DB 1AH ;扫描码0,对应A
DB 1BH ;扫描码1,对应B
DB 1CH ;扫描码2,对应C
DB 1DH ;扫描码3,对应D
DB 11H ;扫描码4,对应1
DB 14H ;扫描码5,对应4
DB 17H ;扫描码6,对应7
DB 1EH ;扫描码7,对应E
DB 12H ;扫描码8,对应2
DB 15H ;扫描码9,对应5
DB 18H ;扫描码A,对应8
DB 10H ;扫描码B,对应0
DB 13H ;扫描码C,对应3
DB 16H ;扫描码D,对应6
DB 19H ;扫描码E,对应9
DB 1FH ;扫描码F,对应F
END
4×4矩阵式键盘
org0000h
ljmpstart
org0030h
start:
movdptr,#table
movr3,#4
movp2,#00h
lcallkeyscan
response:
movca,@a+dptr
movp0,a
setbp2.1
keyscan:
lcallkeypress;
jnzk1
jmpkeyscan
k1:
lcalldelay
lcallkeypress
jnzk2
jmpkeyscan
k2:
movr0,#00h
movr1,#00h
movp1,#0efh
mova,p1
anla,#0fh;
movr2,a
xrla,#0fh
jnzk3
movp1,#0dfh
movr0,#01h
mova,p1
anla,#0fh
movr2,a
xrla,#0fh
jnzk3
movp1,#0bfh;
movr0,#02h
mova,p1
anla,#0fh;
movr2,a
xrla,#0fh
jnzk3
movp1,#07fh;
movr0,#03h;
mova,p1
anla,#0fh;
movr2,a
xrla,#0fh
jnzk3
jmpkeyscan
k3:
mova,r2
rrca;
jnck4;
rrca
jnck5;
rrca
jnck6;
jnbp1.3,$
movr1,#03h
mova,r0
movb,r3
mulab
adda,r1
jmpresponse
k4:
jnbp1.0,$;
movr1,#00h
mova,r0
movb,#4
mulab
adda,r1
jmpresponse
k5:
jnbp1.1,$
movr1,#01h
mova,r0
movb,#4
mulab
adda,r1
jmpresponse
k6:
jnbp1.2,$
movr1,#02h
mova,r0
movb,#4
mulab
adda,r1
jmpresponse
keypress:
movp1,#0fh
mova,p1
xrla,#0fh
ret
delay:
movr7,#50
d1:
movr6,#248
djnzr6,$
djnzr7,d1
ret
table:
db3fh,06h,5bh,4fh;0123
66h,6dh,7dh,07h;4567
7fh,6fh,77h,7ch;89ab
39h,5eh,79h,71h;cdef
end*********
4×4矩阵式键盘
KEYNAMEDATA40H
ORG0000H
LJMPMAIN
ORG0030H
MAIN:
MOVSP,#80H
CLRF0
LOOP:
LCALLKEYCHK
LCALLKEYSCAN
SJMPLOOP
KEYCHK:
MOVP1,#0F0H
MOVA,P1
CJNEA,#0F0H,$+3
LCALLDELAY_10MS
MOVA,P1
CJNEA,#0F0H,NEXT11
CLRF0
SJMPEXIT1
NEXT11:
SETBF0
EXIT1:
RET
KEYSCAN:
JNBF0,EXIT2
MOVR7,#4
MOVR5,#0
MOVR6,#01111111B
LOOP1:
MOVA,R6
RLA
MOVR6,A
MOVP1,A
MOVA,P1
ANLA,#0F0H
XRLA,#0F0H
JNZNEXT21
INCR5
DJNZR7,LOOP1
SJMPEXIT2
NEXT21:
JNBAcc.4,NEXT22
MOVR4,#0
SJMPNEXT25
NEXT22:
JNBAcc.5,NEXT23
MOVR4,#1
SJMPNEXT25
NEXT23:
JNBAcc.6,NEXT24
MOVR4,#2
SJMPNEXT25
NEXT24:
MOVR4,#3
NEXT25:
MOVA,R5
RLA
RLA
ADDA,R4
MOVDPTR,#KEYTAB
MOVCA,@A+DPTR
MOVKEYNAME,A
EXIT2:
RET
DELAY_10MS:
SETBRS1
SETBRS0
MOVR2,#20
DELAY0:
MOVR3,#250
DJNZR3,$
DJNZR2,DELAY0
RET
KEYTAB:
DB0,1,2,3,4,5,6,
7,8,9,10,11,
12,13,14,15
END
4X4键盘输入数码管移位显示1
#include
#include
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- X4 矩阵 键盘输入 程序