欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
ht66f018合泰單片機暖風機的C語言源程序
[打印本頁]
作者:
736898032
時間:
2018-10-23 11:10
標題:
ht66f018合泰單片機暖風機的C語言源程序
0.png
(47.06 KB, 下載次數: 108)
下載附件
2018-10-23 15:14 上傳
單片機源程序如下:
/***********************************************
1 建立基本框架
CONFIG.H/IO.H/TARGET.C.H/ISR.C.H/KEY.C.H/AD.C.H
2 加入TEMP.C.H,顯示采樣溫度-----獲得外部信號 -判斷溫度顯示是否正常
3 確認按鍵操作有效
1 先設置默認華氏顯示86;FC轉換后,按鍵+-調整用戶溫度設置在15-30 (ADde 輸入電阻建議4.7K,否則不穩定)
4 對于一些變量---初始定義的時候最好把初始值也賦值進去了---這樣好
5 未斷過電,開關機后--模式,設定溫度不變
6 加入定時開機和定時關機的功能
方法:加入定時開機和定時關機標志位, 在定時按鍵里面判斷當前處于何種狀態,以及當前對按鍵的加減是對那方面的操作
在定時自減的結束時,根據標志位判斷是開機還是關機
7 加入調溫的連續加減程序 在按鍵的計時下面加入
8 按鍵鎖: 長按電源鍵2S進入啟動按鍵鎖功能
9 加入斷電記憶功能:
10 雙鍵加鎖
未能解決的問題: 首次上電那幾秒屏幕不可控
***********************************************/
#include "config.h"
__ByteBits g_TimerFlag;
__ByteBits g_TimerFlag1;
__ByteBits g_RunFlag;
__ByteBits g_Run1Flag;
__ByteBits g_Run2Flag;
uint8 BeepCount=0;
uint8 PowOnWaitCnt=50;
uint8 EnvironmentTempF;
uint8 EnvironmentTempC;
uint8 UserTempSetF;
uint8 UserTempSetC;
uint8 TSetTempCnt;
uint8 TkeySetLook;
uint8 UserTimeSetH;
uint8 TSetTimerCnt;
uint8 UserSetMode;
void BeepProc(void);
void InitRam()
{
g_TimerFlag.tByte=0;
g_TimerFlag1.tByte=0;
g_RunFlag.tByte=0;
g_Run1Flag.tByte=0;
g_Run2Flag.tByte=0;
TempErro.tByte=0;
UserTempSetF=86;
gb_FC_Flag=TempUintF;
gb_FirstWork_Flag=1; //首次上電,首次開機,蜂鳴器想2聲
}
void main(void)
{
_emi = 0;
Init_IO();
Init_Foc();
Init_Timer();
ISR_Parament_Init();
while(!_hto); //等待時鐘穩定
_emi = 1;
while(PowOnWaitCnt)
{
PowOnWaitCnt--;
DisCode[2] =0;
DisCode[1]=0;
DisCode[0]=0;
}
Init_AD(); //AD前期不初始化是為了初始顯示不亂碼
InitRam();
bBeepf=1;bBeepSf=1;BeepCount=0;
while(1)
{
_clrwdt();
if(gT_5ms_Flag){gT_5ms_Flag=0;LedDispPro();}
if(gT_10ms_Flag){ gT_10ms_Flag=0;TempADCollect(); KeyScan();KeyProcess();BeepProc();}
// if(gT_50ms_Flag){ gT_50ms_Flag=0;}
if(gT_100ms_Flag){ gT_100ms_Flag=0; Base100ms();}
if(gT_250ms_Flag) {gT_250ms_Flag=0;}
if(gT_500ms_Flag){gT_500ms_Flag=0;gb_500ms_Flag^=1;}
if(gT_1s_Flag)
{
gT_1s_Flag=0;
SysWorkCtrl();
Base1s();
Memory_LastState();
fun_eeprom_Write(0x00, UserTempSetC);
fun_eeprom_Write(0x01, UserSetMode); //寫入當前用戶狀態
}
}
}
/******************蜂鳴器的表達***********************************************
蜂鳴表達: bBeepf=1;bBeepSf=1;BeepCount=0;
長鳴3聲表達:bBeepf=1;bBeepLf=1;BeepCount=0;
蜂鳴3聲: bBeepf=1;bBeeAlf=1;BeepCount=0;
***************************************************************************/
void BeepProc(void)
{
if(bBeepSf)//蜂鳴
{ if(++BeepCount >= 10) { BeepCount=0; bBeepSf=0; bBeepf=0; } }
elseif(bBeepLf) //3聲
{ BeepCount++;
if(BeepCount==40) { bBeepf=0; }
elseif(BeepCount==80) { bBeepf=1; }
elseif(BeepCount==120) { bBeepf=0; }
else if(BeepCount==160) { bBeepf=1; }
elseif(BeepCount>=200) { BeepCount=0; bBeepf=0; bBeepLf=0; }
}
else if(bBeepAlf)//3聲
{ BeepCount++;
if(BeepCount==20) {bBeepf=0; }
elseif(BeepCount==40) { bBeepf=1; }
elseif(BeepCount==60) { bBeepf=0;}
else if(BeepCount==80) { bBeepf=0; }
elseif(BeepCount>=120)
{BeepCount=0; bBeepf=0; bBeepAlf=0;}
}
else { BeepCount =0;}
}
復制代碼
/*********************************************************************
暖風機的工作控制:
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<UserTempSetC)
{
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<UserTempSetC)
{
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<UserTempSetC)
{
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);
}
}
復制代碼
所有資料51hei提供下載:
91N-66F018.zip
(167.25 KB, 下載次數: 229)
2018-10-23 11:09 上傳
點擊文件名下載附件
暖風機原理圖&源代碼
下載積分: 黑幣 -5
作者:
admin
時間:
2018-10-23 15:19
好東東 樓主能分享下原理圖嗎?
作者:
Wangshenghuai
時間:
2018-11-16 22:31
好東西
作者:
Wangshenghuai
時間:
2018-11-16 22:35
很不錯
作者:
at366
時間:
2019-1-15 19:50
剛開始學,謝謝樓主分享
作者:
新攻城獅
時間:
2019-3-18 08:42
剛用合泰的芯片,過來學習一下。
作者:
liupam
時間:
2019-5-16 16:09
非常有價值的參考程度。
作者:
小小米
時間:
2019-9-17 09:12
贊一個
作者:
lux169
時間:
2019-9-25 13:54
下載了,謝謝
作者:
雙城
時間:
2019-12-6 10:18
好東西,剛好想學一下合泰
作者:
liupam
時間:
2020-5-20 16:47
非常感謝,因你,我學合泰大有進步!
作者:
meady
時間:
2020-6-19 23:23
過來學習一下合泰的芯片
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1