求51单片机C51LED灯渐亮渐暗程序。。

2024-10-30 07:03:49
推荐回答(1个)
回答1:

// LedTimeCount应该为100
// 把下面这段的宏定义放在前面,代码段覆盖你原来那段试试
// 注意保存和备份
// LED = 0表示灯亮,LED = 1表示灯灭,如果是反着的就把下面的0和1换一下,或者改下宏定义
// pwmcount初始值为三角波,因此后半段的意思是把100次分为pwmcount自减段和常0段
// 如果自减段和常0段LED都为0则常亮
// c为偶数时pwmcount逐渐增加,自减段增加,此时LED如果为0,常0段为1,则变亮,反之变暗
// c为奇数时pwmcount逐渐减小,自减段减小,此时LED如果为1,常0段为0,则变亮,反之变暗
#define fLED(a,b,c) {LED1 = a;LED2 = b;LED3 = c;}
if (pwmcount > 0)
{
switch(c)
{
case 0://1变亮,2常亮,3变暗
fLED(0,0,1);
break;
case 1://1常亮,2变暗,3变亮
fLED(0,0,1);
break;
case 2://1变暗,2变亮,3常亮
fLED(1,0,0);
break;
case 3://1变亮,2常亮,3变暗
fLED(1,0,0);
break;
case 4://1常亮,2变暗,3变亮
fLED(0,1,0);
break;
case 5://1变暗,2变亮,3常亮
fLED(0,1,0);
break;
}
pwmcount--;
}
else
{
switch(c)
{
case 0://1变亮,2常亮,3变暗
fLED(1,0,0);
break;
case 1://1常亮,2变暗,3变亮
fLED(0,1,0);
break;
case 2://1变暗,2变亮,3常亮
fLED(0,1,0);
break;
case 3://1变亮,2常亮,3变暗
fLED(0,0,1);
break;
case 4://1常亮,2变暗,3变亮
fLED(0,0,1);
break;
case 5://1变暗,2变亮,3常亮
fLED(1,0,0);
break;
}
}