遇到个项目 国产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
|