|
課程設(shè)計說明書
LED數(shù)碼管和DS18B 20溫度顯示器設(shè)計 摘 要: 本文設(shè)計的是一個溫度溫度檢測顯示系統(tǒng),主要設(shè)計分為硬件和軟件的設(shè)計,硬件模塊主要由STC89C52單片機主控模塊、DS18B20溫度采集器、4位LED共陰極數(shù)碼管以及控制電路組成。軟件的設(shè)計主要從控制思路、軟件系統(tǒng)框圖出發(fā),先介紹整體思路,再主義分析各模塊程序算法的實現(xiàn),最終編寫出滿足任務(wù)要求的程序。 本設(shè)計中的單片機主控模塊主要由晶振電路、復(fù)位電路、供電模塊和程序下載接口組成。本文設(shè)計所需要的器件比較簡單,主要通過數(shù)字式溫度傳感器DS18B20作為感溫元件對周圍的溫度進行采集,然后以數(shù)字量的方式傳遞給STC89C52單片機進行處理,最后通過4位LED共陰極數(shù)碼顯示出來。 該設(shè)計通過對程序設(shè)計、仿真圖設(shè)計、軟件與硬件的聯(lián)調(diào)、電路原理圖繪制、電路圖的焊接幾個步驟最后得出焊接好的實物。 關(guān)鍵詞: ST89C51單片機、DS18B20溫度傳感器、4位LED共陰極數(shù)碼管 控制電路 目 錄 1.概 述.......................................................................................................................... 1 1.1 課題研究背景與意義........................................................................................... 1 1.2 課題設(shè)計內(nèi)容....................................................................................................... 1 2 系統(tǒng)設(shè)計......................................................................................................................... 2 2.1 設(shè)計方案及論證................................................................................................... 2 2.2 系統(tǒng)硬件設(shè)計....................................................................................................... 3 2.2.1 主控模塊............................................................................................................ 4 2.2.2 LED數(shù)碼管顯示模塊........................................................................................ 7 2.2.3 DS18B20溫度檢測模塊.................................................................................... 8 2.3 軟件設(shè)計............................................................................................................. 10 2.3.1 主程序模塊...................................................................................................... 10 2.3.2 溫度采集與數(shù)碼管顯示子程序設(shè)計.............................................................. 11 3. 系統(tǒng)調(diào)試...................................................................................................................... 12 3.1 硬件調(diào)試............................................................................................................. 12 3.1.1 靜態(tài)檢查.......................................................................................................... 12 3.1.2 通電檢查.......................................................................................................... 12 3.2軟件調(diào)試及軟硬件聯(lián)調(diào)...................................................................................... 12 3.2.1仿真調(diào)試........................................................................................................... 12 3.2.2實物調(diào)試........................................................................................................... 13 3.2.3 實驗結(jié)果.......................................................................................................... 13 4. 結(jié)束語.......................................................................................................................... 14 5. 參考文獻...................................................................................................................... 15 附錄1:LED數(shù)碼管和DS18B20溫度顯示器設(shè)計原理圖紙..................................... 16 附錄2:LED數(shù)碼管和DS18B20溫度顯示器設(shè)計元器件目錄表............................. 17 附錄3:LED數(shù)碼管和DS18B20溫度顯示器設(shè)計程序清單..................................... 18 LED數(shù)碼管和DS18B 20溫度顯示器設(shè)計 1.概 述 1.1 課題研究背景與意義 測量控制的作用是從生產(chǎn)現(xiàn)場中獲取各種參數(shù),運用科學(xué)計算的方法,綜合各種先進技術(shù),使每個生產(chǎn)環(huán)節(jié)都能夠得到有效的控制,不但保證了生產(chǎn)的規(guī)范化、提高產(chǎn)品質(zhì)量、降低成本,還確保了生產(chǎn)安全。所以,測量控制技術(shù)已經(jīng)被廣泛應(yīng)用于煉油、化工、冶金、電力、電子、輕工和紡織等行業(yè)。 溫度采集控制系統(tǒng)是在嵌入式系統(tǒng)設(shè)計的基礎(chǔ)上發(fā)展起來的。嵌入式系統(tǒng)雖然起源于微型計算機時代,但是微型計算機的體積、價位、可靠性,都無法滿足廣大對象對嵌入式系統(tǒng)的要求,因此,嵌入式系統(tǒng)必須走獨立發(fā)展道路。這條道路就是芯片化道路。將計算機做在一個芯片上,從而開創(chuàng)了嵌入式系統(tǒng)獨立發(fā)展的單片機時代。 溫度顯示器在人們生活中是顯而易見的,它可以運用于多個領(lǐng)域,例如養(yǎng)殖場溫度的檢測,工廠溫度的檢測,還有各種交通工具溫度的實時檢測以及各種機器的溫度監(jiān)測。 溫度檢測控制系統(tǒng)在工業(yè)生產(chǎn)、科學(xué)研究和人們的生活領(lǐng)域中,得到了廣泛應(yīng)用。在工業(yè)生產(chǎn)過程中,很多時候都需要對溫度進行嚴(yán)格的監(jiān)控,以使得生產(chǎn)能夠順利的進行,產(chǎn)品的質(zhì)量才能夠得到充分的保證。使用自動溫度控制系統(tǒng)可以對生產(chǎn)環(huán)境的溫度進行自動控制,保證生產(chǎn)的自動化、智能化能夠順利、安全進行,從而提高企業(yè)的生產(chǎn)效率。溫度檢測系統(tǒng)應(yīng)用十分廣闊。 1.2 課題設(shè)計內(nèi)容 本課題內(nèi)容是設(shè)計并制作一個溫度顯示器屏控制系統(tǒng),主要控制原理是利用DS18B20溫度檢測芯片對周圍環(huán)境溫度進行采集,然后通過單片機的轉(zhuǎn)換傳輸給LED數(shù)碼管,并在數(shù)碼管上顯示出來,顯示溫度為-55攝氏度+125攝氏度,精確到小數(shù)點后一位。 設(shè)計LED數(shù)碼管顯示的DS18B20溫度顯示器控制系統(tǒng)主要分為兩大部分,硬件電路與軟件控制程序,對硬件電路與軟件程序分別進行調(diào)試,并進行軟硬件聯(lián)調(diào),要求獲得調(diào)試成功的實物。 2 系統(tǒng)設(shè)計 2.1 設(shè)計方案及論證 根據(jù)設(shè)計內(nèi)容,提出了如下兩種方案: 方案一:采用普通電阻式溫度傳感器,放大器,A/D轉(zhuǎn)換器作為測量溫度的電路。采用兩種不同材質(zhì)的導(dǎo)體,如在某點互相連接在一起,對這個連接點加熱,在它們不加熱的部位就會出現(xiàn)電位差。這個電位差的數(shù)值與不加熱部位測量點的溫度有關(guān),和這兩種導(dǎo)體的材質(zhì)有關(guān)。這種現(xiàn)象可以在很寬的溫度范圍內(nèi)出現(xiàn),如果精確測量這個電位差,再測出不加熱部位的環(huán)境溫度,就可以準(zhǔn)確知道加熱點的溫度。由于它必須有兩種不同材質(zhì)的導(dǎo)體,所以稱之為“熱電偶”。不同材質(zhì)做出的熱電偶使用于不同的溫度范圍,它們的靈敏度也各不相同。熱電偶的靈敏度是指加熱點溫度變化1℃時,輸出電位差的變化量。對于大多數(shù)金屬材料支撐的熱電偶而言,這個數(shù)值大約在5~40微伏/℃之間。 熱電偶傳感器有自己的優(yōu)點和缺陷,它靈敏度比較低,容易受到環(huán)境干擾信號的影響,也容易受到前置放大器溫度漂移的影響,因此不適合測量微小的溫度變化。由于熱電偶溫度傳感器的靈敏度與材料的粗細(xì)無關(guān),用非常細(xì)的材料也能夠做成溫度傳感器。也由于制作熱電偶的金屬材料具有很好的延展性,這種細(xì)微的測溫元件有極高的響應(yīng)速度,可以測量快速變化的過程。 方案二:采用數(shù)字可編程溫度傳感器作為溫度檢測元件。數(shù)字可編程溫度傳感器可以直接讀出被測溫度值。不需要將溫度傳感器的輸出信號接到A/D轉(zhuǎn)換器上,減少了系統(tǒng)的硬件電路的成本和整個系統(tǒng)的體積。美國Dallas半導(dǎo)體公司的數(shù)字化溫度傳感器DS1820是世界上第一片支持 “一線總線”接口的溫度傳感器,在其內(nèi)部使用了在板(ON-B0ARD)專利技術(shù)。全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi)?!耙痪€總線”獨特而且經(jīng)濟的特點,使用戶可輕松地組建傳感器網(wǎng)絡(luò),為測量系統(tǒng)的構(gòu)建引入全新概念。現(xiàn)在,新一代的DS18B20體積更小、更經(jīng)濟、更靈活。使你可以充分發(fā)揮“一線總線”的優(yōu)點。 同DS1820一樣,DS18B20也支持“一線總線”接口,測量溫度范圍為-55°C~+125°C,在-10~+85°C范圍內(nèi),精度為±0.5°C。現(xiàn)場溫度直接以“一線總線”的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場溫度測量,如:環(huán)境控制、設(shè)備或過程控制、測溫類消費電子產(chǎn)品等。與前一代產(chǎn)品不同,新的產(chǎn)品支持3V~5.5V的電壓范圍,使系統(tǒng)設(shè)計更靈活、方便。而且新一代產(chǎn)品更便宜,體積更小 它還有很多特性:適應(yīng)電壓范圍更寬,電壓范圍:3.0~5.5V,寄生電源方式下可由數(shù)據(jù)線供;獨特的單線接口方式,DS18B20在與微處理器連接時僅需要一條口線即可實現(xiàn)微處理器與DS18B20的雙向通訊;DS18B20支持多點組網(wǎng)功能,多個DS18B20可以并聯(lián)在唯一的三線上,實現(xiàn)組網(wǎng)多點測溫;DS18B20在使用中不需要任何外圍元件,全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi);溫范圍-55℃~+125℃,在-10~+85℃時精度為±0.5℃;可編程的分辨率為9~12位,對應(yīng)的可分辨溫度分別為0.5℃、0.25℃、0.125℃和0.0625℃,可實現(xiàn)高精度測溫;在9位分辨率時最多在93.75ms內(nèi)把溫度轉(zhuǎn)換為數(shù)字,12位分辨率時最多在750ms內(nèi)把溫度值轉(zhuǎn)換為數(shù)字,速度更快;測量結(jié)果直接輸出數(shù)字溫度信號,以“一線總線”串行傳送給CPU,同時可傳送CRC校驗碼,具有極強的抗干擾糾錯能力;負(fù)壓特性:電源極性接反時,芯片不會因發(fā)熱而燒毀,但不能正常工作。 方案論證:方案一硬件電路復(fù)雜,需要設(shè)計A/D轉(zhuǎn)換電路,以及與其相關(guān)的編程,總體設(shè)計起來較困難,軟件、硬件調(diào)試復(fù)雜,硬件成本較高。而且器傳感器有以下缺點:它靈敏度比較低,容易受到環(huán)境干擾信號的影響,也容易受到前置放大器溫度漂移的影響。所以總體來說,方案一在硬件、軟件上的成本都比較高,而且易受外部環(huán)境的影響,系統(tǒng)工作不穩(wěn)定。 方案二由于采用的是具有一總線特點的溫度傳感器,所以電路連接簡單;而且該傳感器擁有強大的通信協(xié)議,同過幾個簡單的操作就可以實現(xiàn)傳感器與單片機的交互,包括復(fù)位傳感器、對傳感器讀寫數(shù)據(jù)、對傳感器寫命令。軟件、硬件易于調(diào)試,制作成本較低。也使得系統(tǒng)所測結(jié)果精度大大提高。 經(jīng)過對這兩種方案的比較,本設(shè)計決定采用方案二。 2.2 系統(tǒng)硬件設(shè)計 基于單片機的LED顯示DS18B20溫度顯示器系統(tǒng)的系統(tǒng)框圖如2-1所示。系統(tǒng)由單片機主控模塊、LED顯示模塊、DS18B20測溫模塊三部分組成。
2.2.1 主控模塊 單片機主控模塊由復(fù)位電路、晶振電路、供電系統(tǒng)、程序下載端口組成;如圖2-2。
圖2-2單片機最小系統(tǒng)原理圖 A. 時鐘電路 STC89C52內(nèi)部有一個用于構(gòu)成振蕩器的高增益反相放大器,引腳XTAL1和XTAL2分別是此放大器的輸入端和輸出端。時鐘可以由內(nèi)部方式產(chǎn)生或外部方式產(chǎn)生。 內(nèi)部方式的時鐘電路在XTAL1和XTAL2引腳上外接定時元件,內(nèi)部振蕩器就產(chǎn)生自激振蕩。定時元件通常采用石英晶體和電容組成的并聯(lián)諧振回路。晶體振蕩頻率可以在1.2~12MHz之間選擇,電容值在5~30pF之間選擇,電容值的大小可對頻率起微調(diào)的作用。 外部方式的時鐘電路如圖2-4(b)所示,XTAL2接地,XTAL1接外部振蕩器。對外部振蕩信號無特殊要求,只要求保證脈沖寬度,一般采用頻率低于12MHz的方波信號。
外部方式時鐘電路 圖2-3 時鐘電路 B. 復(fù)位電路 RST引腳是復(fù)位信號的輸入端。復(fù)位信號是高電平有效,其有效時間應(yīng)持續(xù)24個振蕩周期(即二個機器周期)以上。若使用頗率為6MHz的晶振,則復(fù)位信號持續(xù)時間應(yīng)超過4us才能完成復(fù)位操作。 產(chǎn)生復(fù)位信號的電路邏輯如圖2-5所示。整個復(fù)位電路包括芯片內(nèi)、外兩部分。外部電路產(chǎn)生的復(fù)位信號(RST)送至施密特觸發(fā)器,再由片內(nèi)復(fù)位電路在每個機器周期的S5P2時刻對施密特觸發(fā)器的輸出進行采樣,然后才得到內(nèi)部復(fù)位操作所需要的信號。
圖2-4復(fù)位信號的電路邏輯圖 復(fù)位操作有上電自動復(fù)位相按鍵手動復(fù)位兩種方式。 上電自動復(fù)位是通過外部復(fù)位電路的電容充電來實現(xiàn)的。這樣,只要電源Vcc的上升時間不超過1ms,就可以實現(xiàn)自動上電復(fù)位,即接通電源就成了系統(tǒng)的復(fù)位初始化。 按鍵手動復(fù)位有電平方式和脈沖方式兩種。其中,按鍵電平復(fù)位是通過使復(fù)位端經(jīng)電阻與Vcc電源接通而實現(xiàn)的;而按鍵脈沖復(fù)位則是利用RC微分電路產(chǎn)生的正脈沖來實現(xiàn)的。 C.程序下載端口與供電模塊 供電模塊主要實現(xiàn)對單片機的供電,單片機的VCC端口接電源極,GND端口接電源負(fù)極。程序下載端口利用單片機的P3.0(RXD)串口輸入和P3.1(TXD)串口輸出端口進行串口傳輸方式對單片機進行程序代碼的寫入。設(shè)計圖如圖2-5所示。
圖2-5 程序下載端口與供電模塊 2.2.2 LED數(shù)碼管顯示模塊 本設(shè)計采用4位LED共陰極八段數(shù)碼管來顯是溫度的大小,顯示數(shù)據(jù)范圍從-55.0到125.0,LED數(shù)碼管是一種半導(dǎo)體發(fā)光器件,其基本單元是發(fā)光二極管,通過對其不同的管腳輸入相對的電流,會使其發(fā)亮,從而顯示出數(shù)字??梢燥@示:時間、日期、溫度等可以用數(shù)字代替的參數(shù),數(shù)碼管連接圖如圖2-6所示。 數(shù)碼管按段數(shù)分為七段數(shù)碼管和八段數(shù)碼管,八段數(shù)碼管比七段數(shù)碼管多一個發(fā)光二極管單元(多一個小數(shù)點顯示);按能顯示多少個“8”可分為1位、2位、4位等等數(shù)碼管;按發(fā)光二極管單元連接方式分為共陽極數(shù)碼管和共陰極數(shù)碼管。共陽極數(shù)碼管是指將所有發(fā)光二極管的陽極接到一起形成公共陽極(COM)的數(shù)碼管。共陽極數(shù)碼管在應(yīng)用時應(yīng)將公共極COM接到+5V,當(dāng)某一字段發(fā)光二極管的陰極為低電平時,相應(yīng)字段就點亮。當(dāng)某一字段的陰極為高電平時,相應(yīng)字段就不亮。 動態(tài)驅(qū)動是將所有數(shù)碼管的8個顯示筆劃"a,b,c,d,e,f,g,dp"的同名端連在一起,另外為每個數(shù)碼管的公共極COM增加位選通控制電路,通過由各自獨立的I/O線控制,當(dāng)單片機的P0口輸出字形碼時,所有數(shù)碼管都接收到相同的字形碼,但究竟是那個數(shù)碼管會顯示出字形,取決于單片機對P2.0-P2.3位選通COM端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形,沒有選通的數(shù)碼管就不會亮。通過分時輪流控制各個數(shù)碼管的COM端,就使各個數(shù)碼管輪流受控顯示。
圖2-6 4位LED共陰極八段輸出顯示連接模塊 2.2.3 DS18B20溫度檢測模塊 設(shè)計所采用的溫度傳感器為Dallas半導(dǎo)體公司的數(shù)字化溫度傳感器DS18B20,它是世界上第一片支持“一線總線”接口的溫度傳感器?!耙痪€器件”體積更小、適用電壓更寬、更經(jīng)濟。全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi)。DS18B20可以程序設(shè)定9-12位的分辨率,精度為±0.5℃。可選更小的封裝方式,更寬的電壓適用范圍。分辨率設(shè)定,及用戶設(shè)定的報警溫度存儲在EEPROM中,掉電后依然保存。
圖2-7DS18B20與STC89C52單片機接口電路的設(shè)計 DSl8B20數(shù)字溫度計提供9位(二進制)溫度讀數(shù),指示器件的溫度信息經(jīng)過單線接口送入DSl8B20或從DSl8B20送出,因此從主機CPU到DSl8B20僅需一條線,當(dāng)DS18B20接收到溫度轉(zhuǎn)換命令后,開始啟動轉(zhuǎn)換。轉(zhuǎn)換完成后的溫度值就以16位帶符號擴展的二進制補碼形式存儲在高速暫存存儲器的第1、2字節(jié)。單片機可以通過單線接口讀出該數(shù)據(jù),讀數(shù)據(jù)時低位在先,高位在后,數(shù)據(jù)格式以0.0625℃/LSB形式表示。 當(dāng)符號位S=0時,表示測得的溫度值為正值,可以直接將二進制位轉(zhuǎn)換為十進制;當(dāng)符號位S=1時,表示測得的溫度值為負(fù)值,要先將補碼變成原碼,再計算十進制數(shù)值。表2是一部分溫度值對應(yīng)的二進制溫度數(shù)據(jù)[6]。 國內(nèi)精度為±0.5°C?,F(xiàn)場溫度直接以“一線總線”的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場溫度測量,如:環(huán)境控制、設(shè)備或過程控制、測溫類消費電子產(chǎn)品等。 1.DS18B20產(chǎn)品的特點 ?。?)只要求一個端口即可實現(xiàn)通信。 ?。?)在DS18B20中的每個器件上都有獨一無二的序列號。 ?。?)實際應(yīng)用中不需要外部任何元器件即可實現(xiàn)測溫。 (4)測量溫度范圍在-55°C- +125°C之間。 ?。?)數(shù)字溫度計的分辨率用戶可以從9位到12位選擇。 ?。?)內(nèi)部有溫度上、下限設(shè)置。 2.DS18B20的引腳介紹 TO-92封裝的DS18B20引腳功能描述見表2-1。
2.3軟件設(shè)計 2.3.1 主程序模塊 系統(tǒng)主程序主要用于變量及其他部件的初始化,比如該設(shè)計對DS18B20溫度報警器的初始化,還用于對溫度的讀取,以及數(shù)碼管的顯示,從而實現(xiàn)設(shè)計所需要的功能。主程序的流程圖2-8所示。
本設(shè)計中主程序的書寫主要分為變量的定義、延時子函數(shù)的編寫、DS18B20的初始化程序、溫度采集子程序的書寫、數(shù)碼管顯示子程序的書寫和主函數(shù)的編寫。 2.3.2溫度采集與數(shù)碼管顯示子程序設(shè)計 A.溫度采集子函數(shù)主要是用來對溫度進行采集和轉(zhuǎn)換,最終將數(shù)據(jù)傳送給單片機,由單片機來控制數(shù)碼管的顯示。溫度采集子函數(shù)書寫的流程圖如圖2-9。
B.對于數(shù)碼管顯示子程序,它主要是用來對DS18B20溫度采集器所采集到的溫度進行顯示,在本設(shè)計中我們采用的是4位一體LED共陰極數(shù)碼管,在設(shè)計的時候采用傳統(tǒng)的直接與單片機相連的方式,減少了譯碼器,使編程和硬件設(shè)計更加簡單,設(shè)計流程圖如圖2-10所示。
3. 系統(tǒng)調(diào)試 根據(jù)前述第2大節(jié)中硬件和軟件設(shè)計,制作了基于單片機的電梯顯示屏控制系統(tǒng)樣機實物。對樣機的硬件和軟件分別進行了調(diào)試,最后進行了軟件、硬件聯(lián)調(diào)。 3.1 硬件調(diào)試 3.1.1 靜態(tài)檢查 根據(jù)硬件電路圖核對了元器件的型號、極性,安裝是否正確,檢查硬件電路連線是否與電路原理圖一致,檢查電路元器件是否都已經(jīng)連接好,用萬用表一一測試。 3.1.2 通電檢查 先調(diào)試電源部分,整個電路只需要+5V的電壓,用USB線從電腦USB口取電。 再用示波器檢測單片機的復(fù)位和晶振電路是否有復(fù)位信號和振蕩信號。 3.2軟件調(diào)試及軟硬件聯(lián)調(diào) 對軟件先用仿真器進行了調(diào)試。用仿真器運行正常后,再用燒寫器將程序燒到STC89C52單片機中,進行了脫機調(diào)試。 3.2.1仿真調(diào)試 A. Proteus仿真電路 基于單片機的LED數(shù)碼管和DS18B20溫度顯示控制系統(tǒng)Proteus仿真電路及仿真結(jié)果圖如圖3-1所示。
圖3-1 基于單片機的溫度顯示控制系統(tǒng)Proteus仿真電路及仿真結(jié)果圖 3.2.2實物調(diào)試 用Proteus仿真成功后,制作了基于單片機的DS18B20溫度顯示系統(tǒng)多孔板實物,將附錄3的程序燒寫到STC89C52中去,通電后發(fā)現(xiàn)LED數(shù)碼管都沒有任何現(xiàn)象,不能工作,只有電源燈輸出正常,經(jīng)過長時間的檢查,把問題鎖定在DS18B20溫度檢測器件上,由于DS18B20的DQ端與單片機對接出現(xiàn)了錯誤,導(dǎo)致單片機沒有接收到DS18B20傳送的數(shù)據(jù),所以數(shù)碼管沒有顯示,電路更改之后系統(tǒng)運行一切正常,至此多孔板調(diào)過來的數(shù)據(jù)試工作完成。 3.2.3 實驗結(jié)果 制作了基于單片機的電梯顯示屏控制系統(tǒng)多孔板實物,
圖3-2 多孔板實驗結(jié)果 4. 結(jié)束語 本次設(shè)計的是基于STC89C52單片機的4位一體LED共陰極數(shù)碼管和DS18B20的溫度顯示控制系統(tǒng),它可進周圍溫度的檢測,并在數(shù)碼管上顯示出具體數(shù)值。分別進行了硬件電路設(shè)計、軟件設(shè)計、Proteus仿真以及多孔板板實物調(diào)試。 通過一系列過設(shè)計和調(diào)試,本設(shè)計已經(jīng)完成了一個比較完整的溫度檢測顯示系統(tǒng)。致此本人設(shè)計基本完成了預(yù)期的目標(biāo),系統(tǒng)在溫度采集、溫度處理方面做的比較好,而在數(shù)據(jù)的存儲和數(shù)碼管的顯示方面不夠理想。主要存在以下幾個方面: (1) 程序的代碼不夠精練,浪費STC89C52內(nèi)的FLASH ROM; (2) 未對以前的溫度數(shù)值進行存儲,使以后不能利用這些數(shù)據(jù); (3) 對數(shù)碼管的控制考慮不周,以致出現(xiàn)閃爍現(xiàn)象; 參考文獻 [1] 張?zhí)m紅,鄒華,劉純利,等. 單片機原理及應(yīng)用[M].北京:機械工業(yè)出版社,2017. [2] 樓然苗,胡佳文,李光飛,等. 單片機實驗與課程設(shè)計指導(dǎo)[M].浙江大學(xué)出版社,2013. [3] 郭天祥. 新概念51單片機C語言教程 ——入門、提高、開發(fā)、拓展全攻略[M].北京:電子工業(yè)出版社,2010. [4] 楊欣,張延強,張鎧麟. 實例解讀51單片機完全學(xué)習(xí)與應(yīng)用[M].北京:電子工業(yè)出版社,2012. [5] 彭偉. 單片機C語言程序設(shè)計實訓(xùn)100例——基于8051+Proteus仿真(第2版)[M].北京:電子工業(yè)出版社,2012. 致 謝在這一段時間里,我感到自己的收獲是非常大的,這一段時間的工作,使我在專業(yè)技能、動手能力多方面都有了很大的提高。 如何去分析問題、解決問題的方法。使我受益匪淺。從接受課題到現(xiàn)在完成課程設(shè)計,尤其是在課題設(shè)計的前期準(zhǔn)備工作和設(shè)計的過程中,查閱了大量相關(guān)資料,在論文結(jié)束最后階段花費了不少時間取進行修改,這使得我能夠順利的完成該課程設(shè)計工作。同時也借助了同組同學(xué)的支持與幫助,使我深刻的體會到了同學(xué)之間給我?guī)淼膸椭?/span> 感謝母校的辛勤培育之恩!使我學(xué)到了許多新的知識,掌握了一定的操作技能,同時這次課程設(shè)計使我受益非淺。 附 錄: 附錄1:基于單片機的電LED和DS18B20溫度顯示系統(tǒng)的設(shè)計原理圖圖
附錄2:基于單片機的DS1B20溫度顯示設(shè)計系統(tǒng)元器件目錄表
附錄3:基于單片機的電梯顯示屏控制系統(tǒng)程序清單 #include "reg51.h" #include "intrins.h" //_nop_(); #define dm P0//段碼輸出端口 #define uchar unsigned char #define uint unsigned int sbit DQ=P3^7; //溫度輸入口 sbit w0=P2^7; //數(shù)碼管1 sbit w1=P2^6; //數(shù)碼管2 sbit w2=P2^5; //數(shù)碼管3 sbit w3=P2^4; //數(shù)碼管4 int temp1=0; //顯示當(dāng)前溫度和設(shè)置溫度的標(biāo)志位位0時顯示當(dāng)前溫度 uint h; uint temp; uchar r; uchar high=35,low=20; uchar sign; uchar q=0; uchar tt=0; uchar scale; Uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09}; //小數(shù)段碼 uchar code table_dm[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40}; //共陰LED 段碼表"0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-" uchar table_dm1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //各位帶小數(shù)點的段碼表 uchar data temp_data[2]={0x00,0x00}; //讀出溫度暫放 uchar data display[5]={0x00,0x00,0x00,0x00,0x00}; //顯示單元數(shù)據(jù),共4 個數(shù)據(jù)和一個運算暫用 /*****************11延時函數(shù)*************************/ void delay(uint t) { uint i,j; for(i=0;i<t;i++) for (j=0;j<110;j++); } void scan() { int j; for(j=0;j<4;j++) { switch (j) { case 0: dm=table_dm[display[0]];w0=0;delay(50);w0=1;//xiaoshu case 1: dm=table_dm1[display[1]];w1=0;delay(50);w1=1;//gewei case 2: dm=table_dm[display[2]];w2=0;delay(50);w2=1;//shiwei case 3: dm=table_dm[display[3]];w3=0;delay(50);w3=1;//baiwei // else{dm=table_dm[b3];w3=0;delay(50);w3=1;} } } } //***************DS18B20 復(fù)位函數(shù)************************/ ow_reset(void) { char presence=1; while(presence) { while(presence) { DQ=1;_nop_();_nop_();//從高拉到低 DQ=0; delay(50); //550 us DQ=1; delay(6); //66 us presence=DQ; //presence=0 復(fù)位成功,繼續(xù)下一步 } delay(45); //??500 us presence=~DQ; } DQ=1; //拉高電平 } /****************DS18B20 寫命令函數(shù)************************/ //?1-WIRE總線上寫一個字節(jié) void write_byte(uchar val) { uchar i; for(i=8;i>0;i--) { DQ=1;_nop_();_nop_(); //從高啦到低 DQ=0;_nop_();_nop_();_nop_();_nop_(); //5 us DQ=val&0x01; //最低位移出 delay(6); //66 us val=val/2; //右移一位 } DQ=1; delay(1); } /****************DS18B20 讀一個字節(jié)函數(shù)************************/ //?????1 ??? uchar read_byte(void) { uchar i; uchar value=0; for(i=8;i>0;i--) { DQ=1;_nop_();_nop_(); value>>=1; DQ=0;_nop_();_nop_();_nop_();_nop_(); //4 us DQ=1;_nop_();_nop_();_nop_();_nop_(); //4 us if(DQ)value|=0x80; delay(6); //66 us } DQ=1; return(value); } /*****************讀出溫度************************/ read_temp() { ow_reset(); //總線復(fù)位 delay(200); write_byte(0xcc); //發(fā)命令 write_byte(0x44); //發(fā)轉(zhuǎn)換命令 ow_reset(); delay(1); write_byte(0xcc); /發(fā)命令 write_byte(0xbe); temp_data[0]=read_byte(); //讀出溫度值的低字節(jié) temp_data[1]=read_byte(); //讀出溫度值的高字節(jié) temp=temp_data[1]; temp<<=8; temp=temp|temp_data[0]; // 兩個字合成一個變量 return temp; //????? } /****************溫度數(shù)據(jù)處理函數(shù)************************/ work_temp(uint tem) { uchar n=0; if(tem>6348) // 溫度值正負(fù)判斷,標(biāo)志位置 {tem=65536-tem;n=1;} //負(fù)溫度求補碼 display[4]=tem&0x0f; // 取小數(shù)部分的值 display[0]=ditab[display[4]]; // 存入小數(shù)部分的值 display[4]=tem>>4; // 取中間八位,即整數(shù)部分的值 display[3]=display[4]/100; // 取百位數(shù)據(jù)暫存 display[1]=display[4]%100; // 取后兩位數(shù)據(jù)暫存 display[2]=display[1]/10; //取十位數(shù)據(jù)暫存 display[1]=display[1]%10; //各位數(shù)據(jù) r=display[1]+display[2]*10+display[3]*100; /////符號位顯示判斷///// if(!display[3]) { display[3]=0x0a; //最高位位0時不顯示 if(!display[2]) { display[2]=0x0a; 次高位0時不顯示 } } if(n){display[3]=0x0b;}負(fù)溫度時最高位顯示“-”} //*********設(shè)置溫度顯示轉(zhuǎn)換************// void xianshi(int horl) { int n=0; if(horl>128) { horl=256-horl;n=1; } display[3]=horl/100; display[3]=display[3]&0x0f; display[2]=horl%100/10; display[1]=horl%10; display[0]=0; if(!display[3]) { display[3]=0x0a; //最高位位0時不顯示 if(!display[2]) { display[2]=0x0a; //次高位0時不顯示 } } if(n) { display[3]=0x0b; //負(fù)溫度時最高為顯示"-" } } //*********主函數(shù)**************// void main() { dm=0x00; //初始化端口 w0=0; w1=0; w2=0; w3=0; for(h=0;h<4;h++) //開機顯示"0000" { display[h]=0; } ow_reset(); 開機先轉(zhuǎn)換一次 write_byte(0xcc); //Skip ROM write_byte(0x44); 發(fā)轉(zhuǎn)換命令 for(h=0;h<100;h++) //開機顯示“0000” { scan(); } while(1) { if (temp1==0) { work_temp(read_temp()); 處理溫度數(shù)據(jù) scan(); } } } |
|
|
來自: 昵稱66084147 > 《文件夾1》