麻煩各位大佬幫忙看下哪里有問題,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;
}
}
|