#include <reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit key1 =P2^0;
sbit key2 =P2^1;
sbit key3 =P2^2;
sbit key4 =P2^3;
uchar flag1=0,flag2=0,flag3=0,flag4=0;
void delay_ms(uint z)
{
uint i,j;
for(i=0;i<z;i++)
for(j=0;j<110;j++);
}
void O_to_E()
{
P0=0Xaa;
delay_ms(200);
P0=~0Xaa;
delay_ms(200);
}
void key_scan() //鍵盤掃描
{
if(!key1)
{
delay_ms(10); //延時消抖
if(!key1)
flag1=1;
}
if(!key2)
{
delay_ms(10); //延時消抖
if(!key2)
flag2=1;
}
if(!key3)
{
delay_ms(10); //延時消抖
if(!key3)
flag3=1;
}
if(!key4)
{
delay_ms(10);
if(!key4)
flag4=1; //延時消抖
}
}
void main()
{
uchar i;
while(1)
{
key_scan();
if(flag1) //按鍵一按
{
for(i=0;i<8;i++) //從左至右亮,每次一盞
{
P0=~(0x80>>i);
delay_ms(100);
key_scan(); //按鍵掃描
if(flag2||flag3||flag4){flag1=0;break;} //如果有其它按鍵按下響應其它按鍵
}
}
if(flag2) //按鍵一按下?
{
for(i=0;i<8;i++) //從右至左亮,每次一盞
{
P0=~(0x01<<i);
delay_ms(100);
key_scan();
if(flag1||flag3||flag4){flag2=0;break;}
}
}
if(flag3)
{
O_to_E(); //奇偶交替閃爍
key_scan();
if(flag1||flag2||flag4){flag3=0;break;}
}
}
if(flag4)
{
for(i=0;i<8;i++)
{
P0=(0x80>>i); //單方向全部點亮
delay_ms(100);
key_scan();
if(flag1||flag2||flag3){flag4=0;break;}
}
}
}
|