資源簡介
格力空調控制系統
(1)系統功能介紹
格力空調控制系統采用右側IAP15F2K61S2單片機作為主控制器,結合實驗平臺上的OLED、按鍵、紅外、GSM、DS18B20以及EEPROM模塊進行工作,本系統采用兩種方式控制空調,且增設了一種智能調溫模式:
第一種方式,GSM控制空調,主要用于遠程控制。當夏季或冬季來臨時,室內溫差變化很大,會對居家的舒適度產生影響。即便人們在外時,也可直接通過GSM模塊遠程對家中空調進行控制,提前打開,將室溫調節到舒適的狀態,回到家中便不用再經受等待期,而且發送信息控制模塊時,也會收到相應的回執信息,給人提示,更人性化也更方便。
第二種方式,按鍵控制空調,主要用于室內控制。當人們回到家中,再使用手機控制空調會顯得有些不夠直接與便捷,因此增設按鍵控制空調的方式。而按鍵控制方式比GSM遠程控制方式多添加了智能調溫的模式,其原理是室溫與人體周圍的溫度有些許差異,因此該模式可根據人身體周圍溫度,自動改變與設定空調溫度,將周圍溫度迅速調整到人體舒適的狀態。
而且這兩種方式是相互配合使用的,并不是獨立存在的控制方式,因此更顯得智能化。具體功能實現方案如下圖所示:
圖3-88 格力空調控制系統功能實現方案
(2)系統硬件設計
圖3-89 系統整體硬件電路設計
為了對格力空調控制系統的硬件電路有更加直觀的了解,本實驗將所有之前介紹過的單獨的應用模塊電路進行整合,設計出本系統完整的硬件電路,具體單個模塊電路功能可再參考之前的實驗,這里不作詳細介紹。
(3)系統軟件設計
本系統的軟件設計主要分為三大部分:GSM控制空調、按鍵控制空調以及主程序實現全部功能,下面分別介紹這三部分具體實現的步驟。
①GSM控制空調
圖3-90 GSM控制流程圖
本部分代碼與GSM提高篇實驗的串口判斷數據方法相同,因此僅列舉核心代碼串口數據解析函數:
// 短信內容解析 void ParseGSMData() { if(GetCommand_flag==1){ //如果收到短信控制指令 GetCommand_flag=0; //將獲取指令標志位清零,避免多次循環,提高效率 Clear_flag=0; if(GSM_Command[1]=='T'){//為TO或TF則立即判斷第二個字母做出動作 switch(GSM_Command[2])//根據O或F,打開或關閉空調 { case 'O':Power_state=1;//電源標志位為1 Mode=Read_24c08(0x01); Temp_SET=Read_24c08(0x02); Intelligent_Temp_Flag=0;//由于GSM是遠程控制,因此不考慮隨身感的情況,所以每次開啟空調都會將隨身感標志位清零 if(Mode==1||Mode==3){Mode=1;Mode_SET=Cooling;}//隨身感模式是基于制冷制熱的自動調節,只需獲取其中制冷制熱模式相關信息即可 else {Mode=2;Mode_SET=Heating;} Power(Power_state); //顯示開機 SendBack_OK(); //回執OK send(Temp_SET,Mode_SET,Power_state);//打開空調 Clear_flag=0;//將清屏標志位開啟,以繼續開機后的清屏 break; case 'F':Power_state=2;//關機狀態 SendBack_OK(); send(20,Mode_SET,0); break; default:break; } } if(Power_state==1){ //空調確認開機,可對模式與溫度進行遠程設置 if(GSM_Command[1]=='M'){//根據M,確定為設置模式,模式1制冷,模式2制熱,并發送回執信息 switch(GSM_Command[5]) { case '1':Mode=1; Write_24c08(0x01,Mode); Mode_SET=Cooling; send(Temp_SET,Mode_SET,Power_state); SendBack_OK(); break; case '2':Mode=2; Write_24c08(0x01,Mode); Mode_SET=Heating; send(Temp_SET,Mode_SET,Power_state); SendBack_OK(); break; default:break; } } if(GSM_Command[1]=='S'){ //根據S,確定為設置溫度,可設置16-30℃ Temp_SET=(GSM_Command[4]-'0')*10 (GSM_Command[5]-'0'); Write_24c08(0x02,Temp_SET); send(Temp_SET,Mode_SET,1); SendBack_OK(); } }else//如果空調未打開則發送錯誤信息 SendBack_Error(); } } |
首先,初始化GSM模塊后,串口中斷打開,準備接收從手機端發來的有效控制信息。如果單片機判定該信息有效,則進入下一環節,詢問空調是否開機,如果沒有開機,則回執: ‘The air conditioner is power-off.’,提示用戶空調未開機,不可進行有效操作。如果詢問結果為,空調已開機,則可以通過相應指令來遠程控制空調的模式切換、溫度調節以及關機。有效指令格式如下:$TO;用于打開空調,$TF;用于關閉空調,$MODEx用于設置空調模式,MODE1為制冷模式、MODE2為制熱模式,$SETxx用于設定空調溫度,溫度xx范圍為16~30℃。
②按鍵控制空調
圖3-91 按鍵控制流程圖
本部分代碼僅列舉核心部分,鍵值處理以及智能調溫模式的算法函數:
switch(KeyValue) { case 'O': KEY_BEEP(); /*開關機按鍵*/ Clear_flag=0; if(Power_state==1){ //如果當前狀態為開機狀態,則將空調關機 Power_state=2; send(20,Mode_SET,0); }else{ //否則打開空調 Mode=Read_24c08(0x01);//讀取模式與溫度 Temp_SET=Read_24c08(0x02); if(Mode==1||Mode==3) Mode_SET=Cooling; else Mode_SET=Heating; if(Mode==3||Mode==4) //如果是隨身感模式則將隨身感標志位置1 Intelligent_Temp_Flag=1; else Intelligent_Temp_Flag=0; Power_state=1; Display_Power(Power_state); send(Temp_SET,Mode_SET,Power_state); Clear_flag=0; //將清屏標志位開啟,以繼續開機后的清屏 } break; case 'M': if(Power_state==1){//開機后,制冷制熱模式切換 Clear_flag=0; KEY_BEEP(); Intelligent_Temp_Flag=0; if(Mode_SET==Cooling){ Mode=2; Write_24c08(0x01,Mode); Mode_SET=Heating; send(Temp_SET,Mode_SET,Power_state); }else if(Mode_SET==Heating){ Mode=1; Write_24c08(0x01,Mode); Mode_SET=Cooling; send(Temp_SET,Mode_SET,Power_state); } } break; case 'T': if(Power_state==1){ //隨身感模式進入與退出 Clear_flag=0; KEY_BEEP(); if(Intelligent_Temp_Flag==0){ Intelligent_Temp_Flag=1; Temp_Control=Temp_SET; if(Mode_SET==Cooling){ //如果是制冷隨身感,則MODE為3 Mode=3; Write_24c08(0x01,Mode); }else{ Mode=4; Write_24c08(0x01,Mode); } }else if(Intelligent_Temp_Flag==1){//如果是制熱隨身感,則MODE為4 Clear_flag=0; Intelligent_Temp_Flag=0; if(Mode_SET==Cooling){ Mode=1; Write_24c08(0x01,Mode); }else{ Mode=2; Write_24c08(0x01,Mode); Intelligent_Temp_Flag=0; } } } break; case ' ': if(Power_state==1){//開機后,增溫并保存到EEPROM中 KEY_BEEP(); Temp_SET ; Write_24c08(0x02,Temp_SET); if(Intelligent_Temp_Flag!=1) send(Temp_SET,Mode_SET,1); } break; case '-': if(Power_state==1){//開機后,降溫并保存到EEPROM中 KEY_BEEP(); Temp_SET--; Write_24c08(0x02,Temp_SET); if(Intelligent_Temp_Flag!=1) send(Temp_SET,Mode_SET,1); } break; default: break; } /*隨身感模式的自動溫度控制(調溫區間為設定溫度的正負三度)*/ void Temp_Adjust() { if(Adjust_Flag==1) { Temp_difference=Temp*0.1-Temp_SET; if(Temp_difference>=3) Temp_Control=Temp_SET-3; else if(Temp_difference>=2&&Temp_difference<3) Temp_Control=Temp_SET-2; else if(Temp_difference>=1&&Temp_difference<2) Temp_Control=Temp_SET-1; else if(Temp_difference<=-1&&Temp_difference>-2) Temp_Control=Temp_SET 1; else if(Temp_difference<=-2&&Temp_difference>-3) Temp_Control=Temp_SET 2; else if(Temp_difference<=-3) Temp_Control=Temp_SET 3; else Temp_Control=Temp_SET; Adjust_Flag=0; if(Temp_Control!=Last_Temp_Control){//當前調解溫度與上次對比,如相同則不進行調溫,如不同,則設定新的溫度值 Last_Temp_Control=Temp_Control; send(Temp_Control,Mode_SET,1); } } } |
首先,初始化定時器T0、T1,分別用于檢測按鍵與自動調溫。單片機定時掃描按鍵并讀取鍵值,如果無鍵按下,則等待;如果有鍵按下,則判斷是否開機,空調已開機則全部按鍵的功能都可實現,空調未開機則只能實現開機動作??照{開機后,會自動讀取上次EEPROM中存儲的有關模式和溫度的數據,自動設定為上次的狀態。相關按鍵的功能如下:按鍵‘O’用于空調開關機;
按鍵‘M’用于設定空調的制冷/制熱模式;
按鍵‘T’用于進入/退出智能調溫模式;
按鍵‘ ’/‘-’用于空調增溫/降溫。
表3-16 按鍵在矩陣鍵盤位置
1 |
2 |
3 |
模式 |
4 |
5 |
6 |
智能調溫 |
7 |
8 |
9 |
|
0 |
開/關 |
C |
- |
代碼片段和文件信息
#include?“air_conditioner.h“
sbit Irout=P4^4;//控制紅外線IO口位定義
unsigned?char?send_code[67]?=?{1001001000010000000001000000101001011101000000001000000000000000111?};//有效的67位數據
?void?Delay560us() //560us延時
{
uchar?i?j;
_nop_();
i?=?7;
j?=?2;
do
{
while?(--j);
}?while?(--i);
}
void?Delay4500us()?//4.5MS延時
{
uchar?i?j;
_nop_();
_nop_();
i?=?49;
j?=?101;
do
{
while?(--j);
}?while?(--i);
}
void?Delay20ms() //20ms延時
{
unsigned?char?i?j?k;
_nop_();
i?=?1;
j?=?218;
k?=?35;
do
{
do
{
while?(--k);
}?while?(--j);
}?while?(--i);
}
void?khz_half_T(uint?num)//38KHZ載波,占空比為1:2?半個周期13us
{?
uchar?i;
???for(;num>0;num--)???
{?
??i?=?33;
while?(--i);
????Irout=~Irout;?//取反
}
}
void?send_0(void)????//發送0
{???
???khz_half_T(42);?????//560us脈沖?????
???Irout=1;????
???Delay560us();? //560us高電平
}?
?void?send_1(void)??//發送1?
{???
???khz_half_T(42)?;????//560us脈沖
???Irout=1;????
???Delay560us();????//1125us高電平
???Delay560us();????
???Delay560us();?
}?
?void?send_leadcode(void)?//發送引導碼?
?{?
???khz_half_T(690)?;???
?Irout=1;??????
?Delay4500us();?
?}?
?void?set_1_0(int?i?uchar?one_zore)//對應功能位置1置0
?{
?send_code[i]?=?one_zore;
?}
?
?void?send(uchar?temprature?uchar?mode?uchar?on_off)??//設定制冷制熱與調溫,發送全部數據碼
{??
char?temp?=?0;
char?mask?=?0;
int?i_count?=?0;
set_1_0(3on_off);//開關機
switch(mode)
{
case?5:set_1_0(21);set_1_0(10);set_1_0(00);break;//制冷
case?2:set_1_0(20);set_1_0(10);set_1_0(01);break;//制熱
}
switch(temprature)//溫度調節
{
case?16:set_1_0(80);set_1_0(90);set_1_0(100);set_1_0(110);break;
case?17:set_1_0(81);set_1_0(90);set_1_0(100);set_1_0(110);break;
case?18:set_1_0(80);set_1_0(91);set_1_0(100);set_1_0(110);break;
case?19:set_1_0(81);set_1_0(91);set_1_0(100);set_1_0(110);break;
case?20:set_1_0(80);set_1_0(90);set_1_0(101);set_1_0(110);break;
case?21:set_1_0(81);set_1_0(90);set_1_0(101);set_1_0(110);break;
case?22:set_1_0(80);set_1_0(91);set_1_0(101);set_1_0(110);break;
case?23:set_1_0(81);set_1_0(91);set_1_0(101);set_1_0(110);break;
case?24:set_1_0(80);set_1_0(90);set_1_0(100);set_1_0(111);break;
case?25:set_1_0(81);set_1_0(90);set_1_0(100);set_1_0(111);break;
case?26:set_1_0(80);set_1_0(91);set_1_0(100);set_1_0(111);break;
case?27:set_1_0(81);set_1_0(91);set_1_0(100);set_1_0(111);break;
case?28:set_1_0(80);set_1_0(90);set_1_0(101);set_1_0(111);break;
case?29:set_1_0(81);set_1_0(90);set_1_0(101);set_1_0(111);break;
case?30:set_1_0(80);set_1_0(91);set_1_0(101);set_1_0(111);break;
}
temp?=?mode?-?1?+?temprature?-?16?+?5;//最后四位校驗碼
mask?=?temp;
??for?(i_count=0;?i_count<8;?i_count++) //校驗碼低四位逆序
??{?
temp?=?(temp?<1)?+?(mask?&?1);
mask?>>=?1;
??}
??temp?=?temp?>>?4;
??if(on_off?==?0)
{
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3728??2020-05-22?15:43??20、格力空調控制系統\air_conditioner.c
?????文件????????439??2020-05-22?15:43??20、格力空調控制系統\air_conditioner.h
?????文件???????5779??2020-05-23?15:02??20、格力空調控制系統\Config.c
?????文件????????973??2020-05-23?11:49??20、格力空調控制系統\Config.h
?????文件???????1818??2020-02-14?11:42??20、格力空調控制系統\ds18b20.c
?????文件????????287??2020-05-22?12:19??20、格力空調控制系統\ds18b20.h
?????文件???????2083??2020-05-22?12:18??20、格力空調控制系統\EEPROM.c
?????文件????????332??2020-05-22?12:19??20、格力空調控制系統\EEPROM.h
?????文件???????7589??2020-05-23?16:36??20、格力空調控制系統\Listings\air_conditioner.lst
?????文件??????10685??2020-05-23?16:36??20、格力空調控制系統\Listings\Config.lst
?????文件???????4174??2020-05-23?16:36??20、格力空調控制系統\Listings\ds18b20.lst
?????文件???????4697??2020-05-23?16:36??20、格力空調控制系統\Listings\EEPROM.lst
?????文件???????2092??2020-05-22?23:30??20、格力空調控制系統\Listings\key.lst
?????文件???????3338??2020-05-23?16:36??20、格力空調控制系統\Listings\M_key.lst
?????文件??????12073??2020-05-23?16:36??20、格力空調控制系統\Listings\oled.lst
?????文件??????14748??2020-05-25?17:23??20、格力空調控制系統\Listings\template.lst
?????文件??????71006??2020-05-25?17:23??20、格力空調控制系統\Listings\template.m51
?????文件???????1371??2020-05-23?16:02??20、格力空調控制系統\M_key.c
?????文件????????385??2020-05-23?11:24??20、格力空調控制系統\M_key.h
?????文件??????13343??2020-05-23?16:36??20、格力空調控制系統\ob
?????文件??????25527??2020-05-23?16:36??20、格力空調控制系統\ob
?????文件??????10069??2020-05-23?16:36??20、格力空調控制系統\ob
?????文件??????11688??2020-05-23?16:36??20、格力空調控制系統\ob
?????文件???????8373??2020-05-22?23:30??20、格力空調控制系統\ob
?????文件???????9509??2020-05-23?16:36??20、格力空調控制系統\ob
?????文件??????22638??2020-05-23?16:36??20、格力空調控制系統\ob
?????文件?????107095??2020-05-25?17:23??20、格力空調控制系統\ob
?????文件????????996??2020-05-25?17:23??20、格力空調控制系統\ob
?????文件??????30055??2020-05-25?17:23??20、格力空調控制系統\ob
?????文件????????305??2020-05-25?17:23??20、格力空調控制系統\ob
............此處省略14個文件信息
- 上一篇:公交車GPS報站系統設計
- 下一篇:modbus 主機源碼
評論
共有 條評論
相關資源
- LC-PWM-RGB(RGB LED燈 調色調光器 PWM控制
- DSP28335永磁同步電機控制
- 基于STM32的嵌入式flash讀寫控制
- stm32 +w5500 裸機 遠程升級 自動dns pi
- 永磁同步電機的FOC控制算法
- dsp控制永磁同步電機
- 一個模糊PID溫度控制算法源代碼
- “變頻”智能水位控制電路
- c語言實現火車訂票系統(控制臺)源
- 485通信控制3路相位差120°PWM輸出
- 步進電機控制(源碼+文檔)
- 校園閑置物品管理系統.c(控制臺)
- pid控制電機
- 職工信息管理系統源碼(控制臺)
- C語言推箱子win控制臺
- C++餐飲管理系統源碼(控制臺)
- C++通訊錄管理系統源碼(控制臺)
- 簡單職工管理系統(控制臺源碼+txt數
- C++商店收銀系統(控制臺)
- 單片機控制繞線機.c
- c++ 掃雷游戲源碼(控制臺)
- 俄羅斯方塊(c++控制臺代碼)
- 電機控制例程
- 五子棋游戲源碼(控制臺)
- C++貪吃蛇控制臺小游戲代碼
- 五子棋c++控制臺代碼
- 藍牙控制LED
- 門禁控制系統實驗-V20170317
- 基于LPC2132的蛇形機器人前端執行機構
- VC遠程控制代碼集合