客車空調(diào)控制系統(tǒng)
《客車空調(diào)控制系統(tǒng)》由會(huì)員分享,可在線閱讀,更多相關(guān)《客車空調(diào)控制系統(tǒng)(28頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、文檔供參考,可復(fù)制、編制,期待您的好評(píng)與關(guān)注! 客車空調(diào)系統(tǒng) ●?空調(diào)系統(tǒng)的組成 空調(diào)系統(tǒng)主要由壓縮機(jī)、冷凝器、蒸發(fā)器、膨脹閥、干燥儲(chǔ)液器及管路等組成 ● 空調(diào)制冷原理 1)?用戶按操作程序啟動(dòng)汽車空調(diào)系統(tǒng)之后,壓縮機(jī)在發(fā)動(dòng)機(jī)帶動(dòng)下開始工作,驅(qū)使制冷劑(R134a,一種環(huán)保型制冷劑,不會(huì)破壞臭氧層、無毒性、無刺激、不燃燒、無腐蝕性)在密封的空調(diào)系統(tǒng)中循環(huán)流動(dòng),壓縮機(jī)將氣態(tài)制冷劑壓縮成高溫高壓的制冷劑氣體后排出壓縮機(jī)。 2)?高溫高壓制冷劑氣體經(jīng)管路流入冷凝器后,在冷凝器內(nèi)散熱、降溫,冷凝成高溫高壓的液態(tài)制冷劑流出。 3)?高溫高壓液態(tài)制冷劑經(jīng)管路進(jìn)入干燥儲(chǔ)液器內(nèi),經(jīng)過干
2、燥、過濾后流進(jìn)膨脹閥。 4)?高溫高壓液態(tài)制冷劑經(jīng)膨脹閥節(jié)流,狀態(tài)發(fā)生急劇變化,變成低溫低壓的液態(tài)制冷劑。 5)?低溫低壓液態(tài)制冷劑立即進(jìn)入蒸發(fā)器內(nèi),在蒸發(fā)器內(nèi)吸收流經(jīng)蒸發(fā)器的空氣熱量,使空氣溫度降低,吹出冷風(fēng),產(chǎn)生制冷效果,制冷劑本身因吸收了熱量而蒸發(fā)成低溫低壓的氣態(tài)制冷劑。 6)?低溫低壓的氣態(tài)制冷劑經(jīng)管路被壓縮機(jī)吸入,進(jìn)行壓縮,進(jìn)入下一個(gè)循環(huán),只要壓縮機(jī)連續(xù)工作,制冷劑就在空調(diào)系統(tǒng)中連續(xù)循環(huán),產(chǎn)生制冷效果;壓縮機(jī)停止工作,空調(diào)系統(tǒng)內(nèi)制冷劑隨之停止流動(dòng),不產(chǎn)生制冷效果。 ● 電路控制原理系統(tǒng)框架 二.控制面板部分 1. 硬件部分 a.電源電路 工作原理:R
3、/Y端口為24V電源輸入一路經(jīng)自恢復(fù)保險(xiǎn)PT3二極管D8限流電阻R38穩(wěn)壓二極管V1輸出穩(wěn)定12V電源為開關(guān)電路供電,另一路經(jīng)繼電器KA6輸出24v給驅(qū)動(dòng)電路供電,經(jīng)二極管D12限流電阻R39到三端穩(wěn)壓器LM7805的輸入端經(jīng)穩(wěn)壓后為中央處理器(MCU)和EEROM提供5v電壓。 b.開關(guān)機(jī)電路 工作原理:(1) 當(dāng)K7按下時(shí)基集成電路NE555P的6腳(閥值)電壓高于6v ,3腳(輸出)就輸出低電平0v 到電源電路三極管Q2的基極,Q2截止繼電器失去供電而斷開供電實(shí)現(xiàn)關(guān)機(jī) (2)當(dāng)K1按下時(shí)基集成電路NE555P的2腳(觸發(fā))電壓接地0v ,3腳(輸出)就輸出高電
4、平12-0.8=11.2v 到電源電路三極管Q2的基極,Q2導(dǎo)通繼電器恢復(fù)供電而接通供電實(shí)現(xiàn)關(guān)機(jī) c.驅(qū)動(dòng)電路 d.中央處理器(MCU) 工作原理:當(dāng)中央處理器:供電5v,復(fù)位電路,時(shí)鐘電路這3個(gè)條件成立中央處理器就能正常工作。 e.顯示及按鍵電路 2. 軟件部分 ● 軟件控制流程圖 ● 軟件組成 1. 頭文件(STC12C5410AD.H,define_i/o.h ,main.h) 2. 按鍵檢測(cè)與處理(按鍵檢測(cè)端口與顯示LED端口公用) 3. 故障處理子程序 4. 溫度檢測(cè),理子程序 5. 顯示子程序 6. 強(qiáng)冷子程序 7. 工作時(shí)間記錄子程
5、序 8. 抗干擾處理 (看門狗:當(dāng)系統(tǒng)非正常進(jìn)入死循環(huán)不能每隔一段時(shí)間把看門狗清零計(jì)時(shí)器溢出把系統(tǒng)復(fù)位。形象一點(diǎn)就是必須在狗餓之前喂一次狗(清零)要不然狗會(huì)以為你亂了(程序跑飛)就會(huì)叫醒你(系統(tǒng)復(fù)位進(jìn)入正常) ●功能要求 功能說明: 1、ON鍵。按ON鍵,接通控制面板電源,數(shù)字顯示回風(fēng)傳感器感應(yīng)溫度值。 2、溫度設(shè)定與改變(接通控制面板電源后可操作) 2.1、缺省溫度設(shè)定為24℃。溫度設(shè)定值范圍在16~27℃改變。 2.2、按下△一次,溫度設(shè)定值升高1℃,顯示2秒鐘。 2.3、按下▽一次,溫度設(shè)定值降低1℃,顯示2秒鐘。 2.4、溫度設(shè)定值顯示2秒鐘后,轉(zhuǎn)
6、換顯示車內(nèi)溫度值,車內(nèi)溫度顯示范圍為12~60℃(精度為0.5℃)。車內(nèi)溫度低于12℃顯示LO,車內(nèi)溫度高于60℃顯示HI。 3、制冷鍵控制功能。 3.1、制冷鍵只有在蒸發(fā)風(fēng)機(jī)工作的情況下才能接通。 3.2、在初始狀態(tài)下,按制冷鍵一次,制冷指示燈亮,"制冷"輸出為正,允許最大感性負(fù)載1A。 3.3、在初始狀態(tài)下,按制冷鍵兩次,制冷指示燈熄滅,"制冷"輸出為零。 3.4、再次啟動(dòng)時(shí),恢復(fù)初始狀態(tài)。 4、新風(fēng)鍵控制功能。 4.1、按新風(fēng)鍵一次(車內(nèi)溫度≤27℃),新風(fēng)指示燈亮,"新風(fēng)控制"輸出為正。 4.2、按新風(fēng)鍵兩次,新風(fēng)指示燈熄滅,"新風(fēng)控制"輸出為零
7、。 5、壓縮機(jī)啟??刂乒δ?。 5.1、左右除霜傳感器感應(yīng)溫度≥3.5℃時(shí),制冷輸出為正;左右除霜傳感器感應(yīng)溫度≤2℃,制冷輸出為零。 5.2、車內(nèi)溫度超過設(shè)定值0.5℃時(shí),制冷輸出為正;車內(nèi)溫度低于設(shè)定值1.5℃時(shí),制冷輸出為零。 6、風(fēng)速鍵調(diào)節(jié)風(fēng)量功能。 6.1、在初始狀態(tài)下,按動(dòng)風(fēng)速鍵一次,蒸發(fā)風(fēng)機(jī)啟動(dòng),風(fēng)量為低速,允許最大感性負(fù)載1A,低速指示燈亮。 6.2、在初始狀態(tài)下,按動(dòng)風(fēng)速鍵兩次,蒸發(fā)風(fēng)機(jī)啟動(dòng),風(fēng)量為中速,允許最大感性負(fù)載1A,中速指示燈亮。 6.3、在初始狀態(tài)下,按動(dòng)風(fēng)速鍵三次,蒸發(fā)風(fēng)機(jī)啟動(dòng),風(fēng)量為高速,允許最大感性負(fù)載1A,高速指示燈亮。
8、 6.4、連續(xù)按動(dòng)風(fēng)速鍵,風(fēng)量按照:低→中→高→低 循環(huán)。 6.5、再次啟動(dòng)時(shí),恢復(fù)初始狀態(tài)。 6.6、在通風(fēng)狀態(tài)下,通風(fēng)輸出(13#)線一直輸出高電位,允許最大感性負(fù)載1A(主要驅(qū)動(dòng)空調(diào)無電瓶發(fā)電機(jī)供電繼電器),注意:在風(fēng)速轉(zhuǎn)換過程中,此輸出不得跳動(dòng),保持平穩(wěn),只有在按OFF鍵后才失電。 7、控制面板總負(fù)載不超過3A。 8、OFF鍵。按動(dòng)OFF鍵,關(guān)閉控制面板電源。 9、其他功能。 9.1、在空調(diào)系統(tǒng)出現(xiàn)高低壓故障時(shí),按制冷鍵一次,制冷輸出(4#)仍為高電位(通過電器盒繼電器禁止壓縮機(jī)啟動(dòng)),用發(fā)光二極管閃動(dòng)顯示Er1,閃動(dòng)頻率為1HZ(1秒鐘1次)。 9.2
9、、溫度傳感器短路,用發(fā)光二極管閃動(dòng)顯示Er2,閃動(dòng)頻率1HZ(1秒鐘1次)。 9.3、溫度傳感器斷路,用發(fā)光二極管閃動(dòng)顯示Er3,閃動(dòng)頻率1HZ(1秒鐘1次)。 10、強(qiáng)冷功能。 按ON鍵,接通控制面板電源,按動(dòng)風(fēng)速鍵,啟動(dòng)蒸發(fā)風(fēng)機(jī),將制冷鍵按下5秒鐘,啟動(dòng)壓縮機(jī)和冷凝風(fēng)機(jī)(只有在蒸發(fā)風(fēng)機(jī)工作的情況下,才具備此功能)。并當(dāng)轉(zhuǎn)換風(fēng)速和新風(fēng)狀態(tài)時(shí),強(qiáng)冷功能不應(yīng)消失。 11、同時(shí)按"△▽"鍵顯示空調(diào)使用時(shí)間。單位為10小時(shí)。 ● 控制源程序 #include "STC12C5410AD.H" #include "define_io.h" #include "main.
10、h" unsigned char KeyFlag; const unsigned int TempTable[] = { //0 1 2 3 4 5 6 7 8 9 14230,13600,13010,12450,11910,11400,10920,10460,10020,9596, //10 11 12 13 14 15 16 17 18 19 9197,8817,8454,8108,7779,7467,7164,6877,6603,6342, //20
11、 25 6092,5854,5626,5408,5199,5000,4811,4630,4456,4291, //30 4132,3980,3835,3695,3562,3434,3311,3193,3081,2972, //40 2869,2769,2673,2581,2493,2409,2327,2249,2174,2102, //50 2032,1965,1901,1839,1780,1722,1667,1614,1563,1514, //60 1466,1421,1376,1334,1293 }; voi
12、d delay(unsigned int n) { unsigned int i; for(i = 0; i < n; i ++) { ; } } /* void Ldelay(unsigned char n) { unsigned char i,j,k; for(i = 0; i < n; i ++) { for(j = 0; j < 0xff; j ++) { for(k = 0; k < 0xff; k ++) {WDT_CONTR = 0x38;} } } } */ void
13、trans_led_data(unsigned char DAT) { unsigned char Data[17] = { //0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 //0 1 2 3 4 5 6 7 8 9 H I L o 無 E r 0xc0,0xf9,0xa4,0xb0,0x99
14、,0x92,0x82,0xf8,0x80,0x90,0x89,0xf9,0xc7,0xa3,0xff,0x86,0xaf }; unsigned char i,j; i = Data[DAT] & dp; CY = 0; for(j = 0; j < 8; j ++) { i <<= 1; LED_DATA = CY; LED_CLK = 0; LED_CLK = 1; } } void show_temp() { unsigned char a,b,c; if(!set_time) { if(temp_num >
15、 59) //溫度超過60度 { a = 14; //不顯示 c = 10; //顯示字母"H" b = 11; //顯示字母"I" // flag = 0; //不顯示點(diǎn)"." } else if(temp_num <= 12) //溫度低于12度 { c = 12; //顯示字母“L” b = 13; //顯示"O" a = 14; //不顯示 // flag = 0; //不顯示點(diǎn)"." } else { a = temp_dot; b = temp_num%10;
16、 c = temp_num/10; // flag = 1; //顯示點(diǎn)"." //--------------------------- if(a==5) { a=0; } else { a=5; if(b) { b-=1; } else { c-=1; b=9; } } //--------------------------- } } else { a = 0; b =
17、 set_temp%10; c = set_temp/10; // flag = 1; //顯示點(diǎn)"." } LED3_ON = 0; dp = 0xff; trans_led_data(c); LED1_ON = 1; delay(1000); LED1_ON = 0; dp = 0x7f; trans_led_data(b); LED2_ON = 1; delay(1000); LED2_ON = 0; dp = 0xff; trans_led_data(a); LED3_ON = 1; del
18、ay(1000); WDT_CONTR = 0x3c; //喂狗 } void show_error(unsigned char num) { unsigned char i; i = num; LED3_ON = 0; trans_led_data(15); //E LED1_ON = 1; delay(1000); LED1_ON = 0; trans_led_data(16); //r LED2_ON = 1; delay(1000); LED2_ON = 0; trans_led_data(i)
19、; LED3_ON = 1; delay(1000); WDT_CONTR = 0x3c; //喂狗 } void show_temp_err() //顯示溫度或錯(cuò)誤標(biāo)志 { if(((!error_flag)||((error_flag==1)&&(!SW_N_FLAG))||(set_time))) //當(dāng)無錯(cuò)時(shí)(error_flag=0)或錯(cuò)為1(欠壓,error_flag=1),并且制冷鍵沒按下時(shí),溫度調(diào)節(jié)時(shí)也顯示溫度,顯示溫度 { show_temp(); } else //當(dāng)錯(cuò)為2(溫感器短路)或3(溫感器開路)時(shí),或錯(cuò)為1(Er1)且
20、制冷鍵按下顯示Err { if(flag) show_error(error_flag); else { LED1_ON = 0; LED2_ON = 0; LED3_ON = 0; } } } void make_cool(void) //制冷動(dòng)作程序 { // if(!SW_N_ERR_TIME) //有欠壓故障后,制冷鍵按下0.5S后起作用 if(!ERR_ACT_DELAY) { if(!make_cool_flag) //如果沒有開強(qiáng)冷功能 { if(error_flag >
21、1) //如果出現(xiàn)溫感器開路或短路故障,不能開制冷功能 { CON4 = OFF; SW_N_FLAG = 0; //關(guān)了制冷便不管是否欠壓都不顯示出錯(cuò)信息 } else //沒有出現(xiàn)溫感器開路或短路故障 { if(con4_flag) //如果制冷按下 { if((temp_w_num >= 4)&&(temp_s_num >= 4)&&(temp_num>set_temp)) //4 { CON4 = ON; if(error_flag == 1) //出現(xiàn)欠壓
22、故障時(shí): SW_N_FLAG = 1; //欠壓時(shí)開了制冷標(biāo)志 } else { if((temp_w_num <= 2)||(temp_s_num <= 2)||(temp_num<(set_temp-1))) //2 { CON4 = OFF; //關(guān)制冷 SW_N_FLAG = 0; //關(guān)了制冷便不管是否欠壓都不顯示出錯(cuò)信息 } } } else //如果制冷關(guān)掉 { CON4 = OFF;
23、//關(guān)制冷 SW_N_FLAG = 0; //關(guān)了制冷便不管是否欠壓都不顯示出錯(cuò)信息 } } } else //強(qiáng)冷功能 { if(error_flag > 1) //如果出現(xiàn)溫感器開路或短路故障,不能開制冷功能 { CON4 = OFF; SW_N_FLAG = 0; //關(guān)了制冷便不管是否欠壓都不顯示出錯(cuò)信息 } else { if(con4_flag) //如果制冷按下 { CON4 = ON; if(error_flag ==
24、 1) //出現(xiàn)欠壓故障時(shí): SW_N_FLAG = 1; //欠壓時(shí)開了制冷標(biāo)志 } else //如果制冷關(guān)掉 { CON4 = OFF; //關(guān)制冷 SW_N_FLAG = 0; //關(guān)了制冷便不管是否欠壓都不顯示出錯(cuò)信息 } } } } } void show_time() { unsigned char a,b; a = clock_time%10; b = clock_time/10; LED1_ON = 0; LED3_ON = 0
25、; dp = 0xff; trans_led_data(b); LED2_ON = 1; delay(1000); LED2_ON = 0; dp = 0xff; trans_led_data(a); LED3_ON = 1; delay(1000); WDT_CONTR = 0x3c; //喂狗 } void led_clear() //清LED顯示 { LED1_ON = 0; LED2_ON = 0; LED3_ON = 0; dp = 0xff; trans_led_data(14);
26、 } unsigned char check_key() { unsigned char i,j; i = 0x7f; for(j = 0; j < 8; j ++) { i <<= 1; LED_DATA = CY; LED_CLK = 0; LED_CLK = 1; if(!KEY_INPUT) { delay(200); if(!KEY_INPUT) { break; } } } return j; } void active_key() { bit Te
27、mpBit = 0; unsigned char i,j,k; //check_err(); led_clear(); //清LED顯示 j = check_key(); k = j; switch(j) { case 1: //制冷鍵 if(((temp_w_num >= 4)&&(temp_s_num >= 4)&&(temp_num>set_temp))||(con4_flag)) { if(error_flag < 2) //溫度傳感器沒有出現(xiàn)短路或斷路故障時(shí),制冷鍵才起作用 { if
28、(mec_flag) //如果風(fēng)速鍵按過后制冷鍵才起作用 { // if(error_flag==1) //欠壓故障出現(xiàn) // SW_N_ERR_TIME = 5; KeyFlag = 1; con4_flag = ~con4_flag; //制冷控制 make_cool(); } } make_cool_flag = 0; //強(qiáng)冷標(biāo)志清0,不用強(qiáng)冷 } make_cool_time = 5; //制冷鍵按下后,5S計(jì)時(shí)裝載,如果5S后依然按下,則為強(qiáng)冷
29、 show_clock_flag = 0; set_time = 0; break; case 0: //風(fēng)速鍵 if(((CON3)&&(CON1)&&(CON2))||(!CON1)) { CON3 = ON; CON1 = OFF; } else if(!CON3) { CON3 = OFF; CON2 = ON; } else if(!CON2) { CON2 = OFF; CON1 = ON; }
30、 mec_flag = 1; set_time = 0; show_clock_flag = 0; break; case 2: // - DEC_FLAG = 1; //-鍵按下標(biāo)志置1 set_time_delay = 10; //設(shè)定溫度-鍵按下后持續(xù)時(shí)間 break; case 3: // + ADD_FLAG = 1; //+鍵按下標(biāo)志置1 set_time_delay = 10; //設(shè)定溫度+鍵按下后持續(xù)時(shí)間 break; case 5: //新風(fēng)鍵 C
31、ON5 = ~CON5; set_time = 0; show_clock_flag = 0; break; default: show_clock_flag = 0; break; } while(!KEY_INPUT) //按鍵按下沒松開時(shí)執(zhí)行的程序 { WDT_CONTR = 0x3c; //喂狗 led_clear(); //清LED顯示 if((show_clock_flag)&&(!show_clock_delay)) //如果+-兩鍵同時(shí)按下,并且延時(shí)后 show_time(
32、); //顯示開機(jī)總時(shí)間 else show_temp_err(); //顯示溫度或故障信息 led_clear(); //清LED顯示 if(mec_flag) //強(qiáng)冷功能,制冷鍵按下5秒才起作用 { if(error_flag < 2) //溫度傳感器沒有出現(xiàn)短路或斷路故障時(shí),制冷才起作用 { if((k==1)&&(!make_cool_time)) { // con4_flag = 1; // CON4 = ON; if((!TempBit)&&(!KeyFlag))
33、 { make_cool_flag = 1; //強(qiáng)冷標(biāo)志置1,開強(qiáng)冷功能 TempBit = 1; con4_flag = ~con4_flag; //制冷控制 make_cool(); } make_cool(); } } } if(!clock_flag) //如果+-鍵沒有同時(shí)按下,不需顯示時(shí)間 { if(!set_time_delay) //如果設(shè)定溫度+-鍵按下過了1秒 { if(k==2) { if(set_
34、temp > 16) set_temp --; set_time = 4; //按鍵放開后繼續(xù)顯示的時(shí)間 set_time_delay = 3; //延時(shí)后再減 } if(k==3) { if(set_temp < 28) set_temp ++; set_time = 4; //按鍵放開后繼續(xù)顯示的時(shí)間 set_time_delay = 3; //延時(shí)后再加 } key_flag=1; } } if((k == 2)||(k =
35、= 3)) //檢測(cè)是否+-兩鍵同時(shí)按下程序 { led_clear(); //清LED顯示 i = 0x7f; for(j = 0; j < 8; j ++) { i <<= 1; LED_DATA = CY; LED_CLK = 0; LED_CLK = 1; if(!KEY_INPUT) { delay(200); if(!KEY_INPUT) { if(((j == 3)&&(k == 2))||((j == 2)&&(k =
36、= 3))) //如果+和-鍵都按下了 { clock_flag = 1; set_time_delay = 0; if(!show_clock_flag) //如果+-鍵同時(shí)按下,顯示時(shí)間標(biāo)志為0 { show_clock_flag = 1; //顯示時(shí)間標(biāo)志置1 show_clock_delay = 2; //+-鍵同時(shí)被按下后,到顯示出時(shí)間需要的延時(shí) } break; } } } } }
37、 check_key(); } //-------------------------------------------------------按鍵放開后 if(!clock_flag) //如果+-鍵沒有同時(shí)被按下 { if(ADD_FLAG) //如果+鍵按下標(biāo)志為1 { ADD_FLAG = 0; //+鍵按下標(biāo)志清0 if(set_temp < 28) //如果設(shè)定溫度小于最大設(shè)定值,28度 set_temp ++; set_time = 4; //設(shè)定溫度后需繼續(xù)顯示設(shè)定值的時(shí)間 } if(DE
38、C_FLAG) //如果-鍵按下標(biāo)志為1 { DEC_FLAG = 0; //-鍵按下標(biāo)志清0 if(set_temp > 16) //如果設(shè)定溫度大于最小設(shè)定值,16度 set_temp --; //設(shè)定值減1 set_time = 4; //設(shè)定溫度后需繼續(xù)顯示設(shè)定值的時(shí)間 } } else //如果+-鍵同時(shí)按下標(biāo)志是1 { clock_flag = 0; //按鍵一旦松開,時(shí)間顯示標(biāo)志關(guān)掉 ADD_FLAG = 0; //+-鍵按下,調(diào)設(shè)定溫度標(biāo)志清0 DEC_FLAG = 0; } Key
39、Flag = 0; } void check_temp_num() { unsigned char i; unsigned long int j,k,TtemNUM1; Rgt = (ADC_G_DATA * R)/(Uvcc - ADC_G_DATA); Rwt = (ADC_W_DATA * R)/(Uvcc - ADC_W_DATA); Rst = (ADC_S_DATA * R)/(Uvcc - ADC_S_DATA); for (i = 1; i < 62; i ++) { active_key(); if(LED_I
40、NIT_FLAG) //剛開機(jī)等到HI顯示過去,顯示穩(wěn)定后再顯示,去除開機(jī)時(shí)顯示"HI"現(xiàn)象 show_temp_err(); //顯示溫度或故障信息 j = TempTable[i + 1]; k = TempTable[i]; TtemNUM1 = (j / 2) + (k / 2); if((Rgt <= k) && (Rgt > j)) { temp_num = i; if(Rgt <= TtemNUM1) temp_dot = 5; else temp_dot = 0; } if
41、((Rwt <= k) && (Rwt > j)) temp_w_num = i; if((Rst <= k) && (Rst > j)) temp_s_num = i; } } void check_err() //檢測(cè)故障程序 { if((ADC_G_DATA >5000)||(ADC_W_DATA > 5000)||(ADC_S_DATA > 5000)) //溫度傳感器開路故障 5000 { if(ERR_ACT_FLAG!=3) { ERR_ACT_DELAY = 5; ERR_ACT_FL
42、AG = 3; //出錯(cuò) } if(!ERR_ACT_DELAY) error_flag = 3; //出錯(cuò)標(biāo)志置3,將顯示"Er3" } else { if((ADC_G_DATA < 100)||(ADC_W_DATA < 100)||(ADC_S_DATA < 100)) //溫度傳感器短路故障 100 { // error_flag = 2; //出錯(cuò)標(biāo)志置2,將顯示"Er2" if(ERR_ACT_FLAG!=2) { ERR_ACT_FLAG = 2; //出錯(cuò) ER
43、R_ACT_DELAY = 5; } if(!ERR_ACT_DELAY) error_flag = 2; } else { if((SW_N)&&(!CON4)) //高低壓故障 { // error_flag = 1; //出錯(cuò)標(biāo)志置1,將顯示"Er1" if(ERR_ACT_FLAG!=1) { ERR_ACT_FLAG = 1; //出錯(cuò) ERR_ACT_DELAY = 5; } if(!ERR_ACT_DELAY)
44、 error_flag = 1; } else { if(!SW_N) { // error_flag = 0; //沒有故障 if(ERR_ACT_FLAG!=0) { ERR_ACT_FLAG = 0; //沒錯(cuò) ERR_ACT_DELAY = 5; } if(!ERR_ACT_DELAY) error_flag = 0; } } } } } unsigned lon
45、g int ADC_active(void) { unsigned char i; unsigned long int adc_num,adc_num1,adc_num2; adc_num2 = 0; for(i = 0; i < 8; i ++) { ADC_DATA = 0; //清空ADC數(shù)據(jù) ADC_CONTR |= 0x08; //啟動(dòng)ADC轉(zhuǎn)換 while(!(ADC_CONTR & 0x10)); //等待ADC轉(zhuǎn)換完成 00010000,ADC_FLAG,ADC轉(zhuǎn)換完成標(biāo)志位,完成后為1; // {WDT_CONTR = 0x3
46、8;} //喂狗} ADC_CONTR &= 0xe7; //清0 ADC_FLAG,ADC_START 位,停止ADC轉(zhuǎn)換 adc_num1 = ADC_DATA; adc_num2 = adc_num2 + adc_num1; //保存AD轉(zhuǎn)換結(jié)果 } if(LED_INIT_FLAG) //剛開機(jī)等到HI顯示過去,顯示穩(wěn)定后再顯示,去除開機(jī)時(shí)顯示"HI"現(xiàn)象 { show_temp_err(); //顯示溫度或故障信息 } adc_num = adc_num2 / 8; return adc_num; } void A
47、DC_control(void) { unsigned long int adc_mid_data; //------------- ADC ---------------------- ADC_CONTR |= 0x80; //開ADC電源 delay(30); //------------通道0-------------------- ADC_CONTR = 0xe0; //1,11,00,000 轉(zhuǎn)換速度(11)210, ADC通道(000)0 delay(3); adc_mid_data = ADC_active(); ADC_G_DA
48、TA = (adc_mid_data*Uvcc)/256; //----------------------------------------- //------------通道1-------------------- ADC_CONTR = 0xe1; //1,11,00,001 轉(zhuǎn)換速度(11)210, ADC通道(001)1 delay(3); adc_mid_data = ADC_active(); ADC_W_DATA = (adc_mid_data*Uvcc)/256; //---------------------------------------
49、-- //------------通道2-------------------- ADC_CONTR = 0xe2; //1,11,00,010 轉(zhuǎn)換速度(11)210, ADC通道(010)2 delay(3); adc_mid_data = ADC_active(); ADC_S_DATA = (adc_mid_data*Uvcc)/256; //----------------------------------------- ADC_CONTR &= 0x7f; //關(guān)ADC電源 } main() { unsigned char i; //-
50、- I/O口功能設(shè)置 --- P1M0 = 0x87; P1M1 = 0x78; P2M0 = 0x8c; P2M1 = 0x70; P3M0 = 0xdf; P3M1 = 0x20; led_clear(); //清LED顯示 //--------------------- P1 = 0x78; //CON1~5斷開 P2 = 0x40; P3 = 0x00; CON4 = OFF; LED_INIT_FLAG=0; //用于開機(jī)延時(shí)片刻,消除“HI”顯示 mec_flag = 0; //風(fēng)速鍵按下指示標(biāo)志 set_t
51、emp = 20; set_time = 0; DEC_FLAG = 0; //-鍵按下標(biāo)志清0 ADD_FLAG = 0; //+鍵按下標(biāo)志清0 set_time_delay = 0; make_cool_time = 0; show_clock_delay = 0; //+-鍵同時(shí)被按下后,到顯示出時(shí)間需要的延時(shí)清0 con4_flag = 0; make_cool_flag = 0; //強(qiáng)冷標(biāo)志清0,不用強(qiáng)冷 error_flag = 0; SW_N_FLAG = 0; ERR_ACT_DELAY=0; ERR_ACT_FLAG =
52、 0; SW_N_ERR_TIME = 0; show_clock_flag = 0; //顯示時(shí)鐘標(biāo)志 key_flag = 0; //-- 定時(shí)器設(shè)置 --- TMOD = 0x10; TH1 = 0x7d; //0.1s TL1 = 0xcb; EA = 1; ET1 = 1; TR1 = 1; KeyFlag = 0; count = 0; sec_count = 0; min_count = 0; hou_count = 0; clock_time = 0; //---------------------
53、WDT_CONTR = 0x3c; //看門狗設(shè)置 while(1) { if(!LED_INIT_FLAG) //剛開機(jī)等到HI顯示過去,顯示穩(wěn)定后再顯示,去除開機(jī)時(shí)顯示"HI"現(xiàn)象 { for(i = 0; i < 10; i ++) { led_clear(); //清LED顯示 ADC_control(); check_temp_num(); check_err(); //檢測(cè)故障程序 } } LED_INIT_FLAG = 1; ADC_control(); //AD測(cè)溫
54、 check_err(); //檢測(cè)故障程序 if(!count) //每秒測(cè)一次溫度 { ADC_control(); check_temp_num(); check_err(); //檢測(cè)故障程序 show_temp_err(); //顯示溫度或故障信息 } active_key(); make_cool(); show_temp_err(); //顯示溫度或故障信息 WDT_CONTR = 0x3c; //喂狗 } } void it_timer1(void) inter
55、rupt 3 { TH1 = 0x7d; TL1 = 0xcb; WDT_CONTR = 0x3c; if(count == 0) flag = 0; if(count == 5) flag = 1; if(set_time_delay) set_time_delay --; if(ERR_ACT_DELAY) ERR_ACT_DELAY--; // if(SW_N_ERR_TIME) // SW_N_ERR_TIME --; if(count >= 10) { count = 0; sec_c
56、ount ++; if(set_time) set_time --; if(show_clock_delay) //+-鍵同時(shí)被按下后,到顯示出時(shí)間需要的延時(shí) show_clock_delay --; if(make_cool_time) make_cool_time --; if(sec_count == 60) { sec_count = 0; min_count ++; if(min_count ==60) { min_count = 0; hou_count ++; if(hou_count == 10) { hou_count = 0; clock_time += 10; } } } // delay_num --; } else count ++; } 28 / 28
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識(shí)競(jìng)賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識(shí)測(cè)試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測(cè)工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識(shí)競(jìng)賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案