一、独立按键模块介绍
开发板上四个独立按键共阴极,当按键不按时对各自对应的IO口输出高电平1,按键按下时输出低电平0;结合对独立按键IO口输出信号的判断对其进行编程则可以控制LED灯的亮灭。
二、独立按键控制LED灯光
1、独立按键控制LED灯的亮灭
使用if{ }else{ }语句对第一个独立按键对应的IO口信号的判断,按下按键保持不动持续输出低电平,第一个LED灯亮,松手,按键回弹输出高电平,则LED灯灭。
#include <REGX52.H>
void main()
{
while(1)
{
if(P3_1==0)
{
P2_0=0;
}
else
{
P2_0=1;
}
}
}
2、独立按键控制LED灯的状态
由于按键按下会跟洞开瞬间会伴随一连串的抖动,再按键按下时和松开时加入延时函数,等输出信号稳定之后再进行判断。
#include <REGX52.H>
void Delay(unsigned int xms)
{
unsigned char i, j;
while(xms)
{
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
xms--;
}
}
void main()
{
while(1)
{
if(P3_1==0) //如果K1按下
{
Delay(20); //延时20ms进行消抖
while(P3_1==0) //松手检测,按键保持按下的状态会进入死循环
Delay(20); //延时20ms进行消抖
P2_0=~P2_0; //对第一个LED灯的状态取反
}
}
}
3、独立按键控制LED灯移位
#include <REGX52.H>
unsigned char LEDNum;
void Delay(unsigned int xms)
{
while(xms)
{
unsigned char i, j;
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
xms--;
}
}
void main()
{ P2_0=0; //上电第一个LED灯点亮
while(1)
{
if(P3_1==0) /按下K1
{
Delay(20); //延时消抖
while(P3_1==0); //松手检测
Delay(20); //延时消抖
LEDNum++; //每次按下K1,LEDNum自增一次
if(LEDNum>=8) //越界清零,LEDNum超过8数据清零
LEDNum=0;
P2=~(0x01<<LEDNum); //LED灯进行右移
}
if(P3_0==0) //按下K2
{
Delay(20);
while(P3_0==0); //松手检测
Delay(20);
if(LEDNum==0) //LEDNum为0时变为7
LEDNum=7;
else
LEDNum--; //每次按下K2,LEDNum自减一次
P2=~(0x01<<LEDNum); //LED灯进行左移
}
}
}