遇到個項目 國產8位單片機沒AD 充電LED顯示這里卡住了 共有4顆LED 分別 LED1、LED2、LED3、LED4 //D1 D2 D3 D4 堆塔跑馬燈 4顆燈跑馬燈,定時一段時間 LED1燈常亮其余跑馬燈 后續定時一段時間 依次類推 到最后一顆LED4閃爍,滿電燈全亮。 我寫了的這個在while里面有問題,定時函數里面寫的標志位 沒作用 代碼進到跑馬燈void ledpmd()里面第一個if,后面else if 跑不起來 求大佬指教一下
void ledpmd(void)
{
if(cm_ledfag==1) // 充電開啟 前2分鐘流水跑馬燈
{
if(cn1s)
{
time1s++;
cn1s=0;
}
if(time1s>40) //定時1s
{
time1s=0;
if(ledcn++>4)
ledcn=0;
switch(ledcn)
{
case 0:
D1=1;
D2=1;
D3=1;
D4=1;
break;
case 1:
D1=0;
break;
case 2:
D2=0;
break;
case 3:
D3=0;
break;
case 4:
D4=0;
break;
default:
break;
} //switch
}
} //
else if(led_state==2) // 定時2分鐘標志位 LED1常亮 LED2-LED4流水跑馬燈
{
if(cn1s)
{
time1s++;
cn1s=0;
}
if(time1s>40) //定時1s
{
time1s=0;
if(ledcn++>4)
ledcn=0;
switch(ledcn)
{
case 0:
D1=0;
D2=1;
D3=1;
D4=1;
break;
case 1:
D1=0;
break;
case 2:
D2=0;
break;
case 3:
D3=0;
break;
case 4:
D4=0;
break;
default:
break;
} //switch
}
} // 2分鐘
else if(led_state==3) // 定時20分鐘標志位 LED1-LED2常亮 LED3-LED4流水跑馬燈
{
if(cn1s)
{
time1s++;
cn1s=0;
}
if(time1s>40) //定時1s
{
time1s=0;
if(ledcn++>4)
ledcn=0;
switch(ledcn)
{
case 0:
D1=0;
D2=0;
D3=1;
D4=1;
break;
case 1:
D1=0;
break;
case 2:
D2=0;
break;
case 3:
D3=0;
break;
case 4:
D4=0;
break;
default:
break;
} //switch
}
} // 20分鐘
else if(led_state==4) // 定時30分鐘標志位 LED1-LED3常亮 LED4閃燈
{
if(cn1s)
{
time1s++;
cn1s=0;
}
if(time1s>40) //定時1s
{
time1s=0;
if(ledcn++>4)
ledcn=0;
switch(ledcn)
{
case 0:
D1=0;
D2=0;
D3=0;
D4=1;
break;
case 1:
D1=0;
break;
case 2:
D2=0;
break;
case 3:
D3=0;
break;
case 4:
D4=0;
break;
default:
break;
} //switch
}
}
}
void main()
{
POWER_INITIAL(); //系統初始化
PWM1_INITIAL(); //初始化T2
TIMER0_INITIAL();
GIE = 1; //開中斷
T0IE = 1;
// LED燈初始化
D1=0; //=1置高 關閉LED
D2=0;
D3=0;
D4=0;
PR2L=0;
led_state=0;
ledpmd();
while(1)
{
MCLRWDT(); //清看門狗
if(flag2s) //關閉開機畫面
{
flag2s=0;
D1=1;
D2=1;
D3=1;
D4=1;
}
//--------------------------------
if(CH) //充電高電平
{
MCLRWDT();
//-------跑馬燈入口----------
ledpmd();
//------------------------------
cm_ledfag=1; //狀態位
//----------2min------------------
if(flag_m1) // 中斷函數里面1分鐘 flag_m1 置一次1
{
min2++;
flag_m1=0;
}
if(min2>1)
{
min2=0;
flag_m1=0;
cm_ledfag=0;
led_state=2; //狀態位
cn5s=0;
flag5s=0;
}
//------------20min-----------------
if(flag_m1)
{
min20++;
flag_m1=0;
}
if(min20>19)
{
min20=0;
flag_m1=0;
cm_ledfag=0;
led_state=3; //狀態位
cn5s=0;
flag5s=0;
}
//--------------30min----------------
if(flag_m1)
{
min30++;
flag_m1=0;
}
if(min30>29)
{
min30=0;
flag_m1=0;
cm_ledfag=0;
led_state=4; //狀態位
cn5s=0;
flag5s=0;
}
//-------------------------------------
}
} //while
} //main
|