三、独立按键控制LED
独立按键:
轻触按键,相当于一种电子开关,按下接通,松开时断开。
实现原理:通过轻触按键内部的金属弹片受力弹动来实现接通和断开。
IO口默认高电平,按下按键之后变成低电平。(按下就相当于接地)
寄存器通过检测高低电平检测按键是不是被按下。
1、独立按键控制LED亮灭
代码:(默认不写头文件)
void main()
{
while(1)
{
if(P3_1==0)//检测按键是否按下
{
P2_0=0;//P2=0xfe是对整个寄存器操作,八个为一组。现单个使用只需要控制输出0或者1
}
else
{
P2_0=1;
}
}
}
2、按键的抖动
对于机械开关,触点断开闭合时,由于机械触点的弹性作用一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动。
软件消抖
通过Delay,来过滤掉抖动。
void main()
{
while(1)
{
if(P3_1==0)
{
Delay(20);//按下消抖
while(P3_0==0);//没松手不会做出反应
Delay(20);//松开消抖
P2_0=~P2_0;//取反
}
}
}
3、独立按键控制LED显示二进制
代码
void main()
{
unsigned char LEDNum=0;//刚好和寄存器位数匹配
while(1)
{
if(P3_1==0)
{
Delay(20);
while(P3_1==0);
Delay(20);
LEDNum++;
P2=~LEDNum;
}
}
}
4、独立按键控制LED移位
代码
unsigned char LEDNum;//和寄存器位数匹配
void main()
{
P2=~0x01;
while(1)
{
if(P3_1==0)
{
Delay(20);
while(P3_1==0);
Delay(20);
LEDNum++;
if(LEDNum>=8)
LEDNum=0;
P2=~(0x01<<LEDNum);//LED左移
}
if(P3_0==0)//和第一个if平等关系
{
Delay(20);
while(P3_0==0);
Delay(20);
if(LEDNum=0)
LEDNum=7;
else
LEDNum--;
P2=~(0x01<<LEDNum);//LED右移
}
}
}