独立按键控制灯显示二进制数(51单片机)

大家好,本次实现独立按键控制灯显示二进制数,按一次,显示二进制1,按两次,显示二进制2,按第三次,显示二进制3…如此循环,先给出大家代码,在作出相应的解释。

#include
sbit key1=P3^1;
sbit led1=P2^0;
typedef unsigned char u8;
void Delay(xms)  //延时函数
{
	unsigned char i, j;
	while(xms--)
	{
		i = 12;
	  j = 169;
	do
	{
		while (--j);
	} while (--i);
  }
}
void main()
{
   while(1)
	 {
			if(key1==0)
			{
				 Delay(20); //消抖处理
				 while(key1==0); //松开键跳出循环
				 Delay(20);
				 P2--;
			}
	 }
}

首先,通过开发板原理图和独立开关原理知,按下开关,变为低电平;松开开关,则变为高电平。不过,这里有一个需要注意的问题,就是按下,松开开关的瞬间,开关的内部管脚会发生抖动,这就可能使灯亮两三次,外加单片机执行速度很快,这就要求我们进行消抖处理:通过延时函数进行消抖,就是让它延时一会儿在执行下面的程序,从而解决抖动带来的问题。

根据原理图,将对应的I/O口进行位定义,即

sbit key1=P3^1;
sbit led1=P2^0;

延时函数 模块代码如下:

void Delay(xms)  //延时函数
{
	unsigned char i, j;
	while(xms--)
	{
		i = 12;
	  j = 169;
	do
	{
		while (--j);
	} while (--i);
  }
}

主函数部分:判断开关键是否按下,如果开关键按下,先进行消抖处理,确保确实是开关键按下带来的结果,接着判断是否松开开关,用一个while循环,按下时即key1==0,一直循环空语句,直到不符合循环条件:松开开关即key1==1时跳出循环,实现下面语句,此时在松开时仍需消抖处理,然后核心就是显示二进制数了,在单片机板通上电时,8个led灯默认高电平,用二进制表示就是11111111,因此要使灯亮,则需给它一个低电平,当11111111-1刚好是11111110,第一个灯点亮,表示二进制数1,下面同理。STC89C52RC芯片的P2这组端口控制着led灯,因此只需P2--即可。从而实现独立按键控制灯显示二进制数。

以上就是我对这块的认识和解释啦,如有错误的地方,请大家指正,若有没有解释清楚的地方,也欢迎提问或者私信,我也想跟大家一起讨论一起学习一起进步~~加油!

你可能感兴趣的:(51单片机,蓝桥杯,单片机)