麻烦各位大佬帮忙看下哪里有问题,LED的呼吸子程序不能用按键切换
单片机C语言源程序如下:
#include <reg52.h>
unsigned int mode;
void DelayXms(unsigned int xms);
void Delayus(int us);
void LED_R();
void LED_G();
void LED();
sbit key=P3^4;
void main() //主程序
{
while(1)
{
LED();
if(!key)
{
DelayXms(50);
if(!key)
{
mode++;
if(mode>=10)
mode=0;
} while(!key);
}
}
}
void DelayXms(unsigned int xms) //延迟函数
{
unsigned i,j;
for(i=xms;i>0;i--)
{
for(j=124;j>0;j--);
}
}
void Delayus(int us) //10us
{
unsigned char i;
while(us)
{
i = 2;
while (--i);
us--;
}
}
void LED_R() //LED呼吸
{
int i;
for(i=1;i<300;i++)//由暗变亮
{
P1=0x00;
Delayus(i);
P1=0x01;
Delayus(300-i);
}
for(i=1;i<300;i++)//由亮变暗
{
P1=0x01;
Delayus(i);
P1=0x00;
Delayus(300-i);
}
}
void LED_G() //LED呼吸
{
int i;
for(i=1;i<300;i++)//由暗变亮
{
P1=0x00;
Delayus(i);
P1=0x02;
Delayus(300-i);
}
for(i=1;i<300;i++)//由亮变暗
{
P1=0x02;
Delayus(i);
P1=0x00;
Delayus(300-i);
}
}
void LED()
{
switch(mode)
{
case 0:P1 = 0x00;break; //上电默认所有的LED都不亮
case 1:P1 = 0x01;break; //按键按下,第一个LED亮
case 2:P1 = 0x02;break; //按键按下,第二个LED亮
case 3:P1 = 0x04;break; //按键按下,第三个LED亮
case 4:P1 = 0x05;break; //按键按下,第一第三个LED亮
case 5:P1 = 0x03;break; //按键按下,第一第二个LED亮
case 6:P1 = 0x06;break; //按键按下,第二第三个LED亮
case 7:P1 = 0x07;break; //按键按下,LED全亮
case 8:LED_R();break;
case 9:LED_G();break;
default: break;
}
}
|