欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > 03:对LED的一些操作

03:对LED的一些操作

2025/9/14 9:33:24 来源:https://blog.csdn.net/qq_51284092/article/details/140273142  浏览:    关键词:03:对LED的一些操作

对LED的一些操作

  • 1、LED1闪烁
  • 2、按键控制LED1
  • 3、按键消抖
  • 4、按键控制灯的2种状态
  • 5、2个按键控制LED

1、LED1闪烁

   要让LED灯闪烁,则要使灯呈现出亮灭,亮灭状态。亮到灭这段时间我们通过延迟函数来占用单片机的执行。

在这里插入图片描述

#include <REGX52.H>sbit LED1 = P3^7;void Delay500ms()		//500ms的延迟函数,由STC软件自动生成
{unsigned char i, j, k;i = 4;j = 129;k = 119;do{do{while (--k);} while (--j);} while (--i);
}void main(void)
{while(1){LED1 = 0;Delay500ms();LED1 = 1;Delay500ms();}	
}

2、按键控制LED1

   按下SW1按键,LED1亮,松开SW1按键,LED1灭。

在这里插入图片描述

由图可知,SW1连接的IO口为P2.1,SW2连接的IO口为P2.0。
由按键电路原理图可得,当按键SW1松开时,IO口输入为高电平;当SW1按键按下时,IO口输入为低电平。

#include <REGX52.H>sbit LED1 = P3^7;
sbit KEY1 = P2^1;void main(void)
{while(1){if(KEY1 == 1)//SW1松开状态LED1 = 1; //灯灭elseLED1 = 0; //灯亮}
}

3、按键消抖

   按键抖动:不确定P2.1IO口变化是按键按下造成的,还是其他原因引起的。所以需要按键消抖,这里使用软件消抖。
代码①:

#include <REGX52.H>void Delay50ms()		//@11.0592MHz
{unsigned char i, j;i = 90;j = 163;do{while (--j);} while (--i);
}sbit LED1 = P3^7;
sbit KEY1 = P2^1;void main(void)
{while(1){if(KEY1 == 1)//SW1松开状态{Delay50ms();//延迟150msif(KEY1 == 1)LED1 = 1; //灯灭}else{if(KEY1 == 0){Delay50ms();//消除抖动LED1 = 0; //灯亮}}}}

4、按键控制灯的2种状态

   SW1按下灯亮,在按一下灯灭。

#include <REGX52.H>void Delay50ms()		//@11.0592MHz
{unsigned char i, j;i = 90;j = 163;do{while (--j);} while (--i);
}sbit LED1 = P3^7;
sbit KEY1 = P2^1;void main(void)
{LED1 = 1;//上电让灯灭while(1){if(KEY1 == 1)//SW1松开{Delay50ms();//延迟50ms,按键消抖if(KEY1 == 0){Delay50ms();//延迟50ms,按键消抖LED1 = !LED1; //灯的状态翻转}}}	
}

5、2个按键控制LED

   SW1控制灯亮,SW2控制灯灭。

#include <REGX52.H>#define ON_STATUS 1//通过define定义2个状态
#define OFF_STATUS 0void Delay50ms()		//延迟函数
{unsigned char i, j;i = 90;j = 163;do{while (--j);} while (--i);
}sbit LED1 = P3^7;
sbit KEY1 = P2^1;
sbit KEY2 = P2^0;void main(void)
{int LED1Mark = OFF_STATUS;//定义一个标志位,先让它关闭while(1){if(KEY1 == 0)//SW1被按下{Delay50ms();if(KEY1 == 0)LED1Mark = ON_STATUS;	//标志位打开}if(KEY2 == 0)//SW2被按下{Delay50ms();if(KEY2 == 0)LED1Mark = OFF_STATUS;	//标志位关闭	}if(LED1Mark == ON_STATUS){LED1 = 0;//灯打开}else{LED1 = 1;//灯关闭}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词