本节博客主要实现以下效果:
3-1独立按键控制LED亮灭
本段代码主要使用了if...else...语句实现按下按下灯亮,松开按键时灯灭
#include <REGX51.H>
void main()
{
while(1)
{
if(P3_1==0&&P3_0==0)
{
P2_0=0;
}
else
{
P2_0=1;
}
}
}
3-2独立按键控制LED状态
首先使用较为灵活的延时函数生成代码,进行修改后如下
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;
}
}
}
实现效果:
3-2独立按键控制LED状态
3-3独立按键控制LED显示二进制
显示二进制的延时函数与上述一致,但是按键部分稍有变化
if(P3_1==0)
{
Delay(20);
while(P3_1==0);
Delay(20);
LEDNum++;
P2=~LEDNum;
}
注意:要对按键进行消抖,判断按键是否仍然继续按下,在此之前定义一个局部变量记录变化,最后让其取反赋值给P2
unsigned char LEDNum=0;
实现效果:
3-3独立按键控制LED显示二进制
3-4独立按键控制LED移位
3-4设置两个按键控制LED灯的移位,延时部分一致,与3-3比较可以定义一个全局变量
unsigned char LEDNum;
P3_1控制LED右移,P3_0控制LED左移
if(P3_1==0)
{
Delay(20);
while(P3_1==0);
Delay(20);
LEDNum++;
if(LEDNum>=8)
LEDNum=0;
P2=~(0x01<<LEDNum);
}
if(P3_0==0)
{
Delay(20);
while(P3_0==0);
Delay(20);
if(LEDNum==0)
LEDNum=7;
else
LEDNum--;
P2=~(0x01<<LEDNum);
}
一开始D1是不亮的,所以可在代码前添加以下代码,表示将其状态取反后赋值给P2
P2=~0x01;
实现效果:
3-4独立按键控制LED移位