|
extern int temp_value_; //聲明外部變量extern int temp_value; //聲明外部變量//數(shù)字?jǐn)?shù)組uchar Number[10] = { '0','1','2','3','4','5','6','7','8','9' };uchar SET_Temp = 25;uchar Counter = 0;uchar FLAG = 0; //標(biāo)志車窗狀態(tài)的標(biāo)志位 0:車窗關(guān)閉 1:車窗1擋 2:車窗2擋uchar FLAG_ = 0; //煙霧濃度標(biāo)志位 0:正常 1:異常uchar Start_FLAG = 1;//毫秒級(jí)延時(shí)函數(shù)static void Delay_ms(uint ms){ uint a, b; for (a = ms; a > 0; a--) for (b = 112; b > 0; b--);}//定時(shí)器初始化void Init_Timer0(void){ TMOD |= 0x01; //使用模式1,16位定時(shí)器,使用"|"符號(hào)可以在使用多個(gè)定時(shí)器時(shí)不受影響 TH0 = (65535 - 30000) / 256; //給定初值,50ms TL0 = (65535 - 30000) % 256; EA = 1; //總中斷打開 ET0 = 1; //定時(shí)器中斷打開 TR0 = 1; //定時(shí)器開關(guān)打開}//定時(shí)器0中斷服務(wù)函數(shù)void Timer0_isr(void) interrupt 1 using 1{ TH0 = (65535 - 30000) / 256; //給定初值,50ms TL0 = (65535 - 30000) % 256; Counter++; if (Counter <= 2 + abs(SET_Temp- temp_value)/3) //差值每超過3℃,PWM+1 { ENA = 1; } else { ENA = 0; if (Counter == 10) { Counter = 0; } }// if (Start_FLAG == 1)// {// LCD_Write_Char(11, 0, Number[temp_value_ / 10]); //車外溫度// LCD_Write_Char(12, 0, Number[temp_value_ % 10]); ////// LCD_Write_Char(4, 0, Number[temp_value / 10]); //車內(nèi)溫度// LCD_Write_Char(5, 0, Number[temp_value % 10]); ////// LCD_Write_Char(11, 1, Number[Read0832(0) / 100]); //煙霧// LCD_Write_Char(12, 1, Number[Read0832(0) % 100 / 10]); //// LCD_Write_Char(13, 1, Number[Read0832(0) % 10]); ////// LCD_Write_Char(4, 1, Number[SET_Temp / 10]); //設(shè)定溫度十位// LCD_Write_Char(5, 1, Number[SET_Temp % 10]); //設(shè)定溫度個(gè)位//// LCD_Write_Char(15, 1, Number[FLAG]); //車窗狀態(tài)// }}//事務(wù)處理void Headle(void){ //加 if (Up == 0) { Delay_ms(100); if (Up == 0) { if (SET_Temp < 50) { SET_Temp++; } } } //減 if (Down == 0) { Delay_ms(100); if (Down == 0) { if (SET_Temp > 10) { SET_Temp--; } } } //系統(tǒng)啟動(dòng)// if (Start == 0)// {// Delay_ms(100);// if (Start == 0)// {// Start_FLAG = ~Start_FLAG;// LCD_Clear();// }// } //如果車內(nèi)溫度低于設(shè)定溫度10°以上,開始制熱 if (temp_value < SET_Temp - 10) { //沒有煙霧的時(shí)候,開空調(diào)需要關(guān)閉窗戶,因?yàn)閷?duì)窗戶的控制,煙霧的優(yōu)先級(jí)最高,所以有煙霧時(shí),即使開空調(diào),窗戶也不關(guān)閉 if (FLAG_ == 0) //FLAG_ == 0說明沒有煙霧 { //如果車窗是1擋 if (FLAG == 1) { CC_1 = 0; CC_2 = 1; ENB = 1; Delay_ms(1000); //延時(shí)5秒 ENB = 0; FLAG = 0; //車窗關(guān)閉 } //如果車窗是2擋 if (FLAG == 2) { CC_1 = 0; CC_2 = 1; ENB = 1; Delay_ms(2000); //延時(shí)10秒 ENB = 0; FLAG = 0; //車窗關(guān)閉 } }// if(Start_FLAG==1)// { LCD_Write_Char(15, 0, 'H'); //液晶顯示制冷字符// } KT_1 = 1; KT_2 = 0;// ENA = 1; //電機(jī)開始轉(zhuǎn)動(dòng) } //如果車內(nèi)溫度高于設(shè)定溫度6°以上,開始制冷 if (temp_value > SET_Temp + 6 ) { //沒有煙霧的時(shí)候,開空調(diào)需要關(guān)閉窗戶,因?yàn)閷?duì)窗戶的控制,煙霧的優(yōu)先級(jí)最高,所以有煙霧時(shí),即使開空調(diào),窗戶也不關(guān)閉 if (FLAG_ == 0) { //如果車窗是1擋 if (FLAG == 1) { CC_1 = 0; CC_2 = 1; ENB = 1; Delay_ms(1000); //延時(shí)5秒 ENB = 0; FLAG = 0; //車窗關(guān)閉 } //如果車窗是2擋 if (FLAG == 2) { CC_1 = 0; CC_2 = 1; ENB = 1; Delay_ms(2000); //延時(shí)10秒 ENB = 0; FLAG = 0; //車窗關(guān)閉 } }// if (Start_FLAG == 1)// { LCD_Write_Char(15, 0, 'C'); //液晶顯示制熱字符// } KT_1 = 1; KT_2 = 0;// ENA = 1; //電機(jī)開始轉(zhuǎn)動(dòng) } //如果車內(nèi)溫度高于設(shè)定溫度0-6°以內(nèi),且沒有煙霧,開車窗要分擋位 if (( temp_value >= SET_Temp )&&( temp_value <= SET_Temp + 6) && FLAG_ == 0) { //0-3 車窗開1擋 if (temp_value >= SET_Temp&&temp_value <= SET_Temp + 3) { if (FLAG == 0) { CC_1 = 1; CC_2 = 0; ENB = 1; Delay_ms(1000); //延時(shí)1秒 ENB = 0; FLAG = 1; } if (FLAG == 2) { CC_1 = 0; CC_2 = 1; //反轉(zhuǎn)關(guān)窗 ENB = 1; Delay_ms(1000); //延時(shí)2秒 ENB = 0; FLAG = 1; } } //3-6 車窗開2擋 if (temp_value > SET_Temp+3) { if (FLAG == 0) { CC_1 = 1; CC_2 = 0; ENB = 1; Delay_ms(2000); //延時(shí)2秒 ENB = 0; FLAG = 2; } if (FLAG == 1) { CC_1 = 1; CC_2 = 0; ENB = 1; Delay_ms(1000); //延時(shí)1秒 ENB = 0; FLAG = 2; } } } //溫度正常,空調(diào)不啟動(dòng) if (temp_value >= SET_Temp - 10 && temp_value <= SET_Temp + 6) { KT_1 = 0; KT_2 = 0; //空調(diào)關(guān)閉// if (Start_FLAG == 1)// { LCD_Write_Char(15, 0, ' '); //液晶不顯示空調(diào)// } } //煙霧濃度較高,開兩檔車窗 if (Read0832(0) > 200 && FLAG != 2) { if (FLAG == 1) { CC_1 = 1; CC_2 = 0; ENB = 1; Delay_ms(1000);//延時(shí)1秒 ENB = 0; } if (FLAG == 0) { CC_1 = 1; CC_2 = 0; ENB = 1; Delay_ms(2000);//延時(shí)2秒 ENB = 0; } FLAG = 2; FLAG_ = 1; } //煙霧濃度正常 if (Read0832(0) <= 200) { FLAG_ = 0; }}/***************************************** 函數(shù)功能:主函數(shù) 傳入?yún)?shù):無(wú) 返回參數(shù):無(wú) 其它說明:無(wú)******************************************/void main(){ Init_DS18B20_(); LCD_Init(); Init_Timer0();//定時(shí)器初始化 do { ReadTemp_(); }while(temp_value_==85); do { ReadTemp(); }while(temp_value == 85); LCD_Write_String(1, 0, "IN:"); LCD_Write_String(7, 0, "OUT:"); LCD_Write_String(0, 1, "SET:"); LCD_Write_String(7, 1, "FOG:"); while(1) { ReadTemp_(); //車外溫度讀取 ReadTemp(); //車內(nèi)溫度讀取 Headle();// if (Start_FLAG == 1)// { LCD_Write_Char(11, 0, Number[temp_value_ / 10]); //車外溫度 LCD_Write_Char(12, 0, Number[temp_value_ % 10]); // LCD_Write_Char(4, 0, Number[temp_value / 10]); //車內(nèi)溫度 LCD_Write_Char(5, 0, Number[temp_value % 10]); // LCD_Write_Char(11, 1, Number[Read0832(0) / 100]); //煙霧 LCD_Write_Char(12, 1, Number[Read0832(0) % 100 / 10]); // LCD_Write_Char(13, 1, Number[Read0832(0) % 10]); // LCD_Write_Char(4, 1, Number[SET_Temp / 10]); //設(shè)定溫度十位 LCD_Write_Char(5, 1, Number[SET_Temp % 10]); //設(shè)定溫度個(gè)位 LCD_Write_Char(15, 1, Number[FLAG]); //車窗狀態(tài)// } } |
|