独立按键属于一种开关类器件,一端接地一端接IO口,所以单片机中读取到对应IO口为低电平表示按键已经按下,然后可以在代码中通过循环查询或者中断方式进行判断从而执行不同的代码
#include <reg52.h>
#include <intrins.h>
#define LED P2
sbit K1 = P1^4;
sbit K2 = P1^5;
sbit K3 = P1^6;
sbit K4 = P1^7;
sbit K5 = P3^5;
void Delay10ms(unsigned int); //误差 0us
void main(void){
unsigned char n;
unsigned char i;
while(1){
if(K1 == 0){
Delay10ms(1);
//循环右移
if(K1 == 0){
LED = 0x7f;
for(n=0;n<8;n++){
Delay10ms(50);
LED=_cror_(LED,1);
}
}
LED = 0xff;
}
//循环左移
if(K2 == 0){
Delay10ms(1);
if(K2 == 0){
LED = 0xfe;
for(n=0;n<8;n++){
Delay10ms(50);
LED=_crol_(LED,1);
}
}
LED = 0xff;
}
//循环点亮
if(K3 == 0){
LED = 0x7f;
Delay10ms(1);
if(K3 == 0){
i = 0x7f;
for(n=0;n<8;n++){
Delay10ms(50);
i = _cror_(i,1);
LED = LED & i;
}
}
LED = 0xff;
}
//闪缩7次
if(K4 == 0){
Delay10ms(1);
if(K4 == 0){
i = 0x80;
for(n=0;n<8;n++){
LED = 0xaa;
Delay10ms(50);
LED = 0x55;
Delay10ms(50);
}
LED = 0xff;
}
}
//灯全亮LED
if(K5 == 0){
Delay10ms(1);
if(K5 == 0){
LED = 0;
}
}
}
}
void Delay10ms(unsigned int c) //误差 0us
{
unsigned char a^b;
for(;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}