【正文】
uantity.Temperature measurement is the basic method used to directly read temperature thermometer.The most mon to measuring the temperature of the tool is various thermometer.They often graduated form high and low temperature,people must read through the scale value number to measure temperature.Using single chip puter and a temperature sensor.The electronic type intelligent thermometer can measure temperature,the temperature of the digital values,are simple and convenient,is intuitive and accurate.This article tells of a microcontroller based on the Series 51 digital thermometer39。Keywords:Singlechip Microputer,Thermometer,simulation,AT89C52,DS18B20。溫度計(jì)在現(xiàn)在的生活、工業(yè)生產(chǎn)方面都有著廣泛的應(yīng)用,好多場(chǎng)合都需要測(cè)量溫度,溫度計(jì)的精度是選擇溫度計(jì)的重要指標(biāo),尤其許多重要場(chǎng)合溫度的測(cè)定,誤差必須限定在某一很小的范圍內(nèi),因此要設(shè)計(jì)一個(gè)溫度計(jì),做好測(cè)量精度誤差也是最重要的工作之一。綜合這兩個(gè)條件,經(jīng)過(guò)查找分析,可以選擇溫度傳感器。C到+125186。設(shè)計(jì)時(shí),要求顯示到小數(shù)點(diǎn)后一位,由于誤差在177。 2 方案設(shè)計(jì)要求用單片機(jī)設(shè)計(jì)溫度計(jì)并在液晶上顯示,這就要求必須有個(gè)溫度傳感器來(lái)收集溫度信息,送入主控部分,再由主控部分將數(shù)據(jù)送顯示部分顯示。并且DS18B20體積小,輸出方便也使得該方案更加節(jié)省空間資,需要的元器件少更加經(jīng)濟(jì)實(shí)惠。測(cè)溫范圍-55℃~+125℃,固有測(cè)溫分辨率0.5℃。綜上所述,本設(shè)計(jì)選取DS18b20作為溫度傳感芯片。AT89C51是一種帶4K字節(jié)FLASH存儲(chǔ)器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低電壓、高性能CMOS 8位微處理器,俗稱單片機(jī)。單片機(jī)的可擦除只讀存儲(chǔ)器可以反復(fù)擦除1000次。由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡(jiǎn)版本。因此本設(shè)計(jì)選取AT89C51單片機(jī)作為控制器。LCD1602是字符型液晶,顯示字母和數(shù)字比較方便,控制簡(jiǎn)單,成本較低。3 硬件設(shè)計(jì)用到的器件有DS18b1602液晶及AT89C51(含晶振與復(fù)位電路)。這個(gè)脈沖就是單片機(jī)的工作速度。晶振頻率為12MHZ,單片機(jī)工作速度就是每秒 12M。 復(fù)位電路復(fù)位電路由一個(gè)有極性電容、一個(gè)電阻與一個(gè)按鍵連接而成,一端連單片機(jī)的RST端,另一端接電源,電源另一端接單片機(jī)的EA。一般情況下,選擇大小為10到30uF的電容,而電阻一般選用1到10K?的。 1602液晶顯示電路其電路圖為: 1602液晶電路該電路為我們?nèi)庋壑苯佑^看的部分,它會(huì)時(shí)時(shí)的將DS18b20收集到的溫度信息顯示出來(lái)。 4 軟件設(shè)計(jì)對(duì)DS18b20初始化設(shè)定1602的顯示位置1602對(duì)轉(zhuǎn)換的結(jié)果進(jìn)行處理分離出要顯示數(shù)據(jù)的各位獲取轉(zhuǎn)換數(shù)據(jù)結(jié)果1602對(duì)轉(zhuǎn)換的結(jié)果進(jìn)行符號(hào)判定對(duì)1602初始化將要顯示的各位依次在1602上顯示開(kāi)啟溫度轉(zhuǎn)換在液晶中寫入“temperature is:”設(shè)定1602的顯示位置開(kāi)始軟件部分的設(shè)計(jì)主要是寫程序的一個(gè)過(guò)程,寫程序前先應(yīng)畫一個(gè)整體流程如下: 軟件程序流程圖 DS18b20與單片機(jī)之間的信息交換程序首先對(duì)DS18b20進(jìn)行初始化,以釋放輸入/輸出總線并延時(shí),由于只用到一片DS18b20,因此可以發(fā)命令跳過(guò)ROM指令,跳過(guò)的指令是向DS18b20發(fā)送命令字0xcc,然后向DS18b20發(fā)出命令字0x44,來(lái)啟動(dòng)溫度轉(zhuǎn)換,然后延時(shí)一段時(shí)間,確保溫度轉(zhuǎn)換完成。 單片機(jī)向1602發(fā)送命令及數(shù)據(jù)的程序1602液晶,能夠同時(shí)顯示16x2即32個(gè)字符(16列2行)。當(dāng)寫指令時(shí),將RS置低,然后給使能端一個(gè)從低到高跳變的脈沖并延時(shí)一段時(shí)間便可以了,最后釋放使能端置為低電平;當(dāng)寫數(shù)據(jù)時(shí),將RS置高,然后給使能端一個(gè)從低到高跳變的脈沖同樣延時(shí)一段時(shí)間,最后也要釋放使能端置為低電平。對(duì)1602的初始化首先要寫入顯示模式設(shè)置命令字0X80,用來(lái)設(shè)置16x2顯示,5x7點(diǎn)陣,8位數(shù)據(jù)端口;然后再寫入顯示開(kāi)/關(guān)及光標(biāo)設(shè)置指令,這里我們寫入0X0C,設(shè)置開(kāi)顯示,不顯示光標(biāo),光標(biāo)不顯示;再寫入顯示開(kāi)/關(guān)及光標(biāo)設(shè)置指令0X06,設(shè)置當(dāng)讀或?qū)懸粋€(gè)字符后地址指針加一且光標(biāo)加一,當(dāng)寫一個(gè)字符,整屏顯示不左移;最后寫入清屏指令0X01進(jìn)行顯示清屏操作。整體程序設(shè)計(jì)見(jiàn)附錄1。_nop_()。_nop_()。 //溫度探頭(DQ)數(shù)據(jù)端口對(duì)應(yīng)的單片機(jī)引腳 sbit LCD_RS = P2^5。sbit LCD_EN = P2^7。uchar code Temp_Disp_Title[]={Current Temp : }。uchar Temp_Value[]={0x00,0x00}。void Delay(uint x){ while(x)。 _nop_()。 _nop_()。 _nop_()。 for (i=0。i++)。 while(x) { for(i=0。i++)。 LCD_RS = 0。 //du zhuang tai LCD_EN = 1。 result = (bit)(LCD_Dataamp。 LCD_EN=0。}void Write_LCD_Command(uchar cmd){ while(LCD_Busy_Check())。 LCD_RW = 0。 _nop_()。 LCD_Data =