51单片机独立按键控制LED灯,按键按一次亮,再按一次灭

1、功能描述

独立按键控制LED灯,按键按一次亮,再按一次灭

2、实验原理

轻触按键:相当于是一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动米实现接通和断开;

独立按键原理图如下:

其在MCU上的位置如下所示:

由上面两张图可以知道,独立按键是接在MCU的P3.0口到P3.3口的;可以看到,独立按键的右端是接地的;这里需要注意,独立按键的一端接地,独立按键就是一个开关;以K1为例,K1右端是GND,左端是RXD,我们知道,单片机在刚上电时,所有i/o口默认都是高电平的;所以当K1按键没有按下时,RXD是高电平,但当K1按键按下时,电路进行了连通,RXD接通了GND,所以RXD此时变成了低电平。在寄存器中写入一个值,该值就会同步到对应的i/o口上;其实反之也成立,即通过寄存器可以读到i/o口的状态,是高电平还是低电平。所以当按键没有按下时,寄存器读到的该i/o的状态就是高电平(即1)﹔反之,当按键按下时,寄存器就可以读到该i/o口的状态为低电平(即O)﹔我们则可以通过寄存器读到的i/o口的状态是高电平还是低电平,就知道按键是按下还是松开了。

3、编程思路

在main函数中,进入一个无限循环while(1),程序将一直在这个循环中执行。

在循环中,通过检查P31引脚是否为低电平来判断是否有按键按下。如果P31为低电平,说明有按键按下;当检测到按键按下时,首先进行一个短暂的延时,然后再次检查P3_1引脚的状态,以避免按键的抖动影响,然后,将P2_0引脚的状态取反,以实现LED的闪烁效果。

4、代码

cpp 复制代码
#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;}
}
}
相关推荐
码客-ygluu6 小时前
X3 LUA 异步分布式微服务集群框架
c++·架构·lua
九英里路9 小时前
protobuf快速上手
网络·c++·中间件·json·谷歌·序列化·protobuf
纪念 2299 小时前
C++ 算法基础 (差分)
开发语言·c++·算法
ShineWinsu14 小时前
对于Qt:QTreeWidget常见属性以及QTreeWidgetItem类的解析
开发语言·c++·qt·gui·客户端·多叉树·qtreewidget
落羽的落羽15 小时前
【C++】C++17的主要特性
linux·服务器·开发语言·c++·算法·机器学习
汉克老师20 小时前
《从C++小白到算法高手:GESP 1—8级成长地图》第一讲:认识GESP——从编程新手到算法探索者
c++·gesp·信息学竞赛·小学生学c++
晴天的雨.99221 小时前
【C++】继承篇
java·开发语言·c++
青少儿编程课堂1 天前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会图形化考级:校园大富翁经营闯关解析
c++·python·算法·bfs·信息学竞赛
another heaven1 天前
【C/C++ 第一次跨越(上):用 C++11/14 停止制造新的旧代码】
c语言·c++·制造
qq_406981031 天前
c++ lamda(三)Lambda表达式
java·前端·c++