91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

格力空調控制系統

1)系統功能介紹

格力空調控制系統采用右側IAP15F2K61S2單片機作為主控制器,結合實驗平臺上的OLED、按鍵、紅外、GSMDS18B20以及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'){//TOTF則立即判斷第二個字母做出動作

            switch(GSM_Command[2])//根據OF,打開或關閉空調

            {

                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范圍為1630℃。

②按鍵控制空調


圖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){    //如果是制冷隨身感,則MODE3

                           Mode=3;

                           Write_24c08(0x01,Mode);

                    }else{

                           Mode=4;

                           Write_24c08(0x01,Mode);

                    }                  

                     }else if(Intelligent_Temp_Flag==1){//如果是制熱隨身感,則MODE4

                            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?< 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、格力空調控制系統\objects\air_conditioner.obj

?????文件??????25527??2020-05-23?16:36??20、格力空調控制系統\objects\Config.obj

?????文件??????10069??2020-05-23?16:36??20、格力空調控制系統\objects\ds18b20.obj

?????文件??????11688??2020-05-23?16:36??20、格力空調控制系統\objects\EEPROM.obj

?????文件???????8373??2020-05-22?23:30??20、格力空調控制系統\objects\key.obj

?????文件???????9509??2020-05-23?16:36??20、格力空調控制系統\objects\M_key.obj

?????文件??????22638??2020-05-23?16:36??20、格力空調控制系統\objects\oled.obj

?????文件?????107095??2020-05-25?17:23??20、格力空調控制系統\objects\template

?????文件????????996??2020-05-25?17:23??20、格力空調控制系統\objects\template.build_log.htm

?????文件??????30055??2020-05-25?17:23??20、格力空調控制系統\objects\template.hex

?????文件????????305??2020-05-25?17:23??20、格力空調控制系統\objects\template.lnp

............此處省略14個文件信息

評論

共有 條評論