单片机按键去抖显示led

来源:互联网 发布:百万公众网络测试登录 编辑:程序博客网 时间:2024/05/09 06:04
 #include<reg52.h>
 sbit  key1 = P1^0;
 sbit  key2 = P1^1;
 sbit  key3 = P1^2;
 unsigned char led[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
 unsigned char flag;
void delayus(unsigned char t)
{
while(--t);
}
void delayms(unsigned char t)
{
  while(--t)
{
delayus(245);
delayus(245);
}
}
void delay(unsigned char n)
{
unsigned int i,j;
for( i = n; i > 0; i--)
{
for( j = n; j > 0; j--)
{
;
}
}
}
void fun()
{
switch(P1)
{
case 0xfe: 
{
//if(flag == 0)
//{
P0 = led[0];
//flag = 1;
//}
break;
}
case 0xfd: 
{
//if(flag == 1)
// {
P0 = led[1];
//flag = 0;
//}
break;
}
case 0xfb:
{
//if(flag == 1)
// {
P0 = led[2];
//}
break;
}
case 0xf7:
{
// if(flag == 1)
// {
P0 = led[3];
// }
break;
}
case 0xef:
{
// if(flag == 1)
// {
P0 = led[4];
// }
break;
}
case 0xdf:
{
//if(flag == 1)
//{
P0 = led[5];
// }
break;
}
case 0xbf:
{
//if(flag == 1)
// {
P0 = led[6];
// }
break;
}
case 0x7f:
{
// if(flag == 1)
// {
P0 = led[7];
// }
break;
}
default:break;
}
}
void car()
{
// unsigned char flag;// = 0;
  switch(P1)
{
case 0xfe:
{
 if(!key1)
{
delayms(10);
if(!key1)
{
while(!key1);
flag++;




}
}


}
break;
case 0xfd:
{

if(!key2)
{
delayms(10);
if(!key2)
{
while(!key2);
while(1)
{
P0 = led[7];
delay(100);
P0 = 0xff;
delay(100);
}
}
}


}
break;
case 0xfb:
{

if(!key3)
{
delayms(10);
if(!key3)
{
while(!key3);
while(1)
{
P0 = 0x7e;
delay(100);
P0 = 0xff;
delay(100);
}
}
}


}
break;
default:break;
}




}
void main(void)
{
unsigned char i;

P1 = 0xff;
P0 = 0xff;
while(1)
{
//fun();
car();
if(flag%2)
  { P0 = led[0];
delay(100);
P0 = 0xff;
delay(100);
  }
else
{P0 = 0xff;}
}


}
0 0
原创粉丝点击