?? bat_ctrl12_ac.c
字號(hào):
/*函數(shù)名:
/*功能:
/*輸入?yún)?shù):
/*返回值:
/*調(diào)用函數(shù):
/*被調(diào)用函數(shù):
/*編寫(xiě)日期:
/*最后修改日期:
/********************************************************************/
void Init_All()
{
Clr_Dog();
Init_Var();
Init_IO();
Init_AD();
Init_Timer();
Init_RTC();
Init_WDT();
Init_Interrupt();
Led_Ctrl(1,2); //L3閃爍——正常運(yùn)行
Led_Ctrl(0,0); //L2滅——沒(méi)有過(guò)充或過(guò)放
P04 = 0; //負(fù)荷12關(guān)
P05 = 0; //關(guān)閉交流充電
P14 = 0; //
}
/*********************************************************************/
/*函數(shù)名:
/*功能:
/*輸入?yún)?shù):
/*返回值:
/*調(diào)用函數(shù):
/*被調(diào)用函數(shù):
/*編寫(xiě)日期:
/*最后修改日期:
/********************************************************************/
uchar Get_Mode()
{
uchar mode;
Clr_Dog();
mode = 0;
if(!P11)
{
mode += 1;
}
if(!P10)
{
mode += 2;
}
if(!P13)
{
mode += 4;
}
if(!P12)
{
mode += 8;
}
return(mode);
}
/*********************************************************************/
/*函數(shù)名:
/*功能:
/*輸入?yún)?shù):
/*返回值:
/*調(diào)用函數(shù):
/*被調(diào)用函數(shù):
/*編寫(xiě)日期:
/*最后修改日期:
/********************************************************************/
void GetAd()
{
uchar i;
uint BatTmp,SunTmp;
Clr_Dog();
EAD = 0;
BatTmp = 0;
SunTmp = 0;
for(i=0;i<8;i++)
{
BatTmp += AdValue.BatAd[i];
SunTmp += AdValue.SunAd[i];
}
BatValue = BatTmp/8;
SunValue = SunTmp/8;
EAD = 1;
}
/*********************************************************************/
/*函數(shù)名:
/*功能:
/*輸入?yún)?shù):
/*返回值:
/*調(diào)用函數(shù):
/*被調(diào)用函數(shù):
/*編寫(xiě)日期:
/*最后修改日期:
/********************************************************************/
void Main_Logic12(uchar TimeMode)
{
Clr_Dog();
if(BatValue>TINGAC12)
{
P05 = 0; //關(guān)閉交流充電
}
if(BatValue <OFFAC12)
{
P05 = 0; //關(guān)閉交流充電
}
if(BatValue>OFFAC12+4 && BatValue<YUNAC12)
{
P05 = 1; //開(kāi)啟交流充電
}
Clr_Dog();
if(BatValue>TINGCHONG12)// && P14==0)
{
if(!StopFlag)
{
ET0 = 0;
enPWM = 0; //禁止PWM
P14 = 0; //停止充電
StopFlag = 1; //停止充電
ET0 = 1;
}
PowerFlag = 1; //允許放電
Led_Ctrl(1,2); //運(yùn)行狀態(tài)燈L3閃爍
Led_Ctrl(0,1); //過(guò)充過(guò)放燈L2亮
}
else if(BatValue>GUOCHONG12)
{
if(!StopFlag)
{
ET0 = 0;
enPWM = 1; //允許PWM
ET0 = 1;
}
PowerFlag = 1; //允許放電
if(SunValue>BatValue)
Led_Ctrl(1,1); //運(yùn)行狀態(tài)燈L3亮
else
Led_Ctrl(1,2);
Led_Ctrl(0,1); //過(guò)充過(guò)放燈L2亮
}
else if(BatValue>YUNFANG12)
{
if(!StopFlag)
{
ET0 = 0;
enPWM = 0; //禁止PWM
P14 = 1; //全速充電
ET0 = 1;
}
PowerFlag = 1; //允許放電
if(SunValue>BatValue)
Led_Ctrl(1,1); //運(yùn)行狀態(tài)燈L3亮
else
Led_Ctrl(1,2);
Led_Ctrl(0,0); //過(guò)充過(guò)放燈L2滅
}
else;
Clr_Dog();
if(BatValue<GUOFANG12)
{
P04 = 0; //關(guān)閉負(fù)荷12
enPWM = 0; //禁止PWM
P14 = 1; //全速充電
PowerFlag = 0; //禁止放電
if(SunValue>BatValue)
Led_Ctrl(1,1); //運(yùn)行狀態(tài)燈L3亮(充電)
else
Led_Ctrl(1,2);
Led_Ctrl(0,2); //過(guò)充過(guò)放燈L2閃爍(過(guò)放)
}
else
{
if(BatValue<YUNCHONG12)
{
enPWM = 0; //禁止PWM
P14 = 1; //全速充電
StopFlag = 0; //允許再次充電
if(SunValue>BatValue)
Led_Ctrl(1,1); //運(yùn)行狀態(tài)燈L3亮(充電)
else
Led_Ctrl(1,2);
Led_Ctrl(0,0); //過(guò)充過(guò)放燈L2滅
}
if(PowerFlag)
{
if(TimeMode == 0)
{
P04 = 1; //啟動(dòng)負(fù)荷
CtrlFlag = 1;
}
else
{
Clr_Dog();
if(SunValue>=LIANGDENG12)
Delay4min2 = 0;
if(SunValue<=MIEDENG12)
Delay4min1 = 0; //延時(shí)清0
if(SunValue<NODELAY12)
{
if(CtrlFlag)
{
P04 = 1; //啟動(dòng)負(fù)荷12
}
if(ClrFlag)
{
Seconds = 0; //清0
Minutes = 0; //清0
Hours = 0; //啟動(dòng)負(fù)荷的同時(shí)時(shí)間清0開(kāi)始計(jì)數(shù)
ClrFlag = 0; //禁止清0
}
}
else if(SunValue<LIANGDENG12)
{
if(Delay_4min(0)) /*延時(shí)4min*/
{
if(SunValue<LIANGDENG12)
{
if(CtrlFlag)
{
P04 = 1; //啟動(dòng)負(fù)荷
}
if(ClrFlag)
{
Seconds = 0; //清0
Minutes = 0; //清0
Hours = 0; //啟動(dòng)負(fù)荷的同時(shí)時(shí)間清0開(kāi)始計(jì)數(shù)
ClrFlag = 0; //禁止清0
}
}
}
}
else;
Clr_Dog();
if(SunValue>MIEDENG12)
{
if(Delay_4min(1))/*延時(shí)4min*/
{
if(SunValue>MIEDENG12)
{
P04 = 0; //關(guān)閉負(fù)荷12
ClrFlag = 1; //允許清0
CtrlFlag = 1;
}
}
}
if(Hours >= TimeMode && ClrFlag==0)
{
P04 = 0; //關(guān)閉負(fù)荷12
ClrFlag = 1; //允許清0
CtrlFlag = 0;
}
}
}
}
}
/*********************************************************************/
/*函數(shù)名:
/*功能:
/*輸入?yún)?shù):
/*返回值:
/*調(diào)用函數(shù):
/*被調(diào)用函數(shù):
/*編寫(xiě)日期:
/*最后修改日期:
/********************************************************************/
void Clr_Dog()
{
EA = 0; //關(guān)閉中斷
WFEED1 = 0xA5; //執(zhí)行清零第一部分
WFEED2 = 0x5A; //執(zhí)行清零第二部分
EA = 1; //開(kāi)中斷
}
/*********************************************************************/
/*函數(shù)名:
/*功能:
/*輸入?yún)?shù):port=1--L3,port=0--L2;mode=0常滅--mode=1--常亮mode=2--閃爍
/*返回值:
/*調(diào)用函數(shù):
/*被調(diào)用函數(shù):
/*編寫(xiě)日期:
/*最后修改日期:
/********************************************************************/
void Led_Ctrl(bit port,uchar mode)
{
Clr_Dog();
if(mode == 2)
{
if(port)
enL3 = 1;
else
enL2 = 1;
}
else if(mode == 1)
{
if(port)
{
enL3 = 0;
P00 = 0;
}
else
{
enL2 = 0;
P01 = 0;
}
}
else
{
if(port)
{
enL3 = 0;
P00 = 1;
}
else
{
enL2 = 0;
P01 = 1;
}
}
}
/*********************************************************************/
/*函數(shù)名:
/*功能:
/*輸入?yún)?shù):
/*返回值:
/*調(diào)用函數(shù):
/*被調(diào)用函數(shù):
/*編寫(xiě)日期:
/*最后修改日期:
/********************************************************************/
bit Delay_4min(bit enDelay)
{
Clr_Dog();
if(enDelay)
{
enDelay1 = 1;
if(Delay4min1>=DELAY_MIN)
{
enDelay1 = 0;
Delay4min1 = 0;
return(1);
}
}
else
{
enDelay2 = 1;
if(Delay4min2>=DELAY_MIN)
{
enDelay2 = 0;
Delay4min2 = 0;
return(1);
}
}
return(0);
}
/********************END********************/
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -