单片机在日常生活中用途广泛,除了可以输出外控制外部设备外,还可以检测用户实时发出的指令;这就是人机交互,要实现人机交互,需要给单片机安上输入设备,这里指定就是人们能够输入的键盘,就像个人电脑一样,给电脑输入文字、命令等。单片机的键盘可分为编码键盘和非编码键盘,这里主要分享非编码键盘的检测,以单按键检测为例。
/****************
此程序需要按键一直按下不松手,灯才会亮
松手灯就熄灭
*/
ORG 0000H
LOOP:SETB P3.2 ;p3.2为输入引脚
JNB P3.2,LD ;P3.2按下执行灯亮
SETB P0.0 ;否则灯灭
SJMP LOOP
LD:CLR P0.0
AJMP LOOP
END
第一个例子可以看出,要让灯亮必须一直按住按钮,这可要把人累坏。能不能按一次,灯的状态就变化一次,模拟我们日常开关灯,答案是肯定的。
/****************
此程序用一个按键模拟开灯和关灯、
按下一次按键,灯的状态取反一次
实现单按键控制开关灯,
程序有一个问题,有时按一次按键,灯的状态
并不改变,这是什么原因呢?原来机械按键有抖动
我们按一次按键,单片机扫描速度很快,它认为按下了
多次,进行逻辑判断后,确定灯的状态,可能发生很多次
翻转,造成输出不是预定的效果,这就是机械抖动。
*/
ORG 0000H
LOOP:SETB P3.2 ;设为输入口
JB P3.2,LOOP ;等待按键按下
CPL F0 ;按下一次取反一次
JB F0,liang
SETB p0.0 ;F0为0,灯灭
SJMP LOOP
l