之前学会了有关控制LED亮灭的知识点,接下来我们来看一下如何通过独立按键来控制LED灯的亮灭,还是一样的步骤,我们需要来学习一些有关独立按键的电路知识。
首先独立按键就是控制电路的连通,GND是电源负极,后面四个接口都是接在单片机的CPU上,而单片机接通电源时默认就是高电平,当按键被按下的时候,就变成了低电平,而这个变化可以通过寄存器来获取到(按键松开的时候,寄存器是高电平,按键按下的时候是低电平),再结合代码来解释一下。
代码语言:javascript复制#include <REGX52.H>
void main()
{
while(1)
{
if(P3_1==0 || P3_0==0) //P3_1是K1,P3_0是K2,如果K1按键或K2按键按下
{
P2_0=0; //通过P2_0来控制一个LED灯,就不需要像上节那样通过向每个接口赋值来操控
//LED1输出0,点亮
}
else
{
P2_0=1; //LED1输出1,熄灭
}
}
}
运行结果如下所示:
https://live.csdn.net/v/embed/208152
独立按键0
接下来我们来看一下通过独立按键来控制LED显示二进制的代码吧,不过可能需要一点C语言基础,要知道取反和基本运算符。
在这之前,还是需要了解一个电路知识,就是消抖,不过我们先来了解一下按键的抖动吧!
按键的抖动:对于机械开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动
对于消抖,大概有两种方法,第一是通过硬件消抖,在次不做介绍,第二种就是通过软件来操作,通过延时来消抖。
代码语言:javascript复制#include <REGX52.H>
void Delay(unsigned int xms)
{
unsigned char i, j; //八位二进制的数,便于我们操控单片机
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void main()
{
unsigned char LEDNum=0;
while(1)
{
if(P3_1==0) //如果K1按键按下
{
Delay(20); //延时消抖
while(P3_1==0); //松手检测
Delay(20); //延时消抖
LEDNum ; //变量自增
P2=~LEDNum; //变量取反输出给LED
}
}
}
运行结果如下所示:
https://live.csdn.net/v/embed/208170
独立按键1
这个代码是控制LED灯位移,大家可以试着分析一下,知识点和之前类似,就是加了一个移位的操作来实现LED的位移。
代码语言:javascript复制#include <REGX52.H>
void Delay(unsigned int xms);
unsigned char LEDNum;
void main()
{
P2=~0x01; //上电默认LED1点亮
while(1)
{
if(P3_1==0) //如果K1按键按下
{
Delay(20);
while(P3_1==0);
Delay(20);
LEDNum ; //LEDNum自增
if(LEDNum>=8) //限制LEDNum自增范围
LEDNum=0;
P2=~(0x01<<LEDNum); //LED的第LEDNum位点亮
}
if(P3_0==0) //如果K2按键按下
{
Delay(20);
while(P3_0==0);
Delay(20);
if(LEDNum==0) //LEDNum减到0后变为7
LEDNum=7;
else //LEDNum未减到0,自减
LEDNum--;
P2=~(0x01<<LEDNum); //LED的第LEDNum位点亮
}
}
}
void Delay(unsigned int xms)
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
运行结果如下所示:
https://live.csdn.net/v/embed/208208
独立按键2
这就是独立按键的一些知识了,就先介绍到这!