單片機(jī)簡易數(shù)字溫度計(jì)_第1頁
單片機(jī)簡易數(shù)字溫度計(jì)_第2頁
單片機(jī)簡易數(shù)字溫度計(jì)_第3頁
單片機(jī)簡易數(shù)字溫度計(jì)_第4頁
單片機(jī)簡易數(shù)字溫度計(jì)_第5頁
已閱讀5頁,還剩26頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、課程設(shè)計(jì)說明書第1章 引言0第2章 開發(fā)和仿真軟件簡介12.1 開發(fā)軟件Keil C51 uVision212.2 仿真軟件Proteus ISIS2第3章 總體設(shè)計(jì)方案3第4章 系統(tǒng)硬件使用介紹44.1 DS18B20溫度傳感器44.2 單片機(jī)控制電路64.3 顯示器采用LCD20048第5章 系統(tǒng)軟件設(shè)計(jì)主要流程圖95.1主程序流程圖95.2 計(jì)算溫度流程圖105.3 液晶顯示流程圖115.4 讀出溫度子程序12第6章 系統(tǒng)仿真14第7章 總結(jié)與體會(huì)15主要參考資料16附錄17附錄一.源程序代碼17附錄二.軟件仿真圖29 第1章 引言隨著人們生活水平的不斷提高,單片機(jī)控制無疑是人們追求的目

2、標(biāo)之一,它所給人帶來的方便也是不可否定的,其中數(shù)字溫度計(jì)就是一個(gè)典型的例子,但人們對它的要求越來越高,要為現(xiàn)代人工作、科研、生活、提供更好的更方便的設(shè)施就需要從數(shù)單片機(jī)技術(shù)入手,一切向著數(shù)字化控制,智能化控制方向發(fā)展。在信息采集(傳感器技術(shù))、信息傳輸(通信技術(shù))和信息處理(計(jì)算機(jī)技術(shù))三大信息技術(shù)中,傳感器屬于信息技術(shù)的前沿尖端產(chǎn)品,尤其是溫度傳感器技術(shù),在我國各領(lǐng)域已經(jīng)引用的非常廣泛,可以說是滲透到社會(huì)的每一個(gè)領(lǐng)域,人民的生活與環(huán)境的溫度息息相關(guān),在工業(yè)生產(chǎn)過程中需要實(shí)時(shí)測量溫度,在農(nóng)業(yè)生產(chǎn)中也離不開溫度的測量,因此研究溫度的測量方法和裝置具有重要的意義。測量溫度的關(guān)鍵是溫度傳感器,溫度傳

3、感器的發(fā)展經(jīng)歷了三個(gè)發(fā)展階段:傳統(tǒng)的分立式溫度傳感器,模擬集成溫度傳感器,智能集成溫度傳感器。目前的智能溫度傳感器(亦稱數(shù)字溫度傳感器)是在20世紀(jì)90年代中期問世的,它是微電子技術(shù)、計(jì)算機(jī)技術(shù)和自動(dòng)測試技術(shù)(ATE)的結(jié)晶,特點(diǎn)是能輸出溫度數(shù)據(jù)及相關(guān)的溫度控制量,適配各種微控制器(MCU)。社會(huì)的發(fā)展使人們對傳感器的要求也越來越高,現(xiàn)在的溫度傳感器正在基于單片機(jī)的基礎(chǔ)上從模擬式向數(shù)字式,從集成化向智能化、網(wǎng)絡(luò)化的方向飛速發(fā)展,并朝著高精度、多功能、總線標(biāo)準(zhǔn)化、高可靠性及安全性、開發(fā)虛擬傳感器和網(wǎng)絡(luò)傳感器、研制單片測溫系統(tǒng)等高科技的方向迅速發(fā)展。本次課程設(shè)計(jì),利用Keil和Proteus軟件設(shè)

4、計(jì)和仿真該智能數(shù)字多點(diǎn)測溫系統(tǒng)。過程中所用到的主要電路由我們自主設(shè)計(jì)制作,通過查閱資料和借助指導(dǎo)老師最終設(shè)計(jì)出結(jié)構(gòu)合理、美觀,主要電氣指標(biāo)良好,性能穩(wěn)定可靠的電路。以培養(yǎng)我們嚴(yán)謹(jǐn)?shù)目茖W(xué)態(tài)度,正確的設(shè)計(jì)思想,科學(xué)的設(shè)計(jì)方法和良好的工作作風(fēng),掌握一定的專業(yè)技能及綜合運(yùn)用基礎(chǔ)理論、基本知識的能力。第2章 開發(fā)和仿真軟件簡介 2.1 開發(fā)軟件Keil C51 uVision2Keil uVISION2 是眾多單片機(jī)應(yīng)用開發(fā)軟件中優(yōu)秀的軟件之一,它支持眾多不同公司的MCS-51 架構(gòu)的芯片,它集編輯,編譯,仿真等于一體,同時(shí)還支持、PLM、匯編和C語言的程序設(shè)計(jì),界面友好,易學(xué)易用,在調(diào)試程序,軟件仿真

5、方面也有很強(qiáng)大的功能。Keil C51集成開發(fā)環(huán)境主要由菜單欄、工具欄、源文件編輯窗口、工程窗口和輸出窗口五部分組成。工具欄為一組快捷工具圖標(biāo),主要包括基本文件工具欄、建造工具欄和調(diào)試工具欄,基本文件工具欄包括新建、打開、拷貝、粘貼等基本操作。建造工具欄主要包括文件編譯、目標(biāo)文件編譯連接、所有目標(biāo)文件編譯連接、目標(biāo)選項(xiàng)和一個(gè)目標(biāo)選擇窗口。調(diào)試工具欄位于最后,主要包括一些仿真調(diào)試源程序的基本操作,如單步、復(fù)位、全速運(yùn)行等。在工具欄下面,默認(rèn)有三個(gè)窗口。左邊的工程窗口包含一個(gè)工程的目標(biāo)(target)、組(group)和項(xiàng)目文件。右邊為源文件編輯窗口,編輯窗口實(shí)質(zhì)上就是一個(gè)文件編輯器,我們可以在這

6、里對源文件進(jìn)行編輯、修改、粘貼等。下邊的為輸出窗口,源文件編譯之后的結(jié)果顯示在輸出窗口中,會(huì)出現(xiàn)通過或錯(cuò)誤(包括錯(cuò)誤類型及行號)的提示。如果通過則會(huì)生成“HEX”格式的目標(biāo)文件,用于仿真或燒錄芯片?;经h(huán)境如圖2-1所示: 圖2-1 Keil C51軟件的運(yùn)行界面 2.2 仿真軟件Proteus ISISProteus軟件是來自英國Labcenter electronics公司的EDA工具軟件。該軟件有十幾年的歷史,在全球廣泛使用,除了其具有和其它EDA工具一樣的原理布圖、PCB自動(dòng)或人工布線及電路仿真的功能外,其革命性的功能是,他的電路仿真是互動(dòng)的,針對微處理器的應(yīng)用,還可以直接在基于原理圖

7、的虛擬原型上編程,并實(shí)現(xiàn)軟件源碼級的實(shí)時(shí)調(diào)試,如有顯示及輸出,還能看到運(yùn)行后輸入輸出的效果,配合系統(tǒng)配置的虛擬儀器如示波器、邏輯分析儀等,為用戶建立了完備的電子設(shè)計(jì)開發(fā)環(huán)境。Proteus ISIS的工作界面是一種標(biāo)準(zhǔn)的Windows界面。主要包括:標(biāo)題欄、主菜單、標(biāo)準(zhǔn)工具欄、繪圖工具欄、狀態(tài)欄、對象選擇按鈕、預(yù)覽對象方位控制按鈕、仿真進(jìn)程控制按鈕、預(yù)覽窗口、對象選擇器窗口、圖形編輯窗口。主要功能是在圖形編輯窗口做出所需的電路圖。軟件的應(yīng)用設(shè)計(jì)界面如圖2-2所示:圖2-2 Proteus軟件的運(yùn)行界面第3章 總體設(shè)計(jì)方案此次課程設(shè)計(jì)要求設(shè)計(jì)一個(gè)簡易數(shù)字溫度計(jì)。采用AT89C51單片機(jī)作為系統(tǒng)的

8、控制電路,負(fù)責(zé)數(shù)據(jù)的采集、處理、發(fā)送??梢圆捎靡恢粶囟葌鞲衅鱀S18B20產(chǎn)生溫度數(shù)據(jù)并發(fā)送給單片機(jī),此傳感器,可以很容易直接讀取被測溫度值,進(jìn)行轉(zhuǎn)換,就可以滿足設(shè)計(jì)要求。顯示部分采用LCD2004顯示器。這種方法電路比較簡單,軟件設(shè)計(jì)也比較簡單??傮w設(shè)計(jì)框圖如下:振蕩電路51單片機(jī)LCD2004顯示器DSl8B20復(fù)位電路圖3.1總體設(shè)計(jì)框圖第4章 系統(tǒng)硬件使用介紹4.1 DS18B20溫度傳感器DS18B20可以程序設(shè)定912位的分辨率,精度為0.5C??蛇x更小的封裝方式,更寬的電壓適用范圍。分辨率設(shè)定,及用戶設(shè)定的報(bào)警溫度存儲在EPROM中,掉電后依然保存。溫度傳感器DS18B20引腳如

9、圖3所示。 8引腳封裝 TO92封裝圖4-1 溫度傳感器引腳功能說明: NC :空引腳,懸空不使用; VDD :可選電源腳,電源電壓范圍35.5V。當(dāng)工作于寄生電源時(shí),此引腳必須接地。 DQ :數(shù)據(jù)輸入/輸出腳。漏極開路,常態(tài)下高電平。 GND :為電源地DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報(bào)警觸發(fā)器TH和TL、配置寄存器。光刻ROM中的64位序列號是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼。64位光刻ROM的排列是:開始8位(28H)是產(chǎn)品類型標(biāo)號,接著的48位是該DS18B20自身的序列號,最后8位是前面56位的循環(huán)冗余校驗(yàn)碼

10、(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一個(gè)DS18B20都各不相同,這樣就可以實(shí)現(xiàn)一根總線上掛接多個(gè)DS18B20的目的。 DS18B20中的溫度傳感器可完成對溫度的測量,以12位轉(zhuǎn)化為例:用16位符號擴(kuò)展的二進(jìn)制補(bǔ)碼讀數(shù)形式提供,以0.0625/LSB形式表達(dá),其中S為符號位。 這是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲在18B20的兩個(gè)8比特的RAM中,二進(jìn)制中的前面5位是符號位,如果測得的溫度大于0,這5位為0,只要將測到的數(shù)值乘于0.0625即可得到實(shí)際溫度;如果溫度小于0,這5位為1,測到的數(shù)值需要取反加1再乘于0.0625即可得到實(shí)際溫度。 例如+125的數(shù)字輸出為0

11、7D0H,+25.0625的數(shù)字輸出為0191H,-25.0625的數(shù)字輸出為FF6FH,-55的數(shù)字輸出為FC90H。 DS18B20溫度傳感器的內(nèi)部存儲器包括一個(gè)高速暫存RAM和一個(gè)非易失性的可電擦除的E2RAM,后者存放高溫度和低溫度觸發(fā)器TH、TL和結(jié)構(gòu)寄存器。 暫存存儲器包含了8個(gè)連續(xù)字節(jié),前兩個(gè)字節(jié)是測得的溫度信息,第一個(gè)字節(jié)的內(nèi)容是溫度的低八位,第二個(gè)字節(jié)是溫度的高八位。第三個(gè)和第四個(gè)字節(jié)是TH、TL的易失性拷貝,第五個(gè)字節(jié)是結(jié)構(gòu)寄存器的易失性拷貝,這三個(gè)字節(jié)的內(nèi)容在每一次上電復(fù)位時(shí)被刷新。第六、七、八個(gè)字節(jié)用于內(nèi)部計(jì)算。第九個(gè)字節(jié)是冗余檢驗(yàn)字節(jié)。 該字節(jié)各位的意義如下:TM R

12、1 R0 1 1 1 1 1低五位一直都是1 ,TM是測試模式位,用于設(shè)置DS18B20在工作模式還是在測試模式。在DS18B20出廠時(shí)該位被設(shè)置為0,用戶不要去改動(dòng)。R1和R0用來設(shè)置分辨率,如表1所示:(DS18B20出廠時(shí)被設(shè)置為12位) 表1 DS18B20溫度轉(zhuǎn)換時(shí)間表R1R0分辨率/位溫度最大轉(zhuǎn)向時(shí)間00993.750110187.510113751112750根據(jù)DS18B20的通訊協(xié)議,主機(jī)控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過三個(gè)步驟:每一次讀寫之前都要對DS18B20進(jìn)行復(fù)位,復(fù)位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對DS18B20進(jìn)行預(yù)定的操作。復(fù)位要求

13、主CPU將數(shù)據(jù)線下拉500微秒,然后釋放,DS18B20收到信號后等待1660微秒左右,后發(fā)出60240微秒的存在低脈沖,主CPU收到此信號表示復(fù)位成功。4.2 單片機(jī)控制電路控制電路采用AT89C51作為控制電路主體,附加外部震蕩電路和復(fù)位電路。本設(shè)計(jì)用到的AT89C51內(nèi)部引腳介紹:圖 4.2 AT89C51內(nèi)部引腳 P0口:P0口為一個(gè)8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P0口的管腳第一次寫1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)地址的低八位。在FIASH編程時(shí),P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部

14、必須被拉高。 本設(shè)計(jì)中使用P0口作為輸出口,輸出單片機(jī)處理好的溫度信息到1602液晶顯示中。使用時(shí)必須外接上拉電阻以保證輸出的不是高阻態(tài)。如圖所示:圖 4.3 P0口接上拉電阻使用P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收。本設(shè)計(jì)中P1口作為輸出口輸出1602的控制信號,控制1602的顯示/EA/VPP:當(dāng)/EA保持低電平時(shí),則在此期間外部程序存儲器(0000H-FFFFH),不管是

15、否有內(nèi)部程序存儲器。注意加密方式1時(shí),/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時(shí),此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。 XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。 XTAL2:來自反向振蕩器的輸出。本設(shè)計(jì)中P0口需要接10k上拉電阻,否則為P0輸出高阻態(tài)。震蕩電路采用石英晶振接單片機(jī)XTAL1與XTAL2端口構(gòu)成內(nèi)部震蕩方式。電容C1,C2起穩(wěn)定震蕩頻率、快速起震的作用,電容值選用33pF。內(nèi)部振蕩的方式所得時(shí)鐘信號比較穩(wěn)定,電路中使用較多。圖4.4外部震蕩電路RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器

16、周期的高電平時(shí)間。復(fù)位電路采用的是開關(guān)復(fù)位方式,接單片機(jī)RST端口。圖4.5 復(fù)位電路4.3 顯示器采用LCD2004圖4.6 LCD1602引腳圖2004采用標(biāo)準(zhǔn)的16腳接口,其中: 第1腳:VSS為電源地 第2腳:VDD接5V電源正極 第3腳:V0為液晶顯示器對比度調(diào)整端,接正電源時(shí)對比度最弱,接地電源時(shí)對比度最高(對比度過高時(shí)會(huì) 產(chǎn)生“鬼影”,使用時(shí)可以通過一個(gè)10K的電位器調(diào)整對比度)。 第4腳:RS為寄存器選擇,高電平1時(shí)選擇數(shù)據(jù)寄存器、低電平0時(shí)選擇指令寄存器。接單片機(jī)P2.5口。 第5腳:RW為讀寫信號線,高電平(1)時(shí)進(jìn)行讀操作,低電平(0)時(shí)進(jìn)行寫操作。接單片機(jī)P2.6口。

17、第6腳:E(或EN)端為使能(enable)端。接單片機(jī)P2.7口。 第7-14腳:D0-D7為8位雙向數(shù)據(jù)端。接單片機(jī)P0口。 1602通過D0D7的8位數(shù)據(jù)端傳輸數(shù)據(jù)和指令。 顯示模式設(shè)置: (初始化) 0011 0000 0x38 設(shè)置204顯示,8位數(shù)據(jù)接口; 顯示開關(guān)及光標(biāo)設(shè)置: (初始化) 0000 1DCB D顯示(1有效)、C光標(biāo)顯示(1有效)、B光標(biāo)閃爍(1有效) 0000 01NS N=1(讀或?qū)懸粋€(gè)字符后地址指針加1 &光標(biāo)加1),N=0(讀或?qū)懸粋€(gè)字符后地址指針減1 &光標(biāo)減1), S=1 且 N=1 (當(dāng)寫一個(gè)字符后,整屏顯示左移) ,S=0 當(dāng)寫一個(gè)字符后,整屏顯示

18、不移動(dòng),數(shù)據(jù)指針設(shè)H,所以數(shù)據(jù)地址為80H+地址碼(0-27H,40-67H) 其他設(shè)置:置數(shù)據(jù)首地址為80,01H(顯示清屏,數(shù)據(jù)指針=0,所有顯示=0);02H(顯示回車,數(shù)據(jù)指針=0)第5章 系統(tǒng)軟件設(shè)計(jì)主要流程圖5.1主程序流程圖主程序的主要功能是負(fù)責(zé)溫度的實(shí)時(shí)顯示、讀出并處理DS18B20的測量的當(dāng)前溫度值。圖 5.1主程序流程圖設(shè)置堆棧指針將溫度轉(zhuǎn)換為BCD碼發(fā)讀存儲器命令讀溫度數(shù)據(jù)復(fù)位DS18B20發(fā)跳過ROM命令顯示緩沖區(qū)初始化更新數(shù)據(jù)緩沖區(qū)延時(shí)發(fā)溫度轉(zhuǎn)換命令復(fù)位DS18B20發(fā)跳過ROM命令開始5.2 計(jì)算溫度流程圖計(jì)算溫度子程序是將所輸入的數(shù)據(jù)進(jìn)行處理,包括正負(fù)判定,小數(shù)位

19、、百位、十位、個(gè)位計(jì)算開始溫度零下?溫度值取補(bǔ)碼置“”標(biāo)志計(jì)算小數(shù)位溫度BCD值計(jì)算整數(shù)位(百、十、個(gè)位)溫度BCD值 結(jié)束置“+”標(biāo)志NY圖5.2 計(jì)算溫度流程圖5.3 液晶顯示流程圖液晶顯示是將LCD1602進(jìn)行初始化并且確定好顯示位,并且將內(nèi)部存儲的數(shù)據(jù)信息進(jìn)行顯示。結(jié)束開始初始化LCD2004延時(shí)調(diào)用子程序設(shè)置第一行顯示位置與內(nèi)容調(diào)用子程序設(shè)置第一行顯示位置與內(nèi)容圖5.3液晶顯示流程圖5.4 讀出溫度子程序讀出溫度子程序的主要功能是讀出RAM中的9字節(jié),在讀出時(shí)需進(jìn)行CRC校驗(yàn),校驗(yàn)有錯(cuò)時(shí)不進(jìn)行溫度數(shù)據(jù)的改寫。其程序流程圖如下所示發(fā)DS18B20復(fù)位命令發(fā)跳過ROM命令發(fā)溫度轉(zhuǎn)換開始命

20、令 結(jié)束開始圖5.4 讀出溫度流程圖第6章 系統(tǒng)仿真圖6-1第7章 總結(jié)與體會(huì)經(jīng)過將近一周的單片機(jī)課程設(shè)計(jì),最終完成了我的數(shù)字溫度計(jì)的設(shè)計(jì),雖然沒有完全達(dá)到設(shè)計(jì)要求(特別是系統(tǒng)初始化過程中沒有消除85.0的初始顯示),但通過努力把程序弄懂修改好并且仿真實(shí)現(xiàn)了,還是很高興的。在本次設(shè)計(jì)的過程中,我發(fā)現(xiàn)很多的問題,雖然以前還做過類似的設(shè)計(jì)但這次設(shè)計(jì)真的讓我長進(jìn)了很多,單片機(jī)課程設(shè)計(jì)重點(diǎn)就在于軟件算法的設(shè)計(jì),需要有很巧妙的程序算法,雖然以前寫過幾次程序,但我覺的寫好一個(gè)程序并不是一件簡單的事,特別是這么長的程序,需要修改調(diào)試。我發(fā)現(xiàn)在單片機(jī)的學(xué)習(xí)過程中,只有我們?nèi)ピ囍隽耍拍苷嬲恼莆?,只學(xué)習(xí)理論

21、有些東西是很難理解的,更談不上掌握。從這次的課程設(shè)計(jì)中,我意識到在以后的學(xué)習(xí)中,要理論聯(lián)系實(shí)際,把我們所學(xué)的理論知識用到實(shí)際當(dāng)中,學(xué)習(xí)單機(jī)片機(jī)更是如此,程序只有在經(jīng)常的寫與讀的過程中才能提高,這就是我在這次課程設(shè)計(jì)中的最大收獲。通過這次對數(shù)字溫度計(jì)的設(shè)計(jì)與制作,讓我了解了設(shè)計(jì)電路的程序,也讓我了解了關(guān)于數(shù)字溫度計(jì)的原理與設(shè)計(jì)理念,要設(shè)計(jì)一個(gè)電路時(shí)我們應(yīng)該大膽嘗試小心求證。在確定自己的想法后要進(jìn)行一步步地仿真。在此感謝我們的張國旭老師,老師嚴(yán)謹(jǐn)細(xì)致、一絲不茍的作風(fēng)一直是我工作、學(xué)習(xí)中的榜樣;老師循循善誘的教導(dǎo)和不拘一格的思路給予我無盡的啟迪;這次簡易數(shù)字溫度計(jì)設(shè)計(jì)的每個(gè)實(shí)驗(yàn)細(xì)節(jié)和每個(gè)數(shù)據(jù),都離不

22、開老師您的細(xì)心指導(dǎo)。而您開朗的個(gè)性和寬容的態(tài)度,幫助我能夠很順利的完成了這次課程設(shè)計(jì)。同時(shí)感謝對我?guī)椭^的同學(xué)們,謝謝你們對我的幫助和支持,讓我感受到同學(xué)的友誼。主要參考資料1 肖看,李群芳.單片機(jī)原理、接口及應(yīng)用清華大學(xué)出版社.20102 樓然苗.單片機(jī)課程設(shè)計(jì)指導(dǎo).北京航空航天出版社.20023 孫育才.MCS-51 系列單片微型計(jì)算機(jī)及其應(yīng)用.東南大學(xué)出版社4 王法能. 單片機(jī)原理及應(yīng)用.科學(xué)出版社.20045 李飛光 .單片機(jī)課程設(shè)計(jì)實(shí)例指導(dǎo).北京航空航天大學(xué)出版社. 2004附錄附錄一.源程序代碼 TEMP_ZH EQU 24H ;實(shí)測溫度值存放單元 TEMPL EQU 25H TE

23、MPH EQU 26H TEMPHC EQU 29H ;正、負(fù)溫度值標(biāo)記 TEMPLC EQU 2AH TEMPFC EQU 2BH LCD_X EQU 2FH ;LCD 字符顯示位置 LCD_RS EQU P2.5 ;LCD 寄存器選擇信號 LCD_RW EQU P2.6 ;LCD 讀寫信號 LCD_EN EQU P2.7 ;LCD 允許信號 DQ EQU P3.2 ;DS18B20數(shù)據(jù)信號 ORG 0000HMAIN: MOV SP,#60H MOV A,#00H MOV R0,#20H ;將20H2FH 單元清零 MOV R1,#10HCLEAR: MOV R0,A INC R0 DJN

24、Z R1,CLEAR LCALL SET_LCDSTART: LCALL RST ;調(diào)用18B20復(fù)位子程序 LCALL MENU_OK ;DS1820存在,調(diào)用顯示正確信息子程序 LCALL TEMP_BJ ;顯示溫度標(biāo)記 JMP START2START2: LCALL RST;調(diào)用DS18B20復(fù)位子程序 MOV A,#0CCH ;跳過ROM匹配命令 LCALL WRITE MOV A,#44H ;溫度轉(zhuǎn)換命令 LCALL WRITE LCALL RST MOV A,#0CCH ;跳過ROM匹配 LCALL WRITE MOV A,#0BEH ;讀溫度命令 LCALL WRITE LCAL

25、L READ;調(diào)用DS18B20數(shù)據(jù)讀取操作子程序 LCALL CONVTEMP;調(diào)用溫度數(shù)據(jù)BCD 碼處理子程序 LCALL DISPBCD;調(diào)用溫度數(shù)據(jù)顯示子程序 LCALL CONV;調(diào)用LCD顯示處理子程序 SJMP START2 ;循環(huán);* 顯示溫度標(biāo)記子程序 *TEMP_BJ: MOV A,#0CBH LCALL WCOM MOV DPTR,#BJ1 ;指針指到顯示消息 MOV R1,#0 MOV R0,#3BBJJ1: MOV A,R1 MOVC A,A+DPTR LCALL WDATA INC R1 DJNZ R0,BBJJ1 RETBJ1: DB 00H,C;* 顯示正確信息

26、子程序*MENU_OK: MOV DPTR,#M_OK1 ;指針指到顯示消息 MOV A,#1 ;顯示在第一行 LCALL LCD_PRINT MOV DPTR,#M_OK2 MOV A,#2 LCALL LCD_PRINT MOV DPTR,#M_OK3 MOV A,#3 LCALL LCD_PRINT RETM_OK1: DB OK 4130220238 ,0M_OK2: DB ,0M_OK3: DB DATE:2016-1-26 ,0;*DS18B20復(fù)位子程序(初始化)*RST: SETB DQ NOP CLR DQ MOV R0,#6BH ;主機(jī)發(fā)出延時(shí)復(fù)位低脈沖 MOV R1,#0

27、4HTSR1: DJNZ R0,$ MOV R0,#6BH DJNZ R1,TSR1 SETB DQ ;拉高數(shù)據(jù)線 NOP NOP NOPTSR5: MOV R0,#06BHTSR6: DJNZ R0,$ ; 時(shí)序要求延時(shí)一段時(shí)間TSR7: SETB DQ RET;* 將自定義字符寫入LCD的CGRAM中*STORE_DATA: MOV A,#40H LCALL WCOM MOV R2,#08H MOV DPTR,#D_DATA MOV R3,#00HS_DATA: MOV A,R3 MOVC A,A+DPTR LCALL WDATA ;寫入數(shù)據(jù) INC R3 DJNZ R2,S_DATA R

28、ETD_DATA: DB 0CH,12H,12H,0CH,00H,00H,00H,00H;* DS18B20數(shù)據(jù)寫入操作子程序 *WRITE: MOV R2,#8 ;一共8位數(shù)據(jù) CLR CWR1: CLR DQ ;開始寫入DS18B20總線要處于復(fù)位(低)狀態(tài) MOV R3,#07 DJNZ R3,$ ;總線復(fù)位保持16微妙以上 RRC A ;把一個(gè)字節(jié)DATA 分成8個(gè)BIT環(huán)移給C MOV DQ,C ;寫入一位 MOV R3,#3CH DJNZ R3,$ ;等待100微妙 SETB DQ ;重新釋放總線 NOP DJNZ R2,WR1 ;寫入下一位 SETB DQ RET;* DS18B

29、20數(shù)據(jù)讀取操作子程序 *READ: MOV R4,#4 ;將溫度低位、高位、TH、TL從DS18B20中讀出 MOV R1,#TEMPL ;存入25H、26H、27H、28H單元RE00: MOV R2,#8RE01: CLR CY SETB DQ NOP NOP CLR DQ ;讀前總線保持為低 NOP NOP NOP SETB DQ ;開始讀總線釋放 MOV R3,#09 ;延時(shí)18微妙 DJNZ R3,$ MOV C,DQ ;從DS18B20總線讀得一位 MOV R3,#3CH DJNZ R3,$ ;等待100微妙 RRC A ;把讀得的位值環(huán)移給A DJNZ R2,RE01 ;讀下一

30、位 MOV R1,A INC R1 DJNZ R4,RE00 RET;* 溫度值 BCD 碼處理子程序 *CONVTEMP: MOV A,TEMPH ;判溫度是否零下 ANL A,#08H JZ TEMPC1 ;溫度零上轉(zhuǎn) CLR C MOV A,TEMPL ;二進(jìn)制數(shù)求補(bǔ)(雙字節(jié)) CPL A ;取反加1 ADD A,#01H MOV TEMPL,A MOV A,TEMPH CPL A ADDC A,#00H MOV TEMPH,A MOV TEMPHC,#0BH;負(fù)溫度標(biāo)志 MOV TEMPFC,#0BH SJMP TEMPC11TEMPC1: MOV TEMPHC,#0AH ;正溫度標(biāo)志

31、 MOV TEMPFC,#0AHTEMPC11: MOV A,TEMPHC SWAP A MOV TEMPHC,A MOV A,TEMPL ANL A,#0FH ;乘0.0625 MOV DPTR,#TEMPDOTTAB MOVC A,A+DPTR MOV TEMPLC,A ;TEMPLC LOW=小數(shù)部分 BCD MOV A,TEMPL ;整數(shù)部分 ANL A,#0F0H ;取出高四位 SWAP A MOV TEMPL,A MOV A,TEMPH ;取出低四位 ANL A,#0FH SWAP A ORL A,TEMPL ;重新組合 MOV TEMP_ZH,A LCALL HEX2BCD1 M

32、OV TEMPL,A ANL A,#0F0H SWAP A ORL A,TEMPHC ;TEMPHC LOW = 十位數(shù) BCD MOV TEMPHC,A MOV A,TEMPL ANL A,#0FH SWAP A ;TEMPLC HI = 個(gè)位數(shù) BCD ORL A,TEMPLC MOV TEMPLC,A MOV A,R4 JZ TEMPC12 ANL A,#0FH SWAP A MOV R4,A MOV A,TEMPHC ;TEMPHC HI = 百位數(shù) BCD ANL A,#0FH ORL A,R4 MOV TEMPHC,ATEMPC12: RET;* 二-十進(jìn)制轉(zhuǎn)換子程序 *HEX2B

33、CD1: MOV B,#064H DIV AB MOV R4,A MOV A,#0AH XCH A,B DIV AB SWAP A ORL A,B RETTEMPDOTTAB: DB 00H,00H,01H,01H,02H,03H,03H,04H ; 小數(shù)部分碼表 DB 05H,05H,06H,06H,07H,08H,08H,09H;* LCD顯示子程序 *SHOW_DIG2H: MOV B,#100 DIV AB ADD A,#30H PUSH B MOV B,LCD_X LCALL LCDP2 POP B MOV A,#0AH XCH A,B DIV AB ADD A,#30H INC L

34、CD_X PUSH B MOV B,LCD_X LCALL LCDP2 POP B INC LCD_X MOV A,B MOV B,LCD_X ADD A,#30H LCALL LCDP2 RETSHOW_DIG2L: MOV B,#100 DIV AB MOV A,#0AH XCH A,B DIV AB ADD A,#30H PUSH B MOV B,LCD_X LCALL LCDP2 POP B INC LCD_X MOV A,B MOV B,LCD_X ADD A,#30H LCALL LCDP2 RET;* 顯示區(qū) BCD 碼溫度值刷新子程序 *DISPBCD: MOV A,TEMPL

35、C ANL A,#0FH MOV 70H,A ;小數(shù)位 MOV A,TEMPLC SWAP A ANL A,#0FH MOV 71H,A ;個(gè)位 MOV A,TEMPHC ANL A,#0FH MOV 72H,A ;十位 MOV A,TEMPHC SWAP A ANL A,#0FH MOV 73H,A ;百位 RET;* LCD 顯示數(shù)據(jù)處理子程序 *CONV: MOV A,73H ;加載百位數(shù)據(jù) MOV LCD_X,#6 ;設(shè)置位置 CJNE A,#1,CONV1 JMP CONV2CONV1: CJNE A,#0BH,CONV11 MOV A,#- ;-號顯示 JMP CONV111CON

36、V11: MOV A,#0 ;+號不顯示CONV111: MOV B,LCD_X LCALL LCDP2 JMP CONV3CONV2: LCALL SHOW_DIG2 ;顯示數(shù)據(jù)CONV3: INC LCD_X MOV A,72H ;十位 LCALL SHOW_DIG2 INC LCD_X MOV A,71H ;個(gè)位 LCALL SHOW_DIG2 INC LCD_X MOV A,#. MOV B,LCD_X LCALL LCDP2 MOV A,70H ;加載小數(shù)點(diǎn)位 INC LCD_X ;設(shè)置顯示位置 LCALL SHOW_DIG2 ;顯示數(shù)據(jù) RET;* 第二行顯示數(shù)字子程序 *SHOW

37、_DIG2:ADD A,#30H MOV B,LCD_X LCALL LCDP2 RET;* 第二行顯示數(shù)字子程序 *LCDP2: PUSH ACC MOV A,B ;設(shè)置顯示地址 ADD A,#0C0H ;設(shè)置LCD的第二行地址 LCALL WCOM ;寫入命令 POP ACC ;由堆棧取出A LCALL WDATA ;寫入數(shù)據(jù) RET;* 對 LCD 做初始化設(shè)置及測試*SET_LCD: CLR LCD_EN LCALL INIT_LCD ;初始化 LCD LCALL STORE_DATA ;將自定義字符存入LCD的CGRAM RET;* LCD初始化 *INIT_LCD: MOV A,#38H ;2行顯示,字形5*7點(diǎn)陣 LCALL WCOM LCALL DELAY1 MOV A,#38H LCALL WCOM LCALL DELAY1 MOV A,#38H LCA

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論