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;}
}
}
相关推荐
计算机安禾5 小时前
【数据结构与算法】第36篇:排序大总结:稳定性、时间复杂度与适用场景
c语言·数据结构·c++·算法·链表·线性回归·visual studio
unicrom_深圳市由你创科技5 小时前
做虚拟示波器这种实时波形显示的上位机,用什么语言?
c++·python·c#
无限进步_5 小时前
【C++】电话号码的字母组合:从有限处理到通用解法
开发语言·c++·ide·windows·git·github·visual studio
C++ 老炮儿的技术栈5 小时前
GCC编译时无法向/tmp 目录写入临时汇编文件,因为设备空间不足,解决
linux·运维·开发语言·汇编·c++·git·qt
橘颂TA5 小时前
【笔试】算法的暴力美学——牛客 NC213140 :除2!
c++·算法·结构与算法
wsoz6 小时前
Leetcode普通数组-day5、6
c++·算法·leetcode·数组
favour_you___6 小时前
2026_4_8算法练习题
数据结构·c++·算法
SccTsAxR6 小时前
算法基石:手撕离散化、递归与分治
c++·经验分享·笔记·算法
Q741_1477 小时前
每日一题 力扣 3655. 区间乘法查询后的异或 II 模拟 分治 乘法差分法 快速幂 C++ 题解
c++·算法·leetcode·模拟·快速幂·分治·差分法
夏乌_Wx7 小时前
剑指offer | 2.4数据结构相关题目
数据结构·c++·算法·剑指offer·c/c++