51單片機(jī)課程設(shè)計(jì)數(shù)字溫度計(jì)報(bào)告_第1頁
51單片機(jī)課程設(shè)計(jì)數(shù)字溫度計(jì)報(bào)告_第2頁
51單片機(jī)課程設(shè)計(jì)數(shù)字溫度計(jì)報(bào)告_第3頁
51單片機(jī)課程設(shè)計(jì)數(shù)字溫度計(jì)報(bào)告_第4頁
51單片機(jī)課程設(shè)計(jì)數(shù)字溫度計(jì)報(bào)告_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 電子畢業(yè)設(shè)計(jì)數(shù)字溫度計(jì)題目: 數(shù)顯溫度計(jì) 學(xué)院: 電子信息學(xué)院 班級: 學(xué)號: 姓名: 指導(dǎo)老師: 日期:數(shù)字溫度計(jì)設(shè)計(jì)任務(wù)書一、 課程設(shè)計(jì)目的1、 加強(qiáng)學(xué)生理論聯(lián)系實(shí)際的能力,提高學(xué)生的動手能力;2、 學(xué)會基本電子元器件的識別和檢測;3、 學(xué)會應(yīng)用eda軟件proteus進(jìn)行電路的設(shè)計(jì)和仿真;4、 基本掌握單片機(jī)的基本原理,并能將其應(yīng)用于系統(tǒng)的設(shè)計(jì)。5、 通過實(shí)訓(xùn),提高學(xué)生的學(xué)習(xí)興趣,激發(fā)自主學(xué)習(xí)能力,培養(yǎng)創(chuàng)新意識。二、 設(shè)計(jì)任務(wù)先焊制一個(gè)單片機(jī)最小系統(tǒng),并以制作的單片機(jī)最小系統(tǒng)為核心,設(shè)計(jì)并制作一個(gè)數(shù)字式溫度計(jì)應(yīng)用系統(tǒng)。三、 設(shè)計(jì)要求具有以下功能:(1) 采用ds18b20作為溫度傳感器

2、進(jìn)行溫度檢測;(2) 對采集溫度進(jìn)行顯示(顯示溫度分辨率0.1);(3) 采集溫度數(shù)值應(yīng)采用數(shù)字濾波措施,保證顯示數(shù)據(jù)穩(wěn)定;(4) 顯示數(shù)據(jù),無數(shù)據(jù)位必須消隱。目錄數(shù)字溫度計(jì)設(shè)計(jì)任務(wù)書 21、 設(shè)計(jì)思路(1) 設(shè)計(jì)原理 4(2) 系統(tǒng)方案及總體設(shè)計(jì)框圖 42、 數(shù)字溫度計(jì)應(yīng)用系統(tǒng)的硬件設(shè)計(jì)(1) 單片機(jī)小系統(tǒng)基本組成及硬件圖 (2) 外圍電路工作原理及系統(tǒng)硬件圖 (3) 主要芯片及其功能 3、 系統(tǒng)軟件程序的設(shè)計(jì)軟件流程框圖 4、 系統(tǒng)調(diào)試(1) 仿真器介紹 (2) 調(diào)試結(jié)果及其分析(3) 系統(tǒng)設(shè)計(jì)電路的特點(diǎn)和方案的優(yōu)缺點(diǎn) 5、 課程設(shè)計(jì)心得體會參考文獻(xiàn)附錄 程序清單及注釋一、 設(shè)計(jì)思路:設(shè)計(jì)

3、方案及其總體設(shè)計(jì)框圖單片機(jī)芯片at89s521602顯示器晶振控制溫度檢測電路ds18b20溫度計(jì)設(shè)計(jì)系統(tǒng)流程圖系統(tǒng)設(shè)計(jì)原理:本次課程設(shè)計(jì)是基于單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì),在開始課程設(shè)計(jì)的時(shí)候我們要理解并掌握對單片機(jī)的開發(fā),學(xué)會使用keil及proteus等仿真軟件。根據(jù)設(shè)計(jì)任務(wù)要求選擇好器件,編寫好程序運(yùn)行成功之后進(jìn)行軟件聯(lián)調(diào),驗(yàn)證系統(tǒng)是否正確。通過篩選,我們組選用單片機(jī)at89s52作為主控制系統(tǒng);用1602液晶顯示模塊芯片作為溫度數(shù)據(jù)顯示裝置;智能溫度傳感器采用ds18b20器件作為測溫電路主要組成部分。 開始進(jìn)入緩沖區(qū)初始化復(fù)位ds18b20發(fā)跳過rom命令溫度轉(zhuǎn)換命令延時(shí)復(fù)位ds18b2

4、0,跳過rom命令讀存儲器命令讀溫度命令更新數(shù)據(jù)緩沖區(qū)將溫度轉(zhuǎn)換為bcd碼二、數(shù)字溫度計(jì)應(yīng)用系統(tǒng)的硬件設(shè)計(jì)1、單片機(jī)小系統(tǒng)的基本組成及其選擇(1)單片機(jī)單片機(jī)選型參考 at89s51、at89s52 :具備isp下載功能 ,可以使用usbasp程序下載線或者并口下載 stc89c51、stc89c52:使用串口線+max232燒寫程序。 at89c51、at89c52 :可以在最小系統(tǒng)板上使用,但需要另外用編程器燒寫程序 本次課程設(shè)計(jì)選用at89s52型號單片機(jī)進(jìn)行操作。at89s52是一個(gè)低功耗,高性能cmos 8位單片機(jī),片內(nèi)含8k bytes isp(in-system programm

5、able)的可反復(fù)擦寫1000次的flash只讀程序存儲器,器件采用atmel公司的高密度、非易失性存儲技術(shù)制造,兼容標(biāo)準(zhǔn)mcs -51指令系統(tǒng)及80c51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和isp flash存儲單元,功能強(qiáng)大的微型計(jì)算機(jī)的at89s52可為許多嵌入式控制應(yīng)用系統(tǒng)提供高性價(jià)比的解決方案。   at89s52具有如下特點(diǎn):40個(gè)引腳,8k bytes flash片內(nèi)程序存儲器,256 bytes的隨機(jī)存取數(shù)據(jù)存儲器(ram),32個(gè)外部雙向輸入/輸出(i/o)口,5個(gè)中斷優(yōu)先級2層中斷嵌套中斷,2個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè) 全雙工串行通信口,看門狗

6、(wdt)電路,片內(nèi)時(shí)鐘振蕩器。        at89s52引腳圖     此外,at89s52設(shè)計(jì)和配置了振蕩頻率可為0hz并可通過軟件設(shè)置省電模式??臻e模式下,cpu暫停工作,而ram定時(shí)計(jì)數(shù)器,串行口,外中斷 系統(tǒng)可繼續(xù)工作,掉電模式凍結(jié)振蕩器而保存ram的數(shù)據(jù),停止芯片其它功能直至外中斷激活或硬件復(fù)位。同時(shí)該芯片還具有pdip、tqfp和plcc等三 種封裝形式,以適應(yīng)不同產(chǎn)品的需求。        at89s52引腳圖    

7、0; 此外,at89s52設(shè)計(jì)和配置了振蕩頻率可為0hz并可通過軟件設(shè)置省電模式??臻e模式下,cpu暫停工作,而ram定時(shí)計(jì)數(shù)器,串行口,外中斷 系統(tǒng)可繼續(xù)工作,掉電模式凍結(jié)振蕩器而保存ram的數(shù)據(jù),停止芯片其它功能直至外中斷激活或硬件復(fù)位。同時(shí)該芯片還具有pdip、tqfp和plcc等三 種封裝形式,以適應(yīng)不同產(chǎn)品的需求。(4) 電源 電源適配器供電:dc座(三個(gè)管腳) usb供電:3、時(shí)鐘石英晶振電路結(jié)構(gòu)原理如右圖所示 4、i/o口&接口 所有i/o用排針引出 串行通信口:p3.0,p3.1 isp:p1.6,p1.7單片機(jī)共有4個(gè)8位雙向并行i/o通道口,每位均有自己的鎖存器、輸

8、出驅(qū)動器和輸入緩沖器組成。這種結(jié)構(gòu),在數(shù)據(jù)輸出時(shí)可以鎖存,及輸出新的數(shù)據(jù)以前,通道口上的原始數(shù)據(jù)不變。但對輸入信息是不鎖存的,所以從外部輸入的信息必須保持到取數(shù)指令執(zhí)行完為止。2、外圍電路工作原理及系統(tǒng)硬件圖 3、主要芯片及其功能at89s52(1)at89s52各引腳及i/o口介紹 p0口也可用做訪問片外數(shù)據(jù)存儲器和程序存儲器時(shí)的低8位地址/數(shù)據(jù)總線的復(fù)用口。這種情況下,p0口內(nèi)含上拉電阻。在flash編程時(shí),p0口輸入代碼數(shù)據(jù);在flash校驗(yàn)時(shí),p0口輸出代碼數(shù)據(jù)。在進(jìn)行編程校驗(yàn)時(shí),需外接10k的上拉電阻。p1口8位、雙向i/o口,內(nèi)含上拉電阻。p1口為用戶使用的通用i/o口,每個(gè)引腳可

9、驅(qū)動4個(gè)ttl負(fù)載。當(dāng)用做輸入時(shí),每個(gè)端口首先置1。p1.0和p1.1引腳也用做定時(shí)器2的外部計(jì)數(shù)輸入(p1.0/t2)和觸發(fā)器輸入(p1.1/t2dx)。在編程和校驗(yàn)期間,p1口可輸入低字節(jié)地址。 p2口8位、雙向i/o口,內(nèi)部具有上拉電阻。p2口可用做通用i/o,可以驅(qū)動4個(gè)ttl負(fù)載。對p2口各位寫入1,可作為輸入。每個(gè)引腳由外部負(fù)載拉為低電平時(shí),經(jīng)由內(nèi)部上拉電阻向外輸出電流。在訪問16位地址的外部程序存儲器和數(shù)據(jù)存儲器時(shí),p2口提供高8位地址。用movx dptr類指令訪問外部數(shù)據(jù)存儲器時(shí),p2口為高8位地址(即pch);用movx r0和movx r1類指令訪問外部數(shù)據(jù)存儲器時(shí),p2

10、口上的內(nèi)容是sfr p2的內(nèi)容。在編程和校驗(yàn)時(shí),p2口接收地址線的高位和一些控制信號。p3口8位、雙向i/o口,內(nèi)部含有上拉電阻。 p3口可用做通用i/o口,可驅(qū)動4個(gè)ttl負(fù)載。當(dāng)用做輸入熟,要先將p3口各位置如外部負(fù)載將p3口拉低,則經(jīng)過上拉電阻向外輸出電流。在編程和校驗(yàn)時(shí),p3口接收某些控制信號。 地址鎖存允許/編程脈沖輸入。 外部程序存儲器讀選通,低電平有效。 片外程序存儲器訪問允許。 xtal1和xtal2xtal1是片內(nèi)振蕩器反相放大器和時(shí)鐘發(fā)生器的輸入端,xtal2是片內(nèi)振蕩器反相放大器的輸出端。 (2)at89s52實(shí)物與仿真的區(qū)別ds18b20ds18b20溫度傳感器是美國d

11、allas半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測溫元件相比,它能直接讀出被測溫度,并且可根據(jù)實(shí)際要求通過簡單的編程實(shí)現(xiàn)9-12位的數(shù)字值讀數(shù)方式。ds18b20的性能特點(diǎn)如下:(1)獨(dú)特的單線接口僅需要一個(gè)端口引腳進(jìn)行通信,ds18b20在與微處理器連接時(shí)僅需要一條口線即可實(shí)現(xiàn)微處理器與ds18b20的雙向通訊。(2)ds18b20支持多點(diǎn)組網(wǎng)功能,多個(gè)ds18b20可以并聯(lián)在惟一的三線上,實(shí)現(xiàn)多點(diǎn)組網(wǎng)測溫;(3)無須外部器件,全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi);(4)可通過數(shù)據(jù)線供電,電壓范圍為3.0-5.5;(5)零待機(jī)功耗;(6)溫度以9或

12、12位數(shù)字,對應(yīng)的可分辨溫度分別為0.5、0.25、0.125和0.0625,可實(shí)現(xiàn)高精度測溫;(7)用戶可定義報(bào)警設(shè)置;(8)報(bào)警搜索命令識別并標(biāo)志超過程序限定溫度(溫度報(bào)警條件)的器件;(9)負(fù)電壓特性,電源極性接反時(shí),溫度計(jì)不會因發(fā)熱而燒毀,但不能正常工作;(10)測量結(jié)果直接輸出數(shù)字溫度信號,以"一線總線"串行傳送給cpu,同時(shí)可傳送crc校驗(yàn)碼,具有極強(qiáng)的抗干擾糾錯(cuò)能力ds18b20采用3腳pr35封裝或8腳soic封裝,其引腳排列及內(nèi)部結(jié)構(gòu)框圖如圖及測溫原理圖如下所示:1602液晶顯示屏調(diào)用子程序設(shè)置第二行顯示位置與內(nèi)容調(diào)用子程序設(shè)置第一行顯示位置與內(nèi)容 160

13、2液晶顯示流程圖:延時(shí)初始化1602開始 三、系統(tǒng)軟件程序的設(shè)計(jì)(見附錄): 軟件流程框圖:發(fā)ds18b20復(fù)位命令初始化發(fā)跳過rom命令調(diào)用顯示子程序n發(fā)讀取溫度命令是否正確讀取操作并進(jìn)行校驗(yàn)ny初次上串yn字節(jié)是否讀完n讀出溫度值,溫度計(jì)算,處理顯示,數(shù)據(jù)刷新yn校驗(yàn)是否正確發(fā)溫度轉(zhuǎn)換開始命令移入溫度暫存器主程序流程圖讀溫度流程圖結(jié)束四、系統(tǒng)調(diào)試:1、仿真器的介紹:keil c51是美國keil software公司出品的51系列兼容單片機(jī)c語言軟件開發(fā)系統(tǒng),與匯編相比,c語言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢,因而易學(xué)易用。keil提供了包括c編譯器、宏匯編、連接器、庫管理

14、和一個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個(gè)集成開發(fā)環(huán)境(uvision)將這些部分組合在一起。運(yùn)行keil軟件需要win98、nt、win2000、winxp等操作系統(tǒng)。如果使用c語言編程,那么keil幾乎就是不二之選,即使不使用c語言而僅用匯編語言編程,其方便易用的集成環(huán)境、強(qiáng)大的軟件仿真調(diào)試工具也會令你事半功倍。 keil軟件的開發(fā)運(yùn)用 (1)keil c51單片機(jī)軟件開發(fā)系統(tǒng)的整體結(jié)構(gòu) c51工具包的整體結(jié)構(gòu),uvision與ishell分別是c51 for windows和for dos的集成開發(fā)環(huán)境(ide),可以完成編輯、編譯、連接、調(diào)試、仿真等整個(gè)開發(fā)流程。開發(fā)人員

15、可用ide本身或其它編輯器編輯c或匯編源文件。然后分別由c51及c51編譯器編譯生成目標(biāo)文件(.obj)。目標(biāo)文件可由lib51創(chuàng)建生成庫文件,也可以與庫文件一起經(jīng)l51連接定位生成絕對目標(biāo)文件(.abs)。abs文件由oh51轉(zhuǎn)換成標(biāo)準(zhǔn)的hex文件,以供調(diào)試器dscope51或tscope51使用進(jìn)行源代碼級調(diào)試,也可由仿真器使用直接對目標(biāo)板進(jìn)行調(diào)試,也可以直接寫入程序存貯器如eprom中。(2)使用獨(dú)立的keil仿真器時(shí),注意事項(xiàng) l 仿真器標(biāo)配11.0592mhz的晶振,但用戶可以在仿真器上的晶振插孔中換插其他頻率的晶振。 l 仿真器上的復(fù)位按鈕只復(fù)位仿真芯片,不復(fù)位目標(biāo)系統(tǒng)。 l 仿真

16、芯片的31腳(/ea)已接至高電平,所以仿真時(shí)只能使用片內(nèi)rom,不能使用片外rom;但仿真器外引插針中的31腳并不與仿真芯片的31腳相連,故該仿真器仍可插入到擴(kuò)展有外部rom(其cpu的/ea引腳接至低電平)的目標(biāo)系統(tǒng)中使用。 proteus軟件的開發(fā)運(yùn)用(1) protues 軟件介紹proteus 是目前最好的模擬單片機(jī)外圍器件的工具,它可以仿真51系列、avr,pic 等常用的mcu 及其外圍電路。本文基于proteus 6.9 和keil uvision3 軟件。proteus 與其它單片機(jī)仿真軟件不同的是,它不僅能仿真單片機(jī)cpu 的工作情況,也能仿真單片機(jī)外圍電路或沒有單片機(jī)參與

17、的其它電路的工作情況。因此在仿真和程序調(diào)試時(shí),關(guān)心的不再是某些語句執(zhí)行時(shí)單片機(jī)寄存器和存儲器內(nèi)容的改變,而是從工程的角度直接看程序運(yùn)行和電路工作的過程和結(jié)果。對于這樣的仿真實(shí)驗(yàn),從某種意義上講,是彌補(bǔ)了實(shí)驗(yàn)和工程應(yīng)用間脫節(jié)的矛盾和現(xiàn)象。(2) proteus 的工作過程運(yùn)行proteus 的isis 程序后,進(jìn)入該仿真軟件的主界面。在工作前,要設(shè)置view 菜單下的捕捉對齊和system 下的顏色、圖形界面大小等項(xiàng)目。通過工具欄中的p 命令,在pick devices 窗口中選擇電路所需的元件,放置元件并調(diào)整其相對位置,元件參數(shù)設(shè)置,元器件間連線,編寫程序;在source 菜單的define

18、code generation tools 菜單命令下,選擇程序編譯的工具、路徑、擴(kuò)展名等項(xiàng)目;在source 菜單的add/removesource files 命令下,加入單片機(jī)硬件電路的對應(yīng)程序;通過debug 菜單的相應(yīng)命令仿真程序和電路的運(yùn)行情況。proteus 軟件提供了30 多個(gè)元件庫,數(shù)千種元件。元件涉及數(shù)字和模擬、交流和直流等。2、系統(tǒng)整體調(diào)試調(diào)試結(jié)果 結(jié)果分析 在運(yùn)行仿真結(jié)果時(shí)通過改變溫度傳感器ds18b20的溫度,然后調(diào)用各種子函數(shù),可以改變液晶顯示1602的第二行顯示數(shù)據(jù),說明程序編寫正確。系統(tǒng)設(shè)計(jì)電路的特點(diǎn)和方案的優(yōu)缺點(diǎn)我們組設(shè)計(jì)的數(shù)字溫度計(jì)系統(tǒng)知識運(yùn)用簡單的at89

19、s52芯片的i/o口傳輸功能,通過幾個(gè)小的讀數(shù)據(jù)、傳遞數(shù)據(jù)、延時(shí)子函數(shù)實(shí)現(xiàn)溫度的讀取傳輸功能,是比較簡單,容易實(shí)現(xiàn)的,所以我們的系統(tǒng)只是實(shí)現(xiàn)了一些簡單的功能,系統(tǒng)整體來說比較簡易,但好像這個(gè)溫度計(jì)沒有多大的應(yīng)用價(jià)值,所以我們后續(xù)分析覺得這個(gè)系統(tǒng)可以加一個(gè)溫度復(fù)位系統(tǒng)提高at89s52芯片的功能價(jià)值,也提高數(shù)字溫度計(jì)的智能價(jià)值,還可以增加一個(gè)報(bào)警子函數(shù),實(shí)現(xiàn)智能數(shù)字溫度計(jì)更高的應(yīng)用價(jià)值。五、課程設(shè)計(jì)心得體會: 經(jīng)過這次單片機(jī)課程設(shè)計(jì),終于完成了我的數(shù)字溫度計(jì)的設(shè)計(jì),雖然不能做到很完美,但從心底里說,還是高興的,畢竟這次設(shè)計(jì)把實(shí)物都做了出來,高興之余不得不深思呀!在本次設(shè)計(jì)的過程中,我發(fā)現(xiàn)很多的問

20、題,也許是第一次進(jìn)行這種系統(tǒng)的設(shè)計(jì)所以感覺完成這樣一次小系統(tǒng)設(shè)計(jì)我長進(jìn)了很多,單片機(jī)課程設(shè)計(jì)重點(diǎn)就在于軟件算法的設(shè)計(jì),需要有很巧妙的程序算法,雖然以前寫過幾次程序,但我覺的寫好一個(gè)程序并不是一件簡單的事,舉個(gè)例子,以前寫的那幾次,數(shù)據(jù)加減時(shí),我用的都是bcd碼,這一次,我全部用的都是16進(jìn)制的數(shù)直接加減,顯示處理時(shí)在用除法去刪分,感覺效果比較好,有好多的東西,只有我們?nèi)ピ囍隽耍拍苷嬲恼莆?,只學(xué)習(xí)理論有些東西是很難理解的,更談不上掌握。從這次的課程設(shè)計(jì)中,我真真正正的意識到,在以后的學(xué)習(xí)中,要理論聯(lián)系實(shí)際,把我們所學(xué)的理論知識用到實(shí)際當(dāng)中,學(xué)習(xí)單機(jī)片機(jī)更是如此,程序只有在經(jīng)常的寫與讀的過程

21、中才能提高,這就是我在這次課程設(shè)計(jì)中的最大收獲。通過這次對數(shù)字溫度計(jì)的設(shè)計(jì)與制作,讓我了解了設(shè)計(jì)電路的程序,也讓我了解了關(guān)于數(shù)字溫度計(jì)的原理與設(shè)計(jì)理念,要設(shè)計(jì)一個(gè)電路總要先用仿真仿真成功之后才實(shí)際接線的。但是最后的成品卻不一定與仿真時(shí)完全一樣,因?yàn)?,再?shí)際接線中有著各種各樣的條件制約著。而且,在仿真中無法成功的電路接法,在實(shí)際中因?yàn)樾酒旧淼奶匦远軌虺晒?。所以,在設(shè)計(jì)時(shí)應(yīng)考慮兩者的差異,從中找出最適合的設(shè)計(jì)方法。 通過這次學(xué)習(xí),讓我對各種電路都有了大概的了解,所以說,坐而言不如立而行,對于這些電路還是應(yīng)該自己動手實(shí)際操作才會有深刻理解。從這次的課程設(shè)計(jì)中,我真真正正的意識到,在以后的學(xué)習(xí)中,

22、要理論聯(lián)系實(shí)際,把我們所學(xué)的理論知識用到實(shí)際當(dāng)中,學(xué)習(xí)單機(jī)片機(jī)更是如此,程序只有在經(jīng)常的寫與讀的過程中才能提高,這就是我在這次課程設(shè)計(jì)中的最大收獲。參考文獻(xiàn):12科技教育創(chuàng)新中國科技信息2010 年第11 期 china science and technology information jun.2010附錄:程序清單及其注釋: /使用1602lcd顯示ds18b20轉(zhuǎn)換的溫度值 #include <reg52.h> #include <intrins.h> #include <math.h> #define uchar unsigned char #de

23、fine uint unsigned int sbit rs = p26; /數(shù)據(jù)/命令選擇端(h/l) sbit lcden = p27; /使能端 void delayus() /短延時(shí) _nop_(); void delayms(uint a) /長延時(shí) uint i, j; for(i = a; i > 0; i-) for(j = 100; j > 0; j-); /第一行開始地址為0x80, 第二行開始地址為0xc0; /寫命令:rs=0, rw=0; void writecomm(uchar comm) rs = 0; p1 = comm; lcden = 1; de

24、layus(); lcden = 0; delayms(1); /寫數(shù)據(jù):rs=1, rw=00 void writedata(uchar dat) rs = 1; p1 = dat; lcden = 1; delayus(); lcden = 0; delayms(1); /初始化函數(shù) /顯示模式, 固定指令為00111000=0x38, 16*2顯示, 5*7點(diǎn)陣,8位數(shù)據(jù)接口 /顯示開/關(guān)及光標(biāo)設(shè)置00001100=0x0c /指令1: 00001dcb : d:開顯示/關(guān)顯示(h/l); c:顯示光標(biāo)/不顯示(h/l), b:光標(biāo)閃爍/不閃爍(h/l) /指令2: 000001ns :

25、 /n=1, 當(dāng)讀/寫一個(gè)字符后地址指針加1, 且光標(biāo)也加1; n=0則相反 /s=1, 當(dāng)寫一個(gè)字符, 整屏顯示左移(n=1)或右移(n=0), 但光標(biāo)不移動; s=0, 整屏不移動 void init() writecomm(0x38); /顯示模式 writecomm(0x0c); /開顯示, 關(guān)光標(biāo) writecomm(0x06); /寫字符后地址加1, 光標(biāo)加1 writecomm(0x01); /清屏 void writestring(uchar * str, uchar length) uchar i; for(i = 0; i < length; i+) writedat

26、a(stri); /*ds18b20*/ sbit ds = p34; /初始化ds18b20 /讓ds18b20一段相對長時(shí)間低電平, 然后一段相對非常短時(shí)間高電平, 即可啟動 void dsinit() /對于11.0592mhz時(shí)鐘, unsigned int型的i, 作一個(gè)i+操作的時(shí)間大于為8us unsigned int i; ds = 0; i = 100; /拉低約800us, 符合協(xié)議要求的480us以上 while(i>0) i-; ds = 1; /產(chǎn)生一個(gè)上升沿, 進(jìn)入等待應(yīng)答狀態(tài) i = 4; while(i>0) i-; void dswait() un

27、signed int i; while(ds); while(ds); /檢測到應(yīng)答脈沖 i = 4; while(i > 0) i-; /向ds18b20讀取一位數(shù)據(jù)/讀一位, 讓ds18b20一小周期低電平, 然后兩小周期高電平, /之后ds18b20則會輸出持續(xù)一段時(shí)間的一位數(shù)據(jù)bit readbit() unsigned int i; bit b; ds = 0; i+; /延時(shí)約8us, 符合協(xié)議要求至少保持1us ds = 1; i+; i+; /延時(shí)約16us, 符合協(xié)議要求的至少延時(shí)15us以上 b = ds; i = 8; while(i>0) i-; /延時(shí)約6

28、4us, 符合讀時(shí)隙不低于60us要求 return b;/讀取一字節(jié)數(shù)據(jù), 通過調(diào)用readbit()來實(shí)現(xiàn)unsigned char readbyte() unsigned int i; unsigned char j, dat; dat = 0; for(i=0; i<8; i+) j = readbit(); /最先讀出的是最低位數(shù)據(jù) dat = (j << 7) | (dat >> 1); return dat;/向ds18b20寫入一字節(jié)數(shù)據(jù)void writebyte(unsigned char dat) unsigned int i; unsign

29、ed char j; bit b; for(j = 0; j < 8; j+) b = dat & 0x01; dat >>= 1;/寫"1", 將dq拉低15us后, 在15us60us內(nèi)將dq拉高, 即完成寫1 if(b) ds = 0; i+; i+; /拉低約16us, 符號要求1560us內(nèi) ds = 1; i = 8; while(i>0) i-; /延時(shí)約64us, 符合寫時(shí)隙不低于60us要求 else /寫"0", 將dq拉低60us120us ds = 0; i = 8; while(i>0) i

30、-; /拉低約64us, 符號要求 ds = 1; i+; i+; /整個(gè)寫0時(shí)隙過程已經(jīng)超過60us, 這里就不用像寫1那樣, 再延時(shí)64us了 /向ds18b20發(fā)送溫度轉(zhuǎn)換命令void sendchangecmd() dsinit(); /初始化ds18b20, 無論什么命令, 首先都要發(fā)起初始化 dswait(); /等待ds18b20應(yīng)答 delayms(1); /延時(shí)1ms, 因?yàn)閐s18b20會拉低dq 60240us作為應(yīng)答信號 writebyte(0xcc); /寫入跳過序列號命令字 skip rom writebyte(0x44); /寫入溫度轉(zhuǎn)換命令字 convert t

31、/向ds18b20發(fā)送讀取數(shù)據(jù)命令void sendreadcmd() dsinit(); dswait(); delayms(1); writebyte(0xcc); /寫入跳過序列號命令字 skip rom writebyte(0xbe); /寫入讀取數(shù)據(jù)令字 read scratchpad/獲取當(dāng)前溫度值int gettmpvalue() unsigned int tmpvalue; int value; /存放溫度數(shù)值 float t; unsigned char low, high; sendreadcmd(); /連續(xù)讀取兩個(gè)字節(jié)數(shù)據(jù) low = readbyte(); high = readbyte(); /將高低兩個(gè)字節(jié)合成一個(gè)整形變量 /計(jì)算機(jī)中對于負(fù)數(shù)是利用補(bǔ)碼來表示的 /若是負(fù)值, 讀取出來的數(shù)值是用補(bǔ)碼表示的, 可直接賦值給int型的value tmp

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(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

提交評論