⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ctrlcharge.c

📁 采用PICC18编写的单片机源代码
💻 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 + -