概述
一、老规矩 先上代码
#include <REGX52.H>
void main()
{
while(1)
{
if(P3_1==0 || P3_0==0) //如果K1按键或K2按键按下
{
P2_0=0; //LED1输出0,点亮
}
else
{
P2_0=1; //LED1输出1,熄灭
}
}
}
我们可以看到其本质还是对端口进行操作 因而我们需要从其原理图继续出发
我们可以看到 独立按键的每一个口右侧接地 因此单我们点击独立按键的时候 MCU所接受到的是低电平信号 所以我们可以利用这点来控制LED灯的亮灭
但是其缺点也很明显 就是我们只有持续按住的时候 LED灯才能够保持亮着的状态
二、通过独立按键对LED灯进行一波控制
1、首先,我们需要理解独立按键本身所存在的一些问题
对于机械开关所存在的抖动,我们需要利用延时函数进行处理,从而使我们的控制达到稳定的状态
2、因此我们的代码应该这样子设计
#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) //如果K1按键按下
{
Delay(20); //延时消抖
while(P3_1==0); //松手检测
Delay(20); //延时消抖
P2_0=~P2_0; //LED1取反
}
}
}
其中 注意松手检测处 如果K1按下的时候 没有松手 就会在while里面一直循环不出来 也就没办法执行下一步语句 即灯不会亮
当我们再次按下K1的时候 灯就会重新暗淡下去 因为我们此时对灯进行了取反
三、通过独立按键对LED显示二进制
1、老规矩 先上代码
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
}
}
}
2、在二的基础上 对控制灯的二进制数进行操作 关键点就是二进制的转换罢了
四、通过独立按键对LED显示二进制
1、上代码
#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);
}
}
2、so easy 看看注释 你学会了不?
最后
以上就是时尚电话为你收集整理的51单片机入门教程_独立按键控制系列的全部内容,希望文章能够帮你解决51单片机入门教程_独立按键控制系列所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复