電動(dòng)車(chē)充電控制器制作
///////////////////////////////////////////////////
void P_HC_weihu(void)
{
//顯示緩存顯示數(shù)據(jù)元素維護(hù)函數(shù),負(fù)責(zé)維護(hù)和更新各組定時(shí)器的顯示數(shù)據(jù)
int y,z;
for(z=0;z<4;z++)
{
y=0;
if(TIME[z]>=1000)
{
if(TIME[z]%10000==0)
P_HC_fuzhi(z,y,0); //如此位為0則直接填0避免造成除0錯(cuò)誤
else
P_HC_fuzhi(z,y,(TIME[z]%10000/1000)); //更新千位值
}else
{
P_HC_fuzhi(z,y,10);//如無(wú)此位則填空
}
y++;
if(TIME[z]>=100)
{
if(TIME[z]%1000==0)
P_HC_fuzhi(z,y,0); //如此位為0則直接填0避免造成除0錯(cuò)誤
else
P_HC_fuzhi(z,y,(TIME[z]%1000/100)); //更新百位值
}else
{
P_HC_fuzhi(z,y,10); //如無(wú)此位則填空
}
y++;
if(TIME[z]>=10)
{
if(TIME[z]%100==0)
P_HC_fuzhi(z,y,0); //如此位為0則直接填0避免造成除0錯(cuò)誤
else
P_HC_fuzhi(z,y,(TIME[z]%100/10));//更新十位值
}else
{
P_HC_fuzhi(z,y,10); //如無(wú)此位則填空
}
y++;
if(TIME[z]>0)
{
P_HC_fuzhi(z,y,(TIME[z]%10)); //更新個(gè)位值
}else
{
P_HC_fuzhi(z,y,0);
}
}
}本文引用地址:http://m.butianyuan.cn/article/201612/324243.htm
///////////////////////////////////////////////////
void key(void)
{
//按鍵選擇控制函數(shù)
TB=1;shu1=1;shu2=1;shu3=1;shu4=1;
if(shu4!=1||shu3!=1||shu2!=1||shu1!=1||TB!=1)
{
delay(20);
TB=1;shu1=1;shu2=1;shu3=1;shu4=1;
if(shu4!=1||shu3!=1||shu2!=1||shu1!=1||TB!=1)
{
if(TB!=1)//投幣鍵按下彈起一次后TOUBI變量加1,1投幣值可轉(zhuǎn)為240定時(shí)器值
{
for(;TB!=1;){_nop_();} //取上升沿,避免出現(xiàn)多次掃描的現(xiàn)象
TOUBI+=1;
}else if(shu1!=1) //選通第一組充電接口,定時(shí)器值加240
{
for(;shu1!=1;){_nop_();} //取上升沿,避免出現(xiàn)多次掃描的現(xiàn)象
if(TOUBI>0&&TIME[0]<2400)
{
TIME[0]+=240;
TOUBI-=1;
}
}else if(shu2!=1) //選通第二組充電接口,定時(shí)器值加240
{
for(;shu2!=1;){_nop_();} //取上升沿,避免出現(xiàn)多次掃描的現(xiàn)象
if(TOUBI>0&&TIME[1]<2400)
{
TIME[1]+=240;
TOUBI-=1;
}
}else if(shu3!=1) //選通第三組充電接口,定時(shí)器值加240
{
for(;shu3!=1;){_nop_();} //取上升沿,避免出現(xiàn)多次掃描的現(xiàn)象
if(TOUBI>0&&TIME[2]<2400)
{
TIME[2]+=240;
TOUBI-=1;
}
}else if(shu4!=1) //選通第四組充電接口,定時(shí)器值加240
{
for(;shu4!=1;){_nop_();} //取上升沿,避免出現(xiàn)多次掃描的現(xiàn)象
if(TOUBI>0&&TIME[3]<2400)
{
TIME[3]+=240;
TOUBI-=1;
}
}
}
}
}
///////////////////////////////////////////////////
void out(void)
{
//更新輸出狀態(tài)
if(TIME[0]>0)out1=1; else out1=0;
if(TIME[1]>0)out2=1; else out2=0;
if(TIME[2]>0)out3=1; else out3=0;
if(TIME[3]>0)out4=1; else out4=0;
}
///////////////////////////////////////////////////
void init (void)
{
//上電初始化
TMOD = 0x11; // 定時(shí)/計(jì)數(shù)器0,1工作于方式1
TH0 = 0x3c; // 預(yù)置產(chǎn)生50ms時(shí)基信號(hào)
TL0 = 0xb0;
EA = 1; // 開(kāi)總中斷
ET0 = 1; // 定時(shí)/計(jì)數(shù)器0允許中斷
TR0 = 1; // 開(kāi)閉定時(shí)/計(jì)數(shù)器0
//TIME_HH=22;時(shí)
//TIME_MM=13; 分
//TIME_SS=40; 秒
}
///////////////////////////////////////////////////
void tiem0(void) interrupt 1
{ // T/C0中斷服務(wù)程序(產(chǎn)生50ms時(shí)基信號(hào))
cou++; // 軟計(jì)數(shù)器加1
if(cou > 19){ // 計(jì)數(shù)值到100(1s)
cou = 0; // 軟計(jì)數(shù)器清零
TIME_SS++; // 秒計(jì)數(shù)器加1(進(jìn)位10ms*100=1s)
/////////////////////////////////////////////////////////
//按秒扣除定時(shí)器值
if(TIME[0]>0)TIME[0]-=1;
if(TIME[1]>0)TIME[1]-=1;
if(TIME[2]>0)TIME[2]-=1;
if(TIME[3]>0)TIME[3]-=1;
/////////////////////////////////////////////////////////
if(TIME_SS > 59){ // 秒計(jì)數(shù)值到60
TIME_SS = 0; // 秒計(jì)數(shù)器清零
TIME_MM++; // 分計(jì)數(shù)器加1(進(jìn)位60s=1m)
if(TIME_MM > 59){ // 分計(jì)數(shù)到60
TIME_MM = 0; // 分計(jì)數(shù)器清零
TIME_HH++; // 時(shí)計(jì)數(shù)器加1(進(jìn)位60m=1h)
if(TIME_HH > 23){ // 時(shí)計(jì)數(shù)到23
TIME_HH = 0; // 時(shí)計(jì)數(shù)器清零
}
}
}
}
TH0 = 0x3c; // 重置定時(shí)常數(shù)
TL0 = 0xb0;
}
///////////////////////////////////////////////////
void main(void) //主函數(shù)
{
/////////////////////////////////
//初始化
out1=0;
out2=0;
out3=0;
out4=0;
/////////////////////////////////
init();
//主循環(huán)
while(1)
{
key();
P_HC_weihu();
print();
out();
}
}
評(píng)論