1、键盘与单片机的连接
《键盘连接》
图3
《单片机与键盘接口图》
图4
2、通过1/0口连接。将每个按钮的一端接到单片机的i/o口,另一端接地,这是最简单的办法,如图3所示是实验板上按钮的接法,四个按钮分别接到p3.2 、p3.3、p3.4和p3.5。对于这种键各程序能采用持续查询的办法,功能就是:检测是否有键闭合,如有键闭合,则去除键抖动,判断键号并转入对应的键处理。下面给出一个例程。其功能很简单,四个键定义如下:
p3.2:开始,按此键则灯开始流动(由上而下)
p3.3:停止,按此键则停止流动,所有灯为暗
p3.4:上,按此键则灯由上向下流动
p3.5:下,按此键则灯由下向上流动
updown equ 00h ;上下行标志
startend equ 01h ;起动及停止标志
lampcode equ 21h ;存放流动的数据代码
以下程序功能很简单,但它演示了一个单片机键盘处理程序的基本思路,程序本身很简单,也不很实用,实际工作中还会有好多要考虑的因素,比如主循环每次都调用灯的循环程序,会造成按钮反应“迟钝”,而如果一直按着键不放,则灯不会再流动,一直要到松开手为止,等等,大家能仔细考虑一下这些问题,再想想有什么好的解决办法。
org 0000h
ajmp main
org 30h
main:
mov sp,#5fh
mov p1,#0ffh
clr updown ;启动时处于向上的状态
clr startend ;启动时处于停止状态
mov lampcode,#0feh ;单灯流动的代码
loop:
acall key ;调用键盘程序
jnb f0,lnext ;如果无键按下,则继续
acall keyproc ;不然调用键盘处理程序
lnext:
acall lamp ;调用灯显示程序
ajmp loop ;反复循环,主程序到此结束
delay:
mov r7,#100
d1: mov r6,#100
djnz r6,$
djnz r7,d1
ret
;----------------------------------------延时程序,键盘处理中调用
keyproc:
mov a,b ;从b寄存器中获取键值
jb acc.2,keystart ;分析键的代码,某位被按下,则该位为1(因为在键盘程序中已取反)
jb acc.3,keyover
jb acc.4,keyup
jb acc.5,keydown
ajmp key_ret
keystart:
setb startend ;第一个键按下后的处理
ajmp key_ret
keyover:
clr startend ;第二个键按下后的处理
ajmp key_ret
keyup: setb updown ;第三个键按下后的处理
ajmp key_ret
keydown:
clr updown ;第四个键按下后的处理
key_ret:ret
key:
clr f0 ;清f0,表示无键按下。
orl p3,#00111100b ;将p3口的接有键的四位置1
mov a,p3 ;取p3的值
orl a,#11000011b ;将其余4位置1
cpl a ;取反
jz k_ret ;如果为0则一定无键按下
acall delay ;不然延时去键抖
orl p3,#00111100b
mov a,p3
orl a,#11000011b
cpl a
jz k_ret
mov b,a ;确实有键按下,将键值存入b中
setb f0 ;设置有键按下的标志
k_ret:
orl p3,#00111100b ;此处循环等待键的释放
mov a,p3
orl a,#11000011b
cpl a
jz k_ret1 ;直到读取的数据取反后为0说明键释放了,才从键盘处理程序中返回
ajmp k_ret
k_ret1:
ret
d500ms: ;流水灯的延迟时间
push psw
setb rs0
mov r7,#200
d51: mov r6,#250
d52: nop
nop
nop
nop
djnz r6,d52
djnz r7,d51
pop psw
ret
lamp:
jb startend,lampstart ;如果startend=1,则启动
mov p1,#0ffh
ajmp lampret ;不然关闭所有显示,返回
lampstart:
jb updown,lampup ;如果updown=1,则向上流动
mov a,lampcode
rl a ;实际就是左移位而已
mov lampcode,a
mov p1,a
lcall d500ms
ajmp lampret
lampup:
mov a,lampcode
rr a ;向下流动实际就是右移
mov lampcode,a
mov p1,a
lcall d500ms
lampret:
ret
end
以上程序功能很简单,但它演示了一个单片机键盘处理程序的基本思路,程序本身很简单,也不很实用,实际工作中还会有好多要考虑的因素,比如主循环每次都调用灯的循环程序,会造成按钮反应“迟钝”,而如果一直按着键不放,则灯不会再流动,一直要到松开手为止,等等,大家能仔细考虑一下这些问题,再想想有什么好的解决办法。
医学传感器技术把握了现代健康设备的脉动
迷你音响放大器电路
验证码太麻烦,自动跳过验证码神器试一试
英特尔Meteor Lake处理器或将采用台积电3nm工艺
开沃汽车西安智能制造基地项目开工 总投资100亿元
单片机键盘处理程序的基本设计方法解析
如何理解“家居5G时代”?
三星GalaxyS8/S8+虹膜识别技术、IP68级防尘防水,给人们带来一种更加优化、未来科技感的生活方式
借助语音控制技术,智能家居系统将会变得更加智能
苹果曝光iPhone8E设计
数字孪生智慧电网Web3D运维系统
四招加强Windows 2003/XP安全性
颠覆传统方式 云计算来袭
中药材真菌毒素检测仪怎么样,其测量结果准确吗
塔式风扇的离线语音控制升级之路
中芯国际与华为、imec、Qualcomm共同投资新技术研发公司
比亚迪新能源车特点
具有弯曲宏观裂纹的多功能水凝胶传感器
虹科小课堂|密度测量,你了解多少?
DSP100问