51单片机——一个独立按键控制LED的闪烁和熄灭

时间:2025-03-07 14:49:48

目录

一、要求

二、实现

三、总结

消除按键的机械抖动


一、要求

        当按下按键,LED灯闪烁,再按下,LED熄灭。。。。循环操作。

二、实现

        编译环境:keil4

        单片机:STC89c516RD

#include <>
#include<>
void Delay(int x)		//@11.0592MHz
{
	unsigned char i, j;
	 while(x--)
	 {
	_nop_();
	_nop_();
	_nop_();
	i = 11;
	j = 190;
	do
	{
		while (--j);
	} while (--i);
	}
}
void flash()
{	
		P2_0=0;
		Delay(50);
		P2_0=1;
		Delay(50);
}
int main()
{
	int count=0;
	while(1)
	{
		if(P3_1==0)	  		//第一次按下:闪烁  第二次按下:灭  
		{					//第三次按下:闪烁  第四次按下:灭 .....
			Delay(20);//消抖
			while(P3_1==0);//按下未松开
			Delay(20);//消抖
							
			count++;//判断按下的次数
		}
		if(count%2!=0)//为奇数闪烁
			flash();
		else          //为偶数熄灭
			P2_0=1;
	}
	return 0;
}

三、总结

消除按键的机械抖动

        按键的机械抖动会影响单片机对按键按下次数的判断。消除抖动的方法有硬件和软件两种方法。硬件方法常用RS触发器电路。软件方法是当检测出键闭合后执行一个10ms~20ms的延时程序,再一次检测键的状态,如仍保持闭合状态,则确认真正有键按下。