基于單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)與仿真畢業(yè)論文_第1頁
基于單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)與仿真畢業(yè)論文_第2頁
基于單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)與仿真畢業(yè)論文_第3頁
基于單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)與仿真畢業(yè)論文_第4頁
基于單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)與仿真畢業(yè)論文_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、基于單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)與仿真 盤桂云(吉首大學(xué)物理科學(xué)與信息工程學(xué)院,湖南 吉首 416000) 摘 要本課題以單片機(jī)為控制核心,設(shè)計(jì)了一款數(shù)字溫度計(jì)。該系統(tǒng)由51單片機(jī)、ds18b20溫度傳感器以及1602 lcd液晶顯示屏等部件組成。系統(tǒng)上電后進(jìn)入實(shí)時(shí)溫度顯示狀態(tài),此時(shí)將ds18b20中的溫度值讀到單片機(jī)中并將其顯示在lcd液晶顯示屏上。系統(tǒng)可以設(shè)置上下限報(bào)警溫度值,當(dāng)測(cè)得結(jié)果超過設(shè)定值時(shí)進(jìn)行相應(yīng)的報(bào)警,提供一個(gè)接口可以將溫度值傳送給其它控制器或計(jì)算機(jī),測(cè)量準(zhǔn)確且誤差小,其誤差在0.02。關(guān)鍵詞:?jiǎn)纹瑱C(jī);溫度采集;lcd顯示;溫度傳感器;數(shù)字溫度計(jì); emluater and desi

2、gn of digital thermometer based on microcomputer controlpanguiyun (college of physics science and information engineering,jishou university,jishou,hunan 416000)abstractthis topic with the microcontroller as control core , and design a digital thermometer. it consists of 51 single -chip microcomputer

3、, 18b20 temperature sensor and 1602 lcd screen display etc. after power on, the system into real-time temperature display state, then the temperature 18b20 will read in the single-chip microcomputer and displayed in the lcd screen. system can set upper temperature alarm, when the alarm measured resu

4、lts than the setting measured corresponding alarm, system can provide an interface which sends the temperature to other controller or computer. there is little measuring error, measuring error at 0.02. key words:microcontroller;temperature acquisition;lcd display;temperatere sensor;digital thermomet

5、er目 錄第一章 緒 論 11.1 系統(tǒng)背景 11.2 系統(tǒng)概述 11.2.1 系統(tǒng)功能 11.2.2 系統(tǒng)所用器件及其作用 1第二章 系統(tǒng)總體設(shè)計(jì)21 系統(tǒng)硬件電路總體設(shè)計(jì)322系統(tǒng)軟件的總體設(shè)計(jì) 423主程序的流程設(shè)計(jì)與實(shí)現(xiàn)程序 63.2.1 主程序的流程設(shè)計(jì)63.2.2 主程序的實(shí)現(xiàn)程序 7第三章 主要器件介紹31 18b20溫度傳感器 832 1602液晶顯示器 8第四章 系統(tǒng)詳細(xì)設(shè)計(jì)41控制模塊電路設(shè)計(jì) 104.1.1晶振電路設(shè)計(jì) 104.1.2復(fù)位電路設(shè)計(jì) 1042溫度傳感器模塊 114.2.1溫度傳感器模塊電路設(shè)計(jì) 114.2.2溫度傳感器模塊程序設(shè)計(jì) 1243 液晶顯示模塊 1

6、64.3.1液晶顯示模塊電路設(shè)計(jì) 164.3.2液晶顯示模塊程序設(shè)計(jì) 174.4 鍵盤輸入模塊174.4.1鍵盤輸入模塊電路設(shè)計(jì) 174.4.2鍵盤輸入模塊程序設(shè)計(jì) 184. 5報(bào)警模塊 194.5.1報(bào)警模塊電路設(shè)計(jì) 194.5.1報(bào)警模塊程序設(shè)計(jì) 204. 6串行輸出模塊20第五章 軟件仿真與測(cè)試5.1軟件的仿真分析與仿真結(jié)果 21結(jié)束語 25參考文獻(xiàn) 26致謝 27附錄1:系統(tǒng)電路圖 28附錄2:源程序清單29 第一章 緒 論1.1 系統(tǒng)背景在工農(nóng)業(yè)生產(chǎn)和日常生活中,對(duì)溫度的測(cè)量占據(jù)著極其重要地位。冰箱、空調(diào)、烘干機(jī)中均用了溫度控制系統(tǒng)。目前,我國單片機(jī)的開發(fā)應(yīng)用正在興起,單片機(jī)在機(jī)電一

7、體化、智能儀表、工業(yè)控制、家用電器等方面的應(yīng)用成果尤為顯著。本課題基于單片機(jī)設(shè)計(jì)了一款數(shù)字溫度計(jì)。1.2 系統(tǒng)概述本設(shè)計(jì)以單片機(jī)為控制核心。其設(shè)計(jì)通過18b20進(jìn)行溫度采集,采用1602液晶來進(jìn)行溫度顯示,有鍵盤輸入和led二極管進(jìn)行溫度報(bào)警功能。其溫度通過max232通信方式傳送出去,可給另一控制器或計(jì)算機(jī)進(jìn)行其它操作用。硬件總的包括單片機(jī)及相應(yīng)單片機(jī)小系統(tǒng)相關(guān)元件、18b20溫度傳感、1602液晶顯示屏、三個(gè)按鍵,max232電平轉(zhuǎn)換器件和兩個(gè)led二極管。1.2.1 系統(tǒng)的功能本數(shù)字溫度計(jì)系統(tǒng)主要完成的功能是對(duì)測(cè)量溫度進(jìn)行顯示,其中包括過溫報(bào)警功能。具體的功能如下所述:(1)能夠?qū)崟r(shí)的測(cè)

8、得溫度并進(jìn)行顯示,顯示的誤差在0.02;(2)可以通過鍵盤輸入相應(yīng)的上下限溫度;(3)數(shù)字溫度計(jì)測(cè)得的溫度值和我們?cè)O(shè)定的上下限溫度都可以在lcd上顯示出來。其中在主界面下是實(shí)時(shí)顯示測(cè)得的溫度值;(4)當(dāng)系統(tǒng)測(cè)得的溫度低于最低溫度或高于最高溫度時(shí)會(huì)進(jìn)行相應(yīng)的報(bào)警;(5)測(cè)得溫度通過max232傳送出去,可供其它器件操作。本數(shù)字溫度計(jì)的工作過程如下:首先通過18b20溫度傳感器進(jìn)行溫度采集,然后將采集到的數(shù)據(jù)傳送給單片機(jī),單片機(jī)將收到的數(shù)據(jù)進(jìn)行相應(yīng)的處理后通過1602液晶顯示給用戶。在此過程中如果測(cè)得的溫度超過了上下限溫度時(shí)系統(tǒng)會(huì)啟動(dòng)報(bào)警。其中上下限溫度值可由用戶進(jìn)行設(shè)定,如未設(shè)定則為系統(tǒng)初始值。

9、系統(tǒng)還可將溫度通過max232傳送給計(jì)算機(jī)等進(jìn)行相應(yīng)的操作。1.2.2 系統(tǒng)所用器件及其作用在數(shù)字溫度計(jì)系統(tǒng)中所使用的器件及其作用如下所述:(1) 單片機(jī):系統(tǒng)的控制部分,能對(duì)采集的溫度進(jìn)行相應(yīng)處理。(2) 18b20溫度傳感器:用來采集溫度。(3) 1602液晶顯示屏:用來顯示單片機(jī)控制器處理的相應(yīng)結(jié)顯。(4) led發(fā)光二極管:用來進(jìn)行報(bào)警的模擬。(5) 按鍵:用來輸入相應(yīng)的上下限溫度值。(6)max232:進(jìn)行串行通信的電平轉(zhuǎn)換。第二章 系統(tǒng)總體設(shè)計(jì)2.1系統(tǒng)硬件電路總體設(shè)計(jì)數(shù)字溫度計(jì)系統(tǒng)硬件電路按功能可以分為以下幾個(gè)模塊電路:控制模塊電路、溫度傳感器模塊電路、液晶顯示模塊電路、鍵盤輸入

10、模塊電路、報(bào)警模塊、串行通信模塊電路。系統(tǒng)硬件電路總體設(shè)計(jì)方框圖,如圖2.1所示:液晶顯示模塊電路控制模塊電路即單片機(jī)小系統(tǒng)鍵盤輸入模塊電路報(bào)警模塊溫度傳感器模塊電路圖2.1.1數(shù)字溫度計(jì)系統(tǒng)硬件電路總體圖2.1.2 系統(tǒng)的電路圖2.2系統(tǒng)軟件的總體設(shè)計(jì)軟件部分即程序編寫部分。為了程序的可讀性和獨(dú)立性,程序的書寫分模塊書寫,且同一個(gè)模塊放在同一個(gè)文件下。根據(jù)此思路,程序分為主程序模塊部分、1602液晶顯示驅(qū)動(dòng)模塊部分、按鍵模塊部分、ds18b20驅(qū)動(dòng)模塊部分、報(bào)警模塊部分、串行輸出程序模塊和組合程序模塊部分。各部分的聯(lián)系都通過組合程序模塊部分進(jìn)行組合,而組合程序只給主程序調(diào)用。主程序部分對(duì)應(yīng)m

11、ian.c文件按鍵模塊程序部對(duì)應(yīng)key_scanf.c文件中1602液晶驅(qū)動(dòng)程序部分對(duì)應(yīng)1602.c報(bào)警程序模塊部分對(duì)應(yīng)baoji.c文件中ds18b20驅(qū)動(dòng)程序部分對(duì)應(yīng)18b20.c中圖2.2.1程序各模塊之間的關(guān)系圖組合程序部分 對(duì)應(yīng)unite.c文件串行通信模塊對(duì)應(yīng)usart.c文件中各程序部分的相關(guān)關(guān)系如圖:各個(gè)程序模塊設(shè)計(jì)之間的關(guān)系如上圖,且在它們的對(duì)應(yīng)關(guān)系中還有一個(gè)文件名為head .h,此文件用來定義io端口和進(jìn)行相關(guān)的外部變量和外部函數(shù)的聲明。每一個(gè)c文件前面都會(huì)有:include“head.h”來包含些頭文件各文件的聯(lián)接通過外部函數(shù)和外部變量。其各部分的外部函數(shù)和外部變量聲明

12、在head.h文件中。各程序模塊對(duì)應(yīng)的外部函數(shù)及外部變量如下:ds18b20驅(qū)動(dòng)程序部分: extern void get_temperature();extern int temperature;1602液晶驅(qū)動(dòng)程序部分:extern void lcd_prints(uchar *strint,uchar x,uchar y);按鍵模塊程序部分:extern void key_scanf();extern uchar key1,key2,key3;報(bào)警程序模塊部分:extern void compare_temperature();extern void deal_compare_tempe

13、rature();extern uchar low_flag,high_flag;串行通信模塊部分:extern void usart();組合程序部分:externvoid dis_temperature(int temp_temperature);extern void main_init();extern void main_scanf_deal();以上列出的各外部函數(shù)與外部變量是各個(gè).c文件相互聯(lián)接的基礎(chǔ),其關(guān)系如圖2.2.1所示.其中這些外部函數(shù)與io定義都放在head.h文件中.io定義列出如下:/*io口的定義*/ /*/*sbitrs =p20;sbit rw =p21;sb

14、it en=p22;sbit busy_f=p07;#define dc_portp1#define lcd_com0 / command#define lcd_data1 / data#definekeyp2/按鍵io定義sbit b20_io =p37; /溫度輸入口sbitbeer=p32;/報(bào)警io口1sbitbeer1=p33;/報(bào)警io口2/*/*2.3主程序的流程設(shè)計(jì)與實(shí)現(xiàn)程序2.3.1主程序的流程設(shè)計(jì)由于各個(gè)程序都是模塊化的設(shè)計(jì),因此主程序的工作量就很少且思路也很清析。它的調(diào)用程序都在unite.c文件中。其程序設(shè)計(jì)思路如下:開始調(diào)用初始化程序調(diào)用獲得測(cè)量的溫度程序調(diào)用顯示溫度

15、程序在液晶上顯示調(diào)用鍵盤掃描程序調(diào)用按鍵處理程序調(diào)用三個(gè)溫度比較程序調(diào)用報(bào)警程序?qū)Ρ容^結(jié)果處理調(diào)用串行通信程序圖2.3.1主程序流程圖2.3.2主程序的實(shí)現(xiàn)程序/*函數(shù)名稱:void main()功能說明:主函數(shù)入口參數(shù):void*/void main()main_init();/主程序的初始化部分程序while(1)get_temperature();/獲得溫度lcd_write(lcd_com,0x01);/清屏lcd_prints( now temperature,0,0);/第一行的顯示dis_temperature(temperature);/顯示溫度(第二行中)key_scanf(

16、);/掃描按鍵main_scanf_deal();/按鍵處理compare_temperature();/三個(gè)溫度比較處理deal_compare_temperature();/處理比較結(jié)果進(jìn)行報(bào)警usart();/串行數(shù)據(jù)傳出第三章 主要器件介紹3.1 18b20溫度傳感器ds18b20最大的特點(diǎn)是單總線數(shù)據(jù)傳輸方式,ds18b20的數(shù)據(jù)i/o均由同一條線來完成。其引腳圖如下:圖3.1.1 18b20引腳圖ds18b20的功能是測(cè)量環(huán)境的溫度。測(cè)溫范圍-55_+125,其溫度數(shù)字量轉(zhuǎn)換時(shí)間為200ms在此系統(tǒng)中使用的命令只有三個(gè)。其命令列出如下:0xcc/跳過rom0x44/溫度轉(zhuǎn)換0xbe

17、/read scratchpad 命令對(duì)18b20的時(shí)序操作參考18b20程序設(shè)計(jì)部分說明。3.2 1602液晶顯示器1602液晶顯示器具有功耗低,壽命長(zhǎng)的特點(diǎn)。其數(shù)據(jù)以八位并行方式傳輸。其引腳圖如下:圖3.2.1 1602液晶引腳圖如圖3.2.1,其各引腳如下圖表:表3.2.2 1602液晶引腳功能圖表1602液晶是工業(yè)字符型液晶,能夠同時(shí)顯示16x02即32個(gè)字符。使用的命令列出如下:0x38 /設(shè)置8位數(shù)據(jù)方式,無光標(biāo)0x0c/開顯示0x06/設(shè)置地址指針加10x01/清屏 0x02/ac自增第四章 系統(tǒng)詳細(xì)設(shè)計(jì)4.1 控制模塊電路設(shè)計(jì)mcu控制模塊電路是數(shù)字溫度計(jì)系統(tǒng)的控制核心部分,主

18、要由晶振電路、復(fù)位電路、mcu單片機(jī)芯片組成。晶振電路,它產(chǎn)生整個(gè)系統(tǒng)的時(shí)鐘脈沖,時(shí)鐘是12mhz;復(fù)位電路,可進(jìn)行單片機(jī)的復(fù)位操作;mcu單片機(jī)芯片,是數(shù)字溫度計(jì)系統(tǒng)的控制核心芯片,它負(fù)責(zé)各種數(shù)據(jù)處理和控制。4.1.1晶振電路設(shè)計(jì) 晶振電路采用11.0592mhz的晶振。其電路如下:圖4.1.1晶振電路的電路圖其中c1,c2取27pf。4.1.2復(fù)位電路設(shè)計(jì) 51系列單片機(jī)的復(fù)位是高脈沖復(fù)位。其電路設(shè)計(jì)如下:圖4.1.2復(fù)位電路的電路圖復(fù)位原理:當(dāng)按鍵按下時(shí)reset從低電平變?yōu)楦唠娖?,且c3電容完全放電;當(dāng)按鍵釋放,電容開始沖電。此時(shí)電容相當(dāng)一條導(dǎo)線,reset保持高電平;當(dāng)c3沖完成后,

19、reset變?yōu)榈碗娖?。此過程中只要高電平保持時(shí)間達(dá)到系統(tǒng)要求即可進(jìn)行一次復(fù)位動(dòng)作。圖4.1.3reset的電平變化示意圖4.2 溫度傳感器模塊4.2.1溫度傳感器模塊電路設(shè)計(jì) 溫度傳感器部分是數(shù)字溫度計(jì)的核心部分。它用來采集溫度。本系統(tǒng)采用的溫度傳感器是ds18b20 。 ds18b20最大的特點(diǎn)是單總線數(shù)據(jù)傳輸方式,ds18b20的數(shù)據(jù)i/o均由同一條線來完成。18b20總共三個(gè)接線端口,一個(gè)vcc,一個(gè)gnd,還有一個(gè)dq,vcc和gnd是一般電子器件的電源與地,接法固定。dq是單線數(shù)據(jù)端口。由于在釋放dq時(shí)要保證在高電平,因此采用一個(gè)上拉電阻接在vcc上。dq接mcu中的p3.7接法電路

20、圖:圖4.2.1 溫度傳感器模塊的電路圖4.2.2 溫度傳感器模塊程序設(shè)計(jì)采集數(shù)據(jù)處理方法及程序?qū)崿F(xiàn):溫度傳感器部分采用的是18b20。由于從18b20中讀得的數(shù)據(jù)并不是真實(shí)的溫度值,因此得進(jìn)行相應(yīng)的算法計(jì)算。為了簡(jiǎn)便程序并讓讀出的溫度更精確,采用18b20系統(tǒng)默認(rèn)的設(shè)置,即12bit模式。典型對(duì)應(yīng)的溫度值表如表4.2.2所示:表4.2.2 ds18b20典型對(duì)應(yīng)的溫度值表溫度/二進(jìn)制表示十六進(jìn)制表示+125 +25.0625+10.125+0.50-0.5-10.125-25.0625-5500000111 1101000000000001 1001000100000000 10100010

21、00000000 0000100000000000 0000000011111111 1111100011111111 0101111011111110 0110111111111100 1001000007d0h0191h00a2h0008h0000hfff8hff5ehfe6fhfc90h從圖表與相關(guān)資料中都可以看出,每單位十六進(jìn)制對(duì)應(yīng)的溫度是0.0625。這個(gè)十六進(jìn)制數(shù)的值保存在兩個(gè)寄存器中,如圖:圖4.2.3溫度寄存器圖由上表和圖:我們得到要想在程序中計(jì)算出溫度,得分兩個(gè)部分來算,一個(gè)部分是溫度為正值時(shí),另一個(gè)部分是溫度為負(fù)值時(shí)。因此我們得到了兩個(gè)公式當(dāng)溫度為正值時(shí):temperatu

22、re=(msb*256+lsb)*0.0625當(dāng)溫度為負(fù)值時(shí):temperature= -( msb*256+lsb)+1)*0.0625從上面分析出來計(jì)算溫度的公式了。但是在單片機(jī)中小數(shù)的處理特別麻煩,要怎樣才能讓程序?qū)懙煤?jiǎn)節(jié)點(diǎn)呢?由于有效位為小數(shù)點(diǎn)后兩位,因此如果把溫度值擴(kuò)大100倍那樣就更簡(jiǎn)單了,只要在輸出顯示時(shí)小數(shù)點(diǎn)的位置處理下就行了。以下是本系統(tǒng)在寫計(jì)算過程中的部分程序:if(tem2&0x80)=0x80)/如果溫度是負(fù)值tmp_tmp=(tem2*256+tem1)+1)*6.25/此處將溫度擴(kuò)大了100倍flag1=1;elsetmp_tmp=(tem2*256+tem1)*6

23、.25; /此處將溫度擴(kuò)大了100倍temperature=(int)tmp_tmp;if(flag1)temperature|=0x8000;flag1=0;/表示負(fù)數(shù),因負(fù)數(shù)運(yùn)算時(shí)丟失了符號(hào)位,在此給它加上在此部分程序中計(jì)算采用了分析出來的公式,處理方法采用了乘100擴(kuò)大數(shù)值的方法。在之后的顯示中做了相應(yīng)的顯示處理。datasheet分析及程序?qū)崿F(xiàn):ds18b20是一顆數(shù)字型芯片,對(duì)其操作要按照芯片資料介紹進(jìn)行。從datasheet中看其操作包括很多,包括多顆ds18b20同總線操作方法,包括不同位數(shù)的操作法。我們采用12bit模式即默認(rèn)模式,這樣就少寫了程序同時(shí)也滿足要求。這此設(shè)計(jì)中只用

24、到一顆故部分datasheet可不理。在程序中我們要對(duì)18b20進(jìn)行寫命令,還要對(duì)它讀數(shù)據(jù),芯片的啟動(dòng)要有個(gè)初始化程序。1. 初始化18b20部分:圖4.2.4初始化18b20時(shí)序圖如圖4.2.3中所示對(duì)18b20的初始化只要先將數(shù)據(jù)線從高電平拉低,等待480us左右釋放數(shù)據(jù)總線,等待15us左右如得到一個(gè)低電平(60240us)說明初始化成功,此時(shí)可以對(duì)它操作。程序如下:/*函數(shù)名稱:void 18b20_init()功能說明:18b20初始化入口參數(shù): void*/void b20_init()bit flag=1;while(flag)b20_io=1;b20_delay(1);b20_

25、io=0;b20_delay(44);/下拉總線 b20_io=1;b20_delay(2);/釋放總線 if(b20_io)/等待釋放總線 flag=1;else/等待應(yīng)答信號(hào) flag=0;b20_delay(50);b20_io=1;/拉高掛起2.寫程序部分:寫程序部分用來對(duì)18b20進(jìn)行寫命令,發(fā)相應(yīng)的操作指令用。圖4.2.5寫18b20時(shí)序圖如上圖所示,對(duì)18b20的寫過程很簡(jiǎn)單。首先將數(shù)據(jù)總線從高電平拉低,等待15us,如果寫的是0則保持?jǐn)?shù)據(jù)總線為低,如果寫的是1則此時(shí)把數(shù)據(jù)總線拉高即可。3.讀程序部分:讀程序部分用來對(duì)18b20讀出相應(yīng)的溫度值。圖4.2.6讀18b20時(shí)序圖如上

26、圖所示,首先將數(shù)據(jù)總線從高電平拉低,等待15us,如果讀的是低電平則為0,如果讀的是高電平則為1.在程序?qū)崿F(xiàn)中,目的是得到一個(gè)溫度值,故在18b20程序模塊中有一個(gè)函數(shù)get_temperature(),用來得到一個(gè)溫度值即可。以上初始化等程序都為此程序服務(wù),在調(diào)用此程序后就得到了個(gè)temperature。這就是18b20程序模塊的最終目的。18b20程序模塊程序全部放在18b20.c文件中。4.3 液晶顯示模塊4.3.1液晶顯示模塊電路設(shè)計(jì) 液晶顯示模塊是人機(jī)接口中的一個(gè)重要部分。它是用來顯示測(cè)得的溫度及相關(guān)提示信息的。本數(shù)字溫度計(jì)的液晶顯示采用的是1602液晶。因?yàn)檫@兩種液晶的操作是一樣的

27、,而在proutes中又沒1602液晶,所以在proutes中采用lmo16l來進(jìn)行代替, 在常規(guī)設(shè)計(jì)中數(shù)據(jù)口一般接p0口,考慮到p0口無上拉電阻,這樣我們就得在p0口上拉電阻或使用鎖存器來代替,這樣的話電路上就會(huì)增加硬件從而增加了布線的難度。又因?yàn)?602液晶不像rom和ram那樣操作,因此在液晶顯示電路設(shè)計(jì)中采用數(shù)據(jù)端口為p1口。rs:數(shù)據(jù)/命令選擇,對(duì)應(yīng)在mcu中的io端口是:p20rw:讀/寫選擇端,對(duì)應(yīng)在mcu中的io端口是:p21e:使能信號(hào)端,對(duì)應(yīng)在mcu中的端口是:p22圖4.3.1 液晶顯示模塊的電路圖4.3.2液晶顯示模塊的程序設(shè)計(jì) 1602液晶和18b20一樣,操作要根據(jù)

28、datasheet進(jìn)行,在此不一一列出datasheet的細(xì)節(jié)。1602液晶顯示程序部分在1602.文件中,它包括:void check_busy ()/檢查忙標(biāo)志void lcd_write(bit d_c,uchar input_data)/寫程序void lcd_initial(void)/初始化程序void lcd_printc(uchar i,uchar x,uchar y)/寫一個(gè)字符 void lcd_prints(uchar *strint,uchar x,uchar y)/寫字符串此5個(gè)程序中作為外部函數(shù)的是void lcd_prints(uchar *strint,ucha

29、r x,uchar y),用時(shí)只要把我們的數(shù)據(jù)轉(zhuǎn)換成一段字符串拿來顯示即可。4.4 鍵盤輸入模塊4.4.1鍵盤輸入模塊電路設(shè)計(jì) 鍵盤輸入部分是給用戶設(shè)定上下限溫度值。它由三個(gè)按鍵組成,設(shè)定功能鍵key1,上下限溫度加減按鍵分別為key2、key3。由于采用p2口,p2口有上拉電阻,故按鍵的電路接法比較簡(jiǎn)單,只需一邊接地,另一端直接接在中端口上就可以了。在按鍵沒按下時(shí)輸入的是高電平,按下后變?yōu)榈碗娖?。key1對(duì)應(yīng)中的端口是:p2.7key2對(duì)應(yīng)中的端口是:p2.6key3對(duì)應(yīng)中的端口是:p2.5圖4.4.1 鍵盤輸入模塊的電路圖4.4.2鍵盤輸入模塊程序設(shè)計(jì) 鍵盤掃描部分程序設(shè)計(jì)充分考慮了按鍵去

30、斗。即一次按鍵不會(huì)當(dāng)作多次按鍵,對(duì)系統(tǒng)的穩(wěn)定性起著相當(dāng)關(guān)鍵的作用。去斗程序用到了一個(gè)延時(shí)程序。再就是按鍵有個(gè)釋放過程,考慮到點(diǎn),程序中如果沒有釋放按鍵則進(jìn)行其它操作,即不處理按鍵功能。因此這樣就有個(gè)按鍵判斷過程。整個(gè)鍵盤掃描部分程序相當(dāng)少程序給出如下:#include head.h/*函數(shù)名稱:void delay(uint z)功能說明:鍵盤掃描延時(shí)程序入口參數(shù):z為延時(shí)z*0.020ms(理想)*/void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=20;y0;y-);/*函數(shù)名稱:void key_scanf()功能說明:鍵盤掃描子程序入口參數(shù):

31、void*/void key_scanf()key=0xff;delay(30);/去斗key=key&0xff;while(key!=0xff)switch(key)case 0x7f:key1=1;break;case 0xbf:key2=1;break;case 0xdf:key3=1;break;delay(70);/去斗key=key&0xff;以上程序?yàn)閗ey_scanf.c文件中的全部程序部分, key_scanf()設(shè)定它是外部函數(shù),在這個(gè)模塊中只有這個(gè)函數(shù)才能給別個(gè)文件用,但用這個(gè)函數(shù)只能是uniet.c和main.c ,這樣用的原因是為了程序的可改性再就是在這個(gè)key_sc

32、anf.c中有三個(gè)外部變量,為key1,key2,key3, 它的使用規(guī)則同樣和外部函數(shù)一樣。這就是模塊化的在本系統(tǒng)中程序部分的特色,其思路是借鑒了面向?qū)ο窬幊讨械乃悸吩谄渌绦蚰K中也一樣在此鍵盤模塊中目的就是得到三個(gè)key值,當(dāng)有這三個(gè)key值時(shí)主程序相關(guān)程序才做出相應(yīng)的操作。4.5 報(bào)警模塊電路4.5.1報(bào)警模塊電路設(shè)計(jì) 報(bào)警模塊,用來在測(cè)得的溫度超過上下限溫度時(shí)進(jìn)行報(bào)警,用來提示用戶做出相應(yīng)的措施。報(bào)警模塊使用了兩個(gè)發(fā)光二極管,一個(gè)黃色的,一個(gè)綠色。黃色的是當(dāng)測(cè)得的溫度超過下限溫度時(shí)通過發(fā)光來提示用戶,而綠色的是在測(cè)得的溫度超過上限溫度時(shí)通過發(fā)光來提示用戶。兩個(gè)發(fā)光二級(jí)管分別接在的p3

33、.2和p3.3口。圖4.5.1 報(bào)警模塊的電路4.5.2報(bào)警模塊模塊程序設(shè)計(jì) 報(bào)警部分用到的外部硬件是兩個(gè)二極管模擬的。當(dāng)溫度低于設(shè)定的低溫時(shí)進(jìn)行報(bào)警,當(dāng)溫度高于設(shè)定的高溫時(shí)進(jìn)行報(bào)警。在程序設(shè)計(jì)中采用low_temp和high_temp進(jìn)行保存設(shè)定的高低溫度值,將他們與測(cè)得值進(jìn)行比較進(jìn)行相應(yīng)的操作,如果設(shè)定的low_temp高于high_temp時(shí)將顯示error,并其設(shè)定無效。報(bào)警部分程序放在baoji.c文件中。它包含compare_temperature()和deal_compare_temperature()兩個(gè)程序。具體程序見附錄。4.6串行輸出模塊4.6.1串行輸出模塊電路設(shè)計(jì) 串

34、行輸出模塊是將得到的溫度值通過串行的方式傳送出去。它是用來提供了將溫度輸入到電腦的一個(gè)接口。其電路圖如下:圖4.6.1 串行輸出模塊的電4.6.2串行輸出模塊程序設(shè)計(jì) 串行輸出程序的思路是,當(dāng)溫度的值發(fā)生變化時(shí)進(jìn)行一次串行輸出操作。由于系統(tǒng)時(shí)鐘設(shè)為11.0592mhz,串行通信中的波特率的選擇就很多,此串行通信設(shè)的波特率為9600串行程序中必須注意,要軟件清零ti中斷標(biāo)志。因?yàn)?1單片機(jī)中串行的中斷標(biāo)志和t2的中斷標(biāo)志硬件無法自己清除標(biāo)志位。具體程序見附錄。第五章 軟件仿真與測(cè)試51 軟件仿真分析與測(cè)試結(jié)果1系統(tǒng)實(shí)時(shí)顯示當(dāng)前溫度值。圖5.1 實(shí)時(shí)顯示當(dāng)前溫度值2修改上限溫度值。圖5.2修改上限

35、溫度值3修改下限溫度值。圖5.3 修改下限溫度值4小于下限溫度值時(shí)報(bào)警。此時(shí)的下限溫度是上面設(shè)寫的5,18b20設(shè)4.12.圖5.4 低于下限溫度值時(shí)報(bào)警5高于上限溫度值時(shí)報(bào)警。此時(shí)的上限溫度是上面設(shè)的35,18b20設(shè)35.12圖5.5 高于上限溫度值時(shí)報(bào)警6在設(shè)定上限溫度時(shí),設(shè)定的上限溫度要大于下限溫度,若出現(xiàn)設(shè)的值小于下限溫度時(shí)會(huì)出現(xiàn)error:圖5.6 設(shè)定的上限溫度值小于下限溫度值時(shí)同樣在設(shè)定的下限溫度若大于上限溫度時(shí)也會(huì)出現(xiàn)error。結(jié)束語本論文設(shè)計(jì)的是基于單片機(jī)的數(shù)字溫度計(jì)。整個(gè)系統(tǒng)以51單片機(jī)為控制核心,采用單總線的ds18b20作為系統(tǒng)的溫度采集傳感器。用1602液晶作為單

36、片機(jī)的io顯示模塊。整個(gè)系統(tǒng)功能完善。具有實(shí)時(shí)顯示當(dāng)前溫度,設(shè)定上下限溫度值以及可以對(duì)當(dāng)前溫度超出限定的溫度值時(shí)進(jìn)行報(bào)警提示。系統(tǒng)還具有232通信功能,可將溫度實(shí)時(shí)的傳送給計(jì)算機(jī)等進(jìn)行相應(yīng)的處理。本系統(tǒng)在軟件上采用了結(jié)構(gòu)化程序設(shè)計(jì),使得設(shè)計(jì)的程序易讀易改。例如,在設(shè)計(jì)本系統(tǒng)起初沒有232通信功能,在設(shè)計(jì)過程中再加上去的。此時(shí)設(shè)計(jì)的程序已寫好,要加上通信功能時(shí)直接在程序中加入usart.c文件,其文件中的函數(shù)功能即是實(shí)現(xiàn)232通信的功能,此usart.c就是一個(gè)小模塊。就此可以看出結(jié)構(gòu)化程序設(shè)計(jì)的優(yōu)點(diǎn)來。經(jīng)過了這次設(shè)計(jì)后,我學(xué)到了很多新的知識(shí)。學(xué)會(huì)了如何去看datasheet,如何做一個(gè)系統(tǒng)的分

37、析。更進(jìn)一步加強(qiáng)了51單片機(jī)的運(yùn)用能力,包括51單片機(jī)的程序編寫,調(diào)試,仿真等。最重要的是提高了我的動(dòng)手實(shí)踐能力。在這個(gè)系統(tǒng)中,出于條件的原因,只做出了相關(guān)仿真,沒有去做硬件。在串行通信中只有相關(guān)的設(shè)計(jì)程序而沒有將其做出實(shí)物與計(jì)算機(jī)進(jìn)行相應(yīng)的通信。雖然通過自己的學(xué)習(xí)完成了這項(xiàng)設(shè)計(jì),但是覺得自己還有很多知識(shí)要去學(xué)習(xí),比如說傳感器,數(shù)電,模電等。參考文獻(xiàn)1閻石數(shù)字電子技術(shù)基礎(chǔ)m北京:高等教育出版社,2001年 2王化祥,張淑英傳感器原理及應(yīng)用m天津:天津大學(xué)出版社,2004年3童詩白,華成英模擬電子技術(shù)基礎(chǔ)m北京:高等教育出版社,1980年4尹建華,張惠群微型計(jì)算機(jī)原理與接口技術(shù)m北京:高等教育出

38、版社,2002年5譚浩強(qiáng)c語言程序設(shè)計(jì)m北京:清華大學(xué)出版,2006年6張友德,趙志英,涂時(shí)亮單片微型機(jī)原理、應(yīng)用與實(shí)驗(yàn)m上海:復(fù)旦大學(xué)出版社,2006年7李國洪,曹白楊,陳剛電子cad實(shí)用教程m北京:機(jī)械工業(yè)出版社,2003年8求是科技單片機(jī)典型模塊設(shè)計(jì)實(shí)例導(dǎo)航m北京:人民郵電出版社,2004年9彭為,黃科,雷道仲單片機(jī)典型系統(tǒng)設(shè)計(jì)實(shí)例精講m . 北京: 電子工業(yè)出版社,2006年10李朝青單片機(jī) & dsp外圍數(shù)字ic技術(shù)手冊(cè)m北京:北京航空航天大學(xué)出版社,2005年11劉鯤, 孫春亮單片機(jī)c語言入門m人民郵電出版社,2008年12張萍基于數(shù)字溫度計(jì)ds18b20的溫度測(cè)量?jī)x的開發(fā)j自動(dòng)化

39、儀表,200728(6):6466致謝首先感謝向繼文老師。在此次論文中,他耐心的指導(dǎo),不辭辛勞的付出、他寬厚待人,和藹可親、他具有豐富的實(shí)踐經(jīng)驗(yàn)在學(xué)習(xí)過程中和這次畢業(yè)論文設(shè)計(jì)中給我細(xì)心的指導(dǎo),讓我受益終生。在此,我向向老師表示我最衷心的感謝。我也衷心感謝在我大學(xué)年學(xué)習(xí)中教育我培養(yǎng)我的老師們,是他們給予我生活和學(xué)習(xí)上的幫助,在此我表示深深的感謝。同時(shí)還要感謝我的同學(xué)們,是他們?cè)谖业膶W(xué)習(xí)生活中支持我,鼓勵(lì)我。最要感謝的是在我背后支持,幫助,鼓勵(lì)我的父母。是他們把我養(yǎng)大,送我上學(xué),對(duì)我無微不至的關(guān)心和照顧。附 錄附錄1:系統(tǒng)電路圖附錄2:源程序清單1head.c中的程序:#include #incl

40、ude #include #define uchar unsigned char#define uint unsigned int/*io口的定義*/ /*/*sbitrs =p20;sbit rw =p21;sbit en=p22;sbit busy_f=p07;#define dc_portp1#define lcd_com0 / command#define lcd_data1 / data#definekeyp2/按鍵io定義sbit b20_io =p37; /溫度輸入口sbitbeer=p32;/報(bào)警io口1sbitbeer1=p33;/報(bào)警io口2/*/* /*外部函數(shù)聲明*/*

41、/* /*1602函數(shù)聲明*/extern void lcd_prints(uchar *strint,uchar x,uchar y); /*18b20函數(shù)聲明*/extern void get_temperature();/*key_scanf函數(shù)聲明*/extern void key_scanf();extern void delay(uint z);/*unite.c(整合所有程序)函數(shù)聲明*/externvoid dis_temperature(int temp_temperature);extern void main_init();extern void main_scanf_d

42、eal();/baoji.cextern void compare_temperature();extern void deal_compare_temperature();/usart.cextern void usart();/*/* /*外部變量聲明*/*/*/key_scanf/extern uchar key1,key2,key3;/18b20/extern int temperature;/unite/extern int high_temp,low_temp;/baoji/extern uchar low_flag,high_flag;extern uchar usart_tem

43、p;/*/*218b20.c中程序:/*18b20溫度傳感器部分 所有的資源:包含void b20_delay(uint x)void b20_init()void b20_write_byte(uchar data)uchar b20_read_byte()void get_temperature()相關(guān)io定義資料: b20_io /溫度輸入口用戶得在頭文件中定義作用:從18b20中得到結(jié)果:一溫度值:temperature是正常值的100倍*/ #include head.h/*函數(shù)名稱:void b20_delay(uint z)功能說明:延時(shí)程序入口參數(shù):x延時(shí)參數(shù)約x*16微秒(調(diào)試出來的結(jié)果)注:12mhz*/void b20_delay(uint x)for(;x0;x-);/*函數(shù)名稱:void 18b

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論