4X4矩阵式键盘输入程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4*4键盘程序readkeyboard:
begin: acall key_on
jnz delay
ajmp readkeyboard
delay:acall delay10ms
acall key_on
jnz key_num
ajmp begin
key_num:acall key_p
anl a,#0FFh
jz begin
acall key_ccode
push a
key_off:acall key_on
jnz key_off
pop a
ret
key_on: mov a,#00h
orl a,#0fh
mov p1,a
mov a,p1
orl a,#0f0h
cpl a
ret
key_p: mov r7,#0efh
l_loop:mov a,r7
mov p1,a
mov a,p1
orl a,#0f0h
mov r6,a
cpl a
jz next
ajmp key_c
next: mov a,r7
jnb acc.7,error
rl a
mov r7,a
ajmp l_loop
error:mov a,#00h
ret
key_c:mov r2,#00h
mov r3,#00h
mov a,r6
mov r5,#04h
again1:jnb acc.0,out1
rr a
inc r2
djnz r5, again1
out1: inc r2
mov a,r7
mov r5,#04h
again2:jnb acc.4,out2
rr a
inc r3
djnz r5,again2
out2: inc r3
mov a, r2
swap a
add a,r3
ret
key_ccode:push a
swap a
anl a,#0fh
dec a
rl a ;行号乘4
rl a
mov r7,a
pop a
anl a,#0fh
dec a
add a,r7
ret
delay10ms:
anl tmod,#0f0h
orl tmod,#01h
mov th0,#0d8h
mov tl0,#0f0h
setb tr0
wait:jbc tf0,over
ajmp wait
clr tr0
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的正常工作,只有在下一次加电时,这些新状态才能生效。
第一,功能开关:主要是根据开关的状态执行一些重要的功能。
第二,拨码盘:单片机应用系统中,有时要输入一些控制参数,这些参数一经设定,将维持不变,除非给系统断电后重新设定。这时使用数字拨码盘既简单直观,又方便可靠。
七、按键介绍
常用的按键有三种:机械触点式按键、导电橡胶式和柔性按键(又称触摸式键盘)。