1、按键是单片机应用系统中经常用到的一种输入设备。单片机通过检测按键是否被按下来进行不同的控制。按键有很多种,常用的是独立按键和键盘
2、常用的独立按键也有很多种,最常见的是基于机械开关原理的有触点的按键。
3、我们利用proteus来实际模拟仿真一下按键的按下与松开过程。在proteus中绘制如下图所示的电路图。
4、在keil c51中新建工程ex40,输入如下程序代码,编译并生成ex40.hex文件
//实例40,按键判断实例,无按键消除抖动处理
#include <reg51.h> // 包含头文件
sbit KEY = P1^0; //定义按键对应的端口位
sbit LED = P3^0; // 定义LED对应的端口位 void main(void)
{ if(KEY == 0) //判断按键是否按下 { LED = !LED; //如果按键按下,LED的状态翻转一次 } } 5、将ex40.hex载入at89c51中,启动仿真,观察运行结果,可以发现程序运行结果并不是预期的按键每按下一次,LED的亮灭状态翻转一次。
下面我们通过实例演示如何实现简单的消除按键抖动
6、在keil c51中新建工程ex40_1,输入如下程序代码,编译并生成ex40.hex_1文件
//实例40_1,按键判断实例,用延时的方法消除按键消除抖动处理
#include <reg51.h> // 包含头文件
sbit KEY = P1^0; //定义按键对应的端口位
sbit LED = P3^0; // 定义LED对应的端口位 void delay(void)
{ unsigned char i,j; for(i = 0;i < 200;i++) for(j = 0;j < 200;j++); } void main(void)
{ if(KEY == 0) //判断按键是否按下 { delay(); //延时一会,等待按键状态稳定 if(KEY == 0) //再次判断按键是否按下 { LED = !LED; //如果按键按下,LED的状态翻转一次 } } } 7、将ex40_1.hex载入at89c51中,启动仿真,观察运行结果,可以发现程序运行结果符合预期:按键每按下一次,LED的亮灭状态翻转一次。
想一想,这是为什么? |
|
来自: lixinhecom > 《按键处理》