📄 ctrlcharge.c
字号:
#include "CtrlCharge.h"
/*************************充放电控制初始化************************
**入口:无
**出口:无
**读取E2PROM中的相关信息存入相应的单元,并初始化相应的存储单元
**初始化相应的I/O口
*****************************************************************/
void CtrlCharge_Initial(void)
{
uint8 tmpCtr; //循环控制变量
ChargeHour=eeprom_read(Addr_ChargeHour); //读取充电时间常数
DischargeHour=eeprom_read(Addr_DischargeHour); //读取放电时间常数
for(tmpCtr=0;tmpCtr<ConChargeChnNum;tmpCtr++)
{
CtrlCharge[tmpCtr].second=0; //秒寄存器清0
CtrlCharge[tmpCtr].minute=0; //分钟寄存器清0
CtrlCharge[tmpCtr].ChargeNum=eeprom_read(AddrE2ChargeSt+4*tmpCtr); //充电次数
CtrlCharge[tmpCtr].disChargeNum=eeprom_read(AddrE2ChargeSt+1+4*tmpCtr); //放电次数
CtrlCharge[tmpCtr].FlagIsCharge=eeprom_read(AddrE2ChargeSt+2+4*tmpCtr); //放电次数
CtrlCharge[tmpCtr].hour=eeprom_read(AddrE2ChargeSt+3+4*tmpCtr); //小时寄存器
}
//是否开始试验标志
for(tmpCtr=0;tmpCtr<ConChargeChnNum;tmpCtr++)
{
CtrlCharge[tmpCtr].FlagIsStTest=eeprom_read(AddrE2FlagStTestSt+4*tmpCtr);
}
Tr_OutPut=0x00; //设置输出口的方向
}
/****************************充放电控制***************************
**入口:通道号(0-3)
**出口:
**判断试验是否开始,对充放电通道控制,充/放电时间加1S、次数
**记录重放电标志
**此函数应1S钟调用1次
*****************************************************************/
CtrlChnCharge(uint8 ChnNo)
{
if(CtrlCharge[ChnNo].FlagIsStTest==TRUE) //若试验开始
{
CtrlCharge[ChnNo].second++;
if(CtrlCharge[ChnNo].FlagIsCharge==TRUE) //若处于充电状态,打开继电器
{
if(ChnNo==0)
{
OutPut0=1;
}
else if(ChnNo==1)
{
OutPut1=1;
}
else if(ChnNo==2)
{
OutPut2=1;
}
else if(ChnNo==3)
{
OutPut3=1;
}
}
else //若处于放电状态,关闭继电器
{
if(ChnNo==0)
{
OutPut0=0;
}
else if(ChnNo==1)
{
OutPut1=0;
}
else if(ChnNo==2)
{
OutPut2=0;
}
else if(ChnNo==3)
{
OutPut3=0;
}
}
//充放电时间加1S
if(CtrlCharge[ChnNo].second==60)
{
CtrlCharge[ChnNo].second=0;
CtrlCharge[ChnNo].minute++;
}
if(CtrlCharge[ChnNo].minute==60)
{
CtrlCharge[ChnNo].minute=0;
CtrlCharge[ChnNo].hour++;
}
if(CtrlCharge[ChnNo].FlagIsCharge==TRUE) //若处于充电状态
{
if(CtrlCharge[ChnNo].hour==ChargeHour) //若达到充电时间
{
CtrlCharge[ChnNo].hour=0; //清0小时时间寄存器
CtrlCharge[ChnNo].ChargeNum++; //充电次数加1
CtrlCharge[ChnNo].FlagIsCharge=FALSE; //改变充放电标志
}
}
else //若处于放电状态
{
if(CtrlCharge[ChnNo].hour==DischargeHour) //若达到放电时间
{
CtrlCharge[ChnNo].hour=0; //清0小时时间寄存器
CtrlCharge[ChnNo].disChargeNum++; //充电次数加1
CtrlCharge[ChnNo].FlagIsCharge=TRUE; //改变充放电标志
}
}
}
else //试验未开始
{
if(ChnNo==0)
{
OutPut0=0;
}
else if(ChnNo==1)
{
OutPut1=0;
}
else if(ChnNo==2)
{
OutPut2=0;
}
else if(ChnNo==3)
{
OutPut3=0;
}
}
}
/****************************各通道充放电控制*********************
**入口:无
**出口:无
**调用函数:CtrlChnCharge(uint8 ChnNo);
**判断试验是否开始,对充放电通道控制,充/放电时间加1S、次数
**记录重放电标志
**此函数应1S钟调用1次
*****************************************************************/
void MainCtrlCharge(void)
{
uint8 ChnNo; //通道号
for(ChnNo=0;ChnNo<ConChargeChnNum;ChnNo++)
{
CtrlChnCharge(ChnNo);
}
}
/*********************复位指定通道的充放电信息********************
**入口:通道号(0-3)
**出口:无
**复位指定通道的充放电信息
*****************************************************************/
void resetChargePara(uint8 ChargeChnNo)
{
CtrlCharge[ChargeChnNo].second=0;
CtrlCharge[ChargeChnNo].minute=0;
CtrlCharge[ChargeChnNo].hour=0;
CtrlCharge[ChargeChnNo].FlagIsStTest=FALSE; //开始试验标志
CtrlCharge[ChargeChnNo].FlagIsCharge=FALSE; //充放电标志
CtrlCharge[ChargeChnNo].ChargeNum=0; //充电次数
CtrlCharge[ChargeChnNo].disChargeNum=0; //放电次数
}
/********************开始指定通道的充放电控制***********************
**入口:通道号(0-3)
**出口:无
*****************************************************************/
void startCtrlCharge(uint8 ChargeChnNo)
{
CtrlCharge[ChargeChnNo].FlagIsStTest=TRUE; //开始试验标志
CtrlCharge[ChargeChnNo].FlagIsCharge=TRUE; //开始充电
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -