1. 独立按键控制LED状态
轻触按键实现原理:按下时,接通,通过金属弹片受力弹动来实现接通和断开。
松开按键
按下之后:就会被连接
同时按下K1和K2时,P2_0,接口所连LED灯才亮。
#include <REGX52.H>
void main()
{
while(1)
{
if(P3_1==0 && P3_0==0)
{
P2_0=0;
}
else
{
P2_0=1;
}
}
}
对于机械开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动
通过延时20ms可以,逃避按键抖动带来的影响:
#include <REGX52.H>
void Delay(unsigned int xms) //@12.000MHz
{
unsigned char data i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void main()
{
while(1)
{
if(P3_1==0)
{
Delay(20);
while(P3_1==0);
Delay(20);
P2_0=~P2_0;
}
}
}
2.独立按键控制LED显示二进制
默认P2=FF
#include <REGX52.H>
void Delay(int ms) //@12.000MHz
{
unsigned char data i, j;
while(ms){
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
ms--;
}
}
void main()
{
unsigned char LEDNum=0;
while(1)
{
if(P3_1==0)
{
Delay(20);
while(P3_1==0);
Delay(20);
LEDNum++;
P2=~LEDNum;
}
}
}
3.独立按键控制LED移位
#include <REGX52.H>
void Delay(int ms) //@12.000MHz
{
unsigned char data i, j;
while(ms--){
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
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);
}
if(P3_0==0)
{
Delay(20);
while(P3_0==0);
Delay(20);
if (LEDNum==0)
LEDNum=7;
else
LEDNum--;
P2=~(0x01<<LEDNum);
}
}
}