合泰单片机点灯c语言程序,ht66f018合泰单片机暖风机的C语言源程序

/*********************************************************************

暖风机的工作控制:

1:加热有加热标志位和控制标志位的,标志位的开启并不代表实际的输出

2:根据用户设定模式判断,当前处于哪个状态

3:当前状态下,判断控制标志位是否开启

4:无论控制标志位是否开机,均开始计算时间

5:根据时间的大小来判定实际输出的时间

*********************************************************************/

#include "config.h"

void Base100ms(void);

static volatile unsigned char HEAT1OnTime     __attribute__ ((at(0x1b0)));

static volatile unsigned char FanOnTime       __attribute__ ((at(0x1b1)));

static volatile unsigned int  FanOffTime      __attribute__ ((at(0x1b2))); //当定义INT型时,占用两个地址,所以需要隔开

static volatile unsigned char HEAT1OffTime    __attribute__ ((at(0x1b4)));

static volatile unsigned char HEAT2OffTime    __attribute__ ((at(0x1b5)));

static volatile unsigned char HEAT2OnTime     __attribute__ ((at(0x1b6)));

static volatile unsigned char TimerSec        __attribute__ ((at(0x1b7)));

static volatile unsigned char TimerMin        __attribute__ ((at(0x1b8)));

static volatile unsigned char TimerHour       __attribute__ ((at(0x1b9)));

uint8   SysRunTime;                //机器开机计时秒

uint8   FanOffDelayTime=0;         //关机倒计时

uint8   TimeSelfCheck=50;          //开机那个0.5S可以自检

void Base100ms(void);

void Base1s(void);

void SysWorkCtrl(void);        //系统工作的控制(从全局把握系统的输出--不包含显示)

void FanCtrl(void);            //风机控制程序(开机及执行,关机,延迟30S关掉)

void HeatCtrl(void);           //加热管输出控制  加热什么时候开关的控制

void HiModeCtrl(void);         //高热模式控制

void LoModeCtrl(void);         //地热模式控制

void EcoModeCtrl(void);        //节能模式控制  是否打开即热的控制--有了相应的控制标志位,在计算时间

void SecTimerCnt(void);        //1S计时程序

void RunImpro(void);           //非正常工作程序I

void SwCtrl(void);

void DDRember(void);            //掉电记忆功能

void Base100ms(void)  //100MS计时

{

if(TSetTimerCnt){TSetTimerCnt-=1;if(!TSetTimerCnt){gb_TimerSet_Flag=0;}}

if(TSetTempCnt){TSetTempCnt-=1;if(!TSetTempCnt){gb_TempSet_Flag=0;}}

if(TkeySetLook){TkeySetLook-=1;}

if(TimeSelfCheck){TimeSelfCheck-=1;}

if(gb_Fan_Flag)              //风扇的计时

{

FanOffTime=0;

if(FanOnTime<=200)  {FanOnTime+=1;} //风扇开启,累计计时20S

}

else

{

FanOnTime=0;

if(FanOffTime<=60000) {FanOffTime+=1;}  //风扇关机的累计计时

}

if(gb_HEAT1_Flag)    //加热的计时必须以实际加热开始计时,而不是标志位

{

HEAT1OffTime=0;

if(HEAT1OnTime<200)            { HEAT1OnTime+=1;        }

}

else

{

HEAT1OnTime=0;

if(HEAT1OffTime<200)        { HEAT1OffTime+=1;        }

}

if(gb_HEAT2_Flag)   //加热的计时必须以实际加热开始计时,而不是标志位

{

HEAT2OffTime=0;

if(HEAT2OnTime<200)     { HEAT2OnTime+=1;  }

}

else

{

HEAT2OnTime=0;

if(HEAT2OffTime<200)     { HEAT2OffTime+=1;  }

}

}

void Base1s(void)   //1S的计时

{

if(FanOffDelayTime)

{

FanOffDelayTime-=1;

}

if(UserTimeSetH)        //定时的计数

{

TimerSec+=1;

if(TimerSec >= 59)

{

TimerSec=0;

TimerMin+=1;

if(TimerMin>=UserTimeSetH)

{

if(gb_PowerOn_Flag&&gb_TimeOff_Flag)  //此位置1 ,说明处于开机状态

{

gb_TimeOff_Flag=0;

UserTimeSetH=0;         //加这句是为了把时间计数的参数全部清0

gb_Timer_Flag=0;

gb_PowerOn_Flag=0;  //关机

bBeepf=1;bBeepSf=1;BeepCount=0;

}

else if((!gb_PowerOn_Flag)&&gb_TimeOn_Flag)

{

gb_TimeOn_Flag=0;

UserTimeSetH=0;

gb_Timer_Flag=0;

gb_PowerOn_Flag=1;  //开机

bBeepf=1;bBeepSf=1;BeepCount=0;

}

}

}

}

else

{

TimerSec=0;

TimerMin=0;

TimerHour=0;

}

}

void SysWorkCtrl(void)  //分非正常模式和正常模式

{

if(TempErro.tByte)//非正常模式下的输出

{

if(gb_HEAT1Ctrl_Flag||gb_HEAT2Ctrl_Flag)

{

FanOffDelayTime=60;   //关机60S的延迟

}

gb_HEAT1Ctrl_Flag=0;

gb_HEAT2Ctrl_Flag=0;

}

else  //正常模式的输出

{

if(gb_PowerOn_Flag)

{

if(UserSetMode == HIMODE){HiModeCtrl();}

else if(UserSetMode == LOMODE){LoModeCtrl();}

else if(UserSetMode == ECMODE){EcoModeCtrl();}

}

else

{

if(gb_HEAT1Ctrl_Flag||gb_HEAT2Ctrl_Flag)

{

FanOffDelayTime=60;   //关机60S的延迟

}

gb_HEAT1Ctrl_Flag=0;

gb_HEAT2Ctrl_Flag=0;

}

}

FanCtrl();

HeatCtrl();

}

void HiModeCtrl(void) //高档--对加热1 加热2 风扇的 控制

{

if(EnvironmentTempC>UserTempSetC)  //温度中间状态 - 跟随上一个状态

{

if(gb_HEAT1Ctrl_Flag||gb_HEAT2Ctrl_Flag)

{

FanOffDelayTime=60;   //关机60S的延迟

}

gb_HEAT1Ctrl_Flag=0;

gb_HEAT2Ctrl_Flag=0;

}

else if(EnvironmentTempC

{

gb_HEAT1Ctrl_Flag=1;

gb_HEAT2Ctrl_Flag=1;

}

}

void LoModeCtrl(void)  //低档--对加热1 加热2 风扇的 控制

{

gb_HEAT2Ctrl_Flag=0;

if(EnvironmentTempC>UserTempSetC)

{

if(gb_HEAT1Ctrl_Flag)

{

FanOffDelayTime=60;

}

gb_HEAT1Ctrl_Flag=0;

}

else if(EnvironmentTempC

{

gb_HEAT1Ctrl_Flag=1;

}

}

void EcoModeCtrl(void)  //节能模式 低挡开,高档来回开

{

gb_HEAT1Ctrl_Flag=1;

if( EnvironmentTempC > UserTempSetC )

{

if(gb_HEAT2Ctrl_Flag)

{

FanOffDelayTime=60;

}

gb_HEAT2Ctrl_Flag=0;

}

else if(EnvironmentTempC

{

gb_HEAT2Ctrl_Flag=1;

}

}

void FanCtrl(void)  //风扇开启的前提是开机/关机后的延迟时间60S/温度达到设定温度后,加热停止工作,风扇再转60S

{

if(gb_PowerOn_Flag||FanOffDelayTime||gb_HEAT1Ctrl_Flag||gb_HEAT2Ctrl_Flag)

{

gb_Fan_Flag=1;  //次标志位开启,及代表风扇已经再转,同时可以计时了

FANON();

}

else

{

gb_Fan_Flag=0;

FANOFF();

}

}

void HeatCtrl(void)

{

if(gb_HEAT1Ctrl_Flag)    //低档HEAT1加热功能的开启  开条件(风扇3S和其关闭3S以上)

{

if(gb_HEAT1_Flag)  { HEAT1ON();}

else if((FanOnTime>=30)&&(HEAT1OffTime>=30)) //第一次开启加热标志位

{

gb_HEAT1_Flag=1;

HEAT1ON();

}

else

{

gb_HEAT1_Flag=0;

HEAT1OFF();

}

}

else if(((gb_HEAT1_Flag==1)&&(HEAT2OffTime>=30))||(gb_HEAT1_Flag==0) )   //低档加热功能的关闭  关条件 -- 加热1在开启中同时加热2关闭3S以上——加热1已经关闭

{

gb_HEAT1_Flag=0;

HEAT1OFF();

}

if(gb_HEAT2Ctrl_Flag)   //高挡HEAT2即热功能的开启和关闭 (加热1开3S以上和加热2关3S以上--加热2已开启)

{

if(gb_HEAT2_Flag)   { HEAT2ON(); }

else if((HEAT1OnTime>=30)&&(HEAT2OffTime>=30))

{

gb_HEAT2_Flag=1;

HEAT2ON();

}

}

else

{

gb_HEAT2_Flag=0;

HEAT2OFF();

}

}

void DDRember(void)

{

if(gb_PowerOn_Flag)

{

fun_eeprom_Write(0x00, UserTempSetC);

fun_eeprom_Write(0x01, UserSetMode);

}

else

{

UserSetMode=fun_eeprom_Read(0x01);

UserTempSetC=fun_eeprom_Read(0x00);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值