【正文】
ncludes the main controller, temperature measurement circuit, temperature control circuit and display circuit. Main controller by single chip microputer STC12C5A16S2, DS18B20 temperature sensor by DALLAS semiconductor panies in the United States production, temperature control circuit USES is relay control external heating refrigeration equipment, using three mon anode LED digital tube display circuit. Temperature control circuit is posed of temperature sensor and the preset temperature parison, when the actual measured temperature value is greater than the preset temperature, lead to light alarm signal, and work drive electric fan。除文中已經(jīng)注明引用的內(nèi)容外,論文不含任何其他個(gè)人或集體已經(jīng)發(fā)表或撰寫過(guò)的成果。主控制器采用單片機(jī)STC12C5A16S2,溫度傳感器采用美國(guó)DALLAS半導(dǎo)體公司生產(chǎn)的DS18B20,溫度控制電路采用的是繼電器控制外部加熱制冷設(shè)備,顯示電路采用3個(gè)共陽(yáng)極LED數(shù)碼管。日常生活及工農(nóng)業(yè)生產(chǎn)中經(jīng)常要用到溫度的檢測(cè)及控制,在冶金、食品加工、化工等工業(yè)生產(chǎn)過(guò)程中,廣泛使用的各種加熱爐、熱處理爐、反應(yīng)爐等,都要求對(duì)溫度進(jìn)行嚴(yán)格控制。測(cè)量溫度的關(guān)鍵是溫度傳感器,溫度傳感器正從模擬式向數(shù)字式、從集成化向智能化、網(wǎng)絡(luò)化的方向發(fā)展。該芯片直接向單片機(jī)傳輸數(shù)字信號(hào),便于單片機(jī)處理及控制。如果當(dāng)溫度高于我們?cè)O(shè)定的最高溫度值時(shí),則單片機(jī)會(huì)通過(guò)另一個(gè)口發(fā)出一個(gè)高電平的脈沖電流送個(gè)繼電器,使連在繼電器上的電風(fēng)扇啟動(dòng),來(lái)降低溫度。2 任務(wù)分析與方案論證 任務(wù)分析本設(shè)計(jì)是對(duì)溫度進(jìn)行實(shí)時(shí)監(jiān)測(cè)與控制,即可以測(cè)試塑料大棚中的溫度和可設(shè)置塑料大棚內(nèi)適合植物生長(zhǎng)的溫度。設(shè)置溫度用數(shù)字顯示。單片機(jī)最小系統(tǒng)負(fù)責(zé)設(shè)置溫度的上下限,數(shù)據(jù)的處理和溫度的顯示;溫度測(cè)量電路測(cè)量實(shí)時(shí)溫度;當(dāng)溫度高于上限溫度或者低于下限溫度時(shí),報(bào)警電路產(chǎn)生光和聲音報(bào)警,此時(shí)繼電器控制加熱制冷設(shè)備,只至達(dá)到上下限范圍以內(nèi),警報(bào)電路和繼電器輸出主控制器溫度控制電路報(bào)警電路顯示電路溫度傳感器鍵盤電路電路停止工作。(5) 芯片內(nèi)有EEPROM 功能?!?18):P1口是帶內(nèi)部上拉電阻的8位雙向I/O口。三個(gè)獨(dú)立式按鍵可以分別調(diào)整溫度的上下限報(bào)警溫度,當(dāng)按下設(shè)置鍵一次,數(shù)碼管顯示HXX℃且 LED數(shù)碼管閃爍,這時(shí)可以調(diào)整報(bào)警上限溫度值。電路圖[8]。當(dāng)被用著在寄生電源下,也可以向器件提供電源。高速暫存RAM的結(jié)構(gòu)為8字節(jié)的存儲(chǔ)器,頭2個(gè)字節(jié)包含測(cè)得的溫度信息,第3和第4字節(jié)TH和TL的拷貝,是易失的,每次上電復(fù)位時(shí)被刷新。其工作時(shí)序包括初始化時(shí)序、寫時(shí)序和讀時(shí)序。DS18B20可以采用兩種方式供電,一種是采用電源供電方式,此時(shí)DS18B20的1腳接地,3腳接電源另一種是寄生電源供電方式,單片機(jī)端口接單線總線[3],為保證在有效的DS18B20時(shí)鐘周期內(nèi)提供足夠的電流,可用一個(gè)MOSFET管來(lái)完成對(duì)總線的上拉。由于單片機(jī)是一個(gè)弱電器件,它的工作電壓是5V,驅(qū)動(dòng)電流在mA級(jí)以下,而現(xiàn)在要把它用于一些大功率場(chǎng)合,控制熱得快,顯然是不行的。當(dāng)溫度值高于設(shè)定最高限時(shí),驅(qū)動(dòng)風(fēng)扇工作,蜂鳴器報(bào)警;當(dāng)溫度值低于設(shè)定最低限時(shí),驅(qū)動(dòng)熱得快,蜂鳴器報(bào)警。共有5位ROM操作命令。單片機(jī)可以通過(guò)單線接口讀出該數(shù)據(jù),讀數(shù)據(jù)時(shí)低位在先,高位在后,℃/LSB形式表示。該溫度控制器只是DS18B20在溫度控制領(lǐng)域的一個(gè)簡(jiǎn)單實(shí)例,還有許多需要完善的地方,在做實(shí)物的時(shí)候,也出現(xiàn)不少問(wèn)題,剛開(kāi)始我使用的是腐蝕電路板法,這種辦法雖然美觀,但不利于改進(jìn),所以我第二次用的是直接焊接的方法,可以在電路板上進(jìn)行改裝,另外還有一個(gè)不足的地方的是,我加熱設(shè)備用的是熱的快,加熱時(shí)必須放在水中,在封閉的環(huán)境中,加熱時(shí)會(huì)生成水珠,影響溫度的測(cè)量,本想用電熱爐的,但是成本太高;本設(shè)計(jì)還可以進(jìn)一步的改進(jìn),讓它更加智能,就是將測(cè)得的溫度通過(guò)單片機(jī)與通訊模塊相連接,以手機(jī)短消息的方式發(fā)送給用戶,使用戶能夠隨時(shí)對(duì)溫度進(jìn)行監(jiān)控。 //下調(diào)溫度sbit Key_SET=P1^5。sbit Lled=P3^4。/********************************************ds18b20延時(shí)函數(shù)*********************/void delay(unsigned int i){while(i)。delay(10)。i0。}/*************************************************主機(jī)從DS18B20讀取一個(gè)字節(jié)子程序********************************************************************/unsigned char ds18b20_read(void){unsigned char i,date。}return(date)。ds18b20_write(0xbe)。//把H左移8位,加上L后再按位取反temp=temp+1。 delay(120)。 LEDThreeC=0。 LEDOneC=1。 P0=seg7code[temp%10]。 P0=0xff。 delay(50)。 LEDTwoC=0。 LEDThreeC=1。 //開(kāi)中斷}//*******************字節(jié)讀***************************uchar Byte_read(uint byte_addr){IAP_CONTR = 0X85。 //送觸發(fā)命令字 0X40XB9IAP_TRIG = 0XA5。 //送字節(jié)編程命令字 IAP_ADDRH = (uchar)(byte_addr 8)。ISP_IAP_Disable()。0X00FF)。 Sector_erase(0X2000)。 Sector_erase(0X2600)。 } while(Key_SET==0)。 } if(fg==2) //設(shè)置下限報(bào)警值 delay(200)。}} /********循環(huán)顯示設(shè)置溫度*****/void key_scan(void){while(fg==1){ Shangxian_disp()。 ET0=1。 fg1=Byte_read(0X2000)。wendu[3]=temp%10。Hled=1。amp。key_scan()。Lout=1。Lled=0。user_set[1]=shangxian%10。 xiaxian=Byte_read(0X2400)。 ds18b20_init()。 }while(fg==2){ Xiaxian_disp()。 if(Key_UP==0) { xiaxian++。 if(fg==1) { if(Key_UP==0) delay(10000)。 */ }/********中斷按鍵掃描**********/void Timer0(void) interrupt 1 { TH0=0X53。 Sector_erase(0X2200)。 //關(guān)中斷IAP_TRIG = 0X5A。 //開(kāi)中斷 }//********************* 扇區(qū)擦除*********************void Sector_erase(uint sector_addr){ IAP_CONTR = 0X85。0X00FF)。ISP_IAP_Disable()。并送等待時(shí)間 IAP_CMD = 0X01。 } /***********EEPROM部份***********///****************** 關(guān)閉 ISPIAP 功能 **************void ISP_IAP_Disable(void){IAP_CONTR = 0x00。 delay(50)。 P0=0xff。 P0=seg7code[xiaxian/10]。 LEDThreeC=1。 LEDTwoC=0。 delay(120)。 P0=0xff。//,精確到小數(shù)點(diǎn)后面2位數(shù)(H和L的值