独立按键电路图,按下时接入低电平
1、独立按键K1控制LED的亮灭
#include <REGX52.H>
void Delay(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void main()
{
while(1)
{
if(P3_1 == 0) // P3_1控制K1按键,等于0时候相当于被按下
P2_0 = 0; //设置LED灯为低电平从而点亮LED
else
P2_0 = 1;
}
}
2、独立按键控制LED状
#include <REGX52.H>
void Delay(unsigned int xms) //@12.000MHz
{
unsigned char 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; // 对LED状态进行取反操作
}
}
}
按键抖动示意图:
3、独立按键控制LED显示二进制
#include <REGX52.H>
void Delay(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void main()
{
unsigned char LEDNum = 0; // 8位存储和单片机寄存器位数一致
while(1)
{
if(P3_1 == 0){
Delay(20);
while(P3_1 == 0) ;
Delay(20);
LEDNum ++;
P2 = ~LEDNum;
}
}
}
4、独立按键控制LED移位(K1向右移动,K2向左移动)
#include <REGX52.H>
void Delay(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void main()
{
unsigned char LEDNums=0;
P2 = 0xFE;
while(1)
{
if(P3_1==0){
Delay(20);
while(P3_1==0);
Delay(20);
LEDNums ++;
if(LEDNums>=8) LEDNums=0;
P2 = ~(0x01 << LEDNums);
}
if(P3_0==0){
Delay(20);
while(P3_0==0);
Delay(20);
/*注意这里的写法,一定要先判断LEDNums是否为0,如果为0之后还进行--操作,
则LEDNums由0000 00000 变成 1111 1111*/
if(LEDNums==0)
LEDNums=7;
else
LEDNums--;
P2 = ~(0x01 << LEDNums);
}
}
}