前言
大家好吖,欢迎来到 YY 滴单片机系列 ,热烈欢迎! 本章主要内容面向接触过单片机的老铁
三.【控制LED状态】
1.按键抖动问题
- 我们发现中间存在:
- 2个抖动时间段(按下时)(松开时)
- 1个中间时间段
- 我们要采用【时间延迟】的原理规避这一现象
2.我们要采用【时间延迟】的原理规避这一现象
- 自定义延时子程序传送门:传送门
- 我们在第一个抖动时间段(按下时)设置一个延时程序
- 在中间时间段时,设置一个判断按键状态的while循环
while(P3_1==0);
,使他实现【到达中间时间段,停下等待按钮状态:实现按下进入循环,松手跳出循环继续程序】 - 我们在第二个抖动时间段(松手时)设置一个延时程序
#include <REGX52.H> void Delay(unsigned int xms) { unsigned char i, j; while(xms) { i = 2; j = 239; do { while (--j); } while (--i); xms--; } } void main() { while(1) { if(P3_1==0)//按下 { Delay(20);//在前一段抖动时间延时 while(P3_1==0);//到达中间时间段,停下等待按钮状态:实现按下进入循环,松手跳出循环继续程序 Delay(20);//在后一段抖动时间延时 P2_0=~P2_0;//取反 } } }
- 现象:我们烧写入单片机后,可以发现按下k1按键,d1灯亮并保持;再次按下,d1灯灭并保持;