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;}
}
}
相关推荐
WW_千谷山4_sch5 分钟前
MYOJ_10599:CSP初赛题单10:计算机网络
c++·计算机网络·算法
梵尔纳多39 分钟前
绘制一个矩形
c++·图形渲染·opengl
橘颂TA1 小时前
【剑斩OFFER】算法的暴力美学——leetCode 946 题:验证栈序列
c++·算法·leetcode·职场和发展·结构与算法
闻缺陷则喜何志丹1 小时前
【状态机动态规划】3686. 稳定子序列的数量|1969
c++·算法·动态规划·力扣·状态机动态规划
liulilittle1 小时前
OPENPPP2 网络驱动模式
开发语言·网络·c++·网络协议·信息与通信·通信
mjhcsp1 小时前
C++ AC 自动机:原理、实现与应用全解析
java·开发语言·c++·ac 自动机
爱吃生蚝的于勒1 小时前
【Linux】进程间通信之匿名管道
linux·运维·服务器·c语言·数据结构·c++·vim
wanderist.1 小时前
C++输入输出的一些问题
开发语言·c++·图论
金色熊族1 小时前
MV结构下设置Qt表格的代理(2)
c++·qt
Morwit2 小时前
Qt qml创建c++类的单例对象
开发语言·c++·qt