《單片機(jī)原理及應(yīng)用》課程設(shè)計(jì)報(bào)告書(shū)消毒柜控制電路的設(shè)計(jì)
《《單片機(jī)原理及應(yīng)用》課程設(shè)計(jì)報(bào)告書(shū)消毒柜控制電路的設(shè)計(jì)》由會(huì)員分享,可在線閱讀,更多相關(guān)《《單片機(jī)原理及應(yīng)用》課程設(shè)計(jì)報(bào)告書(shū)消毒柜控制電路的設(shè)計(jì)(31頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、31 《單片機(jī)原理及應(yīng)用》 課程設(shè)計(jì)報(bào)告書(shū) 課題名稱 消毒柜控制電路的設(shè)計(jì) 姓 名 學(xué) 號(hào) 專 業(yè) 電氣工程及其自動(dòng)化 指導(dǎo)教師 機(jī)電與控制工程學(xué)院 年 月 日 填 寫(xiě) 說(shuō) 明 1、正文部分: (1) 標(biāo)題與正文格式定義標(biāo)準(zhǔn)如下: 一級(jí)標(biāo)題:1.標(biāo)題1 二級(jí)標(biāo)題:1.1標(biāo)題2 三級(jí)標(biāo)題:1.1.1標(biāo)題3 四級(jí)標(biāo)題:1.1.1.1標(biāo)題4 (2)表格:盡可能采用三線表。
2、 (3)圖形:直接插入的插圖應(yīng)有圖標(biāo)、圖號(hào),不能直接插入的圖應(yīng)留出插圖空位。圖中文字、符號(hào)書(shū)寫(xiě)要清楚,并與正文一致。 (4)文字表述:要求層次清楚,語(yǔ)言流暢,語(yǔ)句通順,無(wú)語(yǔ)法和邏輯錯(cuò)誤,無(wú)錯(cuò)字、別字、漏字。文字的表述應(yīng)當(dāng)以科學(xué)語(yǔ)言描述研究過(guò)程和研究結(jié)果,不要以口語(yǔ)化的方式表達(dá),報(bào)告中科技術(shù)語(yǔ)和名詞應(yīng)符合規(guī)定的通用詞語(yǔ),并使用法定計(jì)量單位和標(biāo)準(zhǔn)符號(hào)。 2、參考文獻(xiàn): (1)數(shù)量要求:參考文獻(xiàn)只選擇最主要的列入,應(yīng)不低于5種。 (2)種類要求:參考文獻(xiàn)的引用,可以是著作[M]、論文[J]、專利文獻(xiàn)[P]、會(huì)議論文等。 (3)文獻(xiàn)著錄格式及示例。參考文獻(xiàn)用宋體五號(hào)字
3、。 [1] 作者. 書(shū)名[M]. 版次. 出版地: 出版者, 出版年: 起止頁(yè)碼 (著作圖書(shū)文獻(xiàn)) [2] 作者. 文章名[J]. 學(xué)術(shù)刊物名稱. 年. 卷(期): 起止頁(yè)碼 (學(xué)術(shù)刊物文獻(xiàn)) 示例:[1]王社國(guó),趙建光。基于ARM的嵌入式語(yǔ)音識(shí)別系統(tǒng)研究 [J]。微計(jì)算機(jī)信息,2007,2-2:149-150. 3、附錄或附件:(可選項(xiàng)) 重要的測(cè)試結(jié)果、圖表、設(shè)計(jì)圖紙、源程序代碼、大量的公式、符號(hào)、照片等不宜放入正文中的可以附錄形式出現(xiàn)。 4、如果需要可另行附頁(yè)粘貼。 任 務(wù) 書(shū) 基于單片機(jī)的消毒柜控制電路的設(shè)計(jì) 設(shè)計(jì)一
4、臺(tái)消毒柜控制系統(tǒng), 要求: (1)顯示消毒柜溫度,保持時(shí)間。 (2)可以鍵盤(pán)設(shè)定消毒柜溫度,定時(shí)時(shí)間。 (3)可以實(shí)現(xiàn)實(shí)時(shí)中斷功能。 (4)消毒后自動(dòng)關(guān)機(jī)。 (5)測(cè)溫誤差:〈0.5 ?c。 (6)定時(shí)誤差:〈20s/月 目 錄 1、緒論………………………………………………………………………… 2、方案論證(規(guī)劃、選定)…………………………………………… 3、方案說(shuō)明(設(shè)計(jì))……………………………………………………… 4、硬件方案設(shè)計(jì)…………………………………
5、……………………… 5、軟件方案設(shè)計(jì)………………………………………………………… 6、調(diào)試……………………………………………………………………… 7、技術(shù)小結(jié)(結(jié)束語(yǔ))………………………………………………… 8、參考文獻(xiàn)………………………………………………………………… 9、附錄(源程序代碼、電路圖等)………………………………………… 1. 緒論 該課題是設(shè)計(jì)一個(gè)消毒柜其實(shí)就是設(shè)計(jì)一個(gè)智能的溫度控制系統(tǒng),消毒柜主要通過(guò)加熱到一個(gè)指定溫度,對(duì)餐具等衛(wèi)
6、生潔具進(jìn)行高溫消毒,消毒柜將高溫控制在一個(gè)指定的范圍內(nèi),并維持一定時(shí)間,殺滅細(xì)菌,極大地增強(qiáng)了人們的飲食衛(wèi)生,大大降低了疾病的交叉?zhèn)魅?,為提高人們的身體健康起了重要的作用。 本文主要介紹了一個(gè)基于AT89C51單片機(jī)制作的消毒柜控制電路。它主要包括供電電源電路、上電復(fù)位電路、晶振電路、開(kāi)關(guān)控制電路、顯示電路等部分。文中對(duì)各電路的結(jié)構(gòu)及工作原理作了詳盡的介紹。電路運(yùn)行后,能自動(dòng)定時(shí)控制消毒柜的加電和斷電,適時(shí)有效地完成對(duì)柜內(nèi)餐具或其它物品的消毒工作。具有電路簡(jiǎn)單、制作容易、使用靈活等優(yōu)點(diǎn)。通過(guò)該電路,可以進(jìn)一步了解到單片機(jī)電路的應(yīng)用擴(kuò)展功能和指令應(yīng)用技巧。 本文的消毒柜控制系統(tǒng)就是為
7、了人們?nèi)粘I钪械牟途呦径O(shè)計(jì)的,采用微電腦控制技術(shù),精確地控制消毒柜內(nèi)的溫度和加熱時(shí)間,很大程度上改善了人們的飲食衛(wèi)生,提高了人們的生活水平。本設(shè)計(jì)采用DS18B20溫度傳感器采集實(shí)時(shí)溫度,通過(guò)DQ口送51單片機(jī)系統(tǒng),實(shí)現(xiàn)模擬溫度值的采集、轉(zhuǎn)化、輸出數(shù)字值,然后51單片機(jī)對(duì)采集的數(shù)據(jù)處理后送液晶顯示電路,實(shí)時(shí)動(dòng)態(tài)地顯示當(dāng)前的溫度及倒計(jì)時(shí)時(shí)間。對(duì)溫度的控制主要由單片機(jī)內(nèi)部三種中斷方式來(lái)控制啟動(dòng)和停止。 。 2、方案論證 2.1 系統(tǒng)設(shè)計(jì)要求 2.1.1顯示消毒柜溫度,保持時(shí)間。 2.1.2可以鍵盤(pán)設(shè)定消毒柜溫度,定時(shí)時(shí)間。 2.1.3可以實(shí)現(xiàn)實(shí)時(shí)中斷功能。
8、2.2 系統(tǒng)組成框圖 DS18B20 鍵盤(pán)控制 單片機(jī) 液晶屏顯示 發(fā)光二極管顯示 圖2.1 系統(tǒng)組成框圖 2.3 系統(tǒng)工作原理 該系統(tǒng)是基于AT89S51單片機(jī)的溫度控制的且實(shí)現(xiàn)通過(guò)高溫來(lái)殺滅病毒的消毒柜系統(tǒng),該系統(tǒng)主要三大部分組成。第一部分是由溫度傳感器DS18B20采集實(shí)時(shí)溫度轉(zhuǎn)換成數(shù)字信號(hào);第二部分的電路是由鍵盤(pán)控制消毒的定時(shí)和啟停;第三部分是液晶顯示屏的顯示部分。 AT89S51單片機(jī)對(duì)鍵盤(pán)的掃描結(jié)果和即時(shí)溫度值的處理,實(shí)現(xiàn)對(duì)溫度的實(shí)時(shí)控制,系統(tǒng)設(shè)計(jì)了啟動(dòng)設(shè)定定時(shí)時(shí)間,設(shè)置定時(shí)時(shí)間,中斷控制定時(shí),共四個(gè)鍵,按下啟動(dòng)設(shè)定定時(shí)時(shí)間功能鍵即確定開(kāi)始溫度增減按鈕時(shí)
9、,單片機(jī)加熱時(shí)間可通過(guò)溫度加減按鈕設(shè)定,開(kāi)始加熱,啟動(dòng)定時(shí)器中斷控制,當(dāng)溫度加熱設(shè)定時(shí)間到后停止加熱。 2.3系統(tǒng)工作論證 通過(guò)對(duì)系統(tǒng)控制要求的研究,確定了控制系統(tǒng)的基本框圖,針對(duì)其基本原理進(jìn)行了分析說(shuō)明,此方案能滿足消毒柜控制系統(tǒng)的基本要求。 3、方案說(shuō)明 3.1 DS18B20 一線總線溫度傳感器 特點(diǎn): 1 體積小,安裝方便; 可聯(lián)網(wǎng),方便分散點(diǎn)測(cè)量; 三線∕二線式連接方式; 測(cè)量范圍-55℃~+125℃; 3.2 AT89C51 按照單片機(jī)系統(tǒng)擴(kuò)展與系統(tǒng)配置狀況,單片機(jī)應(yīng)用系統(tǒng)可分為最小系統(tǒng)、最小功耗系統(tǒng)及典型系統(tǒng)等。AT89C51單片機(jī)是
10、美國(guó)ATMEL公司生產(chǎn)的低電壓、高性能CMOS 8位單片機(jī),具有豐富的內(nèi)部資源:4kB閃存、128BRAM、32根I/O口線、2個(gè)16位定時(shí)/計(jì)數(shù)器、5個(gè)向量?jī)杉?jí)中斷結(jié)構(gòu)、2個(gè)全雙工的串行口,具有4.25~5.50V的電壓工作范圍和0~24MHz工作頻率,使用AT89C51單片機(jī)時(shí)無(wú)須外擴(kuò)存儲(chǔ)器。因此,單片機(jī)最小系統(tǒng)為晶振、復(fù)位、電源等電路和必要的軟件組成的單個(gè)單片機(jī)。 3.3 1602液晶顯示 首先是1602液晶的管腳,總共有16個(gè)管腳,其中有三根是電源地、電源正、還有事對(duì)比 度的調(diào)整電壓;還有兩根是LCD背光的正、負(fù)極。重要的是決定led指令的三根管腳嗎,分別是RS、 R/W、E(一
11、般接單片機(jī)的P2.0~P2.2),剩下的八根式數(shù)據(jù)線分別為DB0~DB7(一般接單片機(jī)的P0口)。 4、硬件方案設(shè)計(jì) 4.1系統(tǒng)硬件結(jié)構(gòu)框圖 51單片機(jī) LCD液晶 顯示屏 實(shí)時(shí)溫度,定時(shí)時(shí)間, 溫度上下限 二極管亮滅 按鍵 DS18B20 圖2系統(tǒng)硬件結(jié)構(gòu)框圖 4.2單片機(jī)最小系統(tǒng)設(shè)計(jì) 單片機(jī)采用的是ATMEL公司的AT89S51芯片該款芯片是一種低功耗、高性能CMOS8位微控制器,具有 4K 在系統(tǒng)可編程Flash 存儲(chǔ)器。使用Atmel 公司高密度非 易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完 全兼容。片上Flash允許程序存儲(chǔ)
12、器在系統(tǒng)可編程,亦適于 常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng) 可編程Flash,使得AT89S51為眾多嵌入式控制應(yīng)用系統(tǒng)提 供高靈活、超有效的解決方案。 AT89S51具有以下標(biāo)準(zhǔn)功能: 4k字節(jié)Flash,128字節(jié)RAM, 32 位I/O 口線,看門狗定時(shí)器,2 個(gè)數(shù)據(jù)指針,兩個(gè)16 位 定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口, 片內(nèi)晶振及時(shí)鐘電路。另外,AT89S51可降至0Hz 靜態(tài)邏 輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU 停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工 作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),
13、單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。8 位微控制器 4K 字節(jié)在系統(tǒng)可編程 Flash AT89S51。 單片機(jī)最小系統(tǒng)電路圖如圖3.2所示。 圖3.2 單片機(jī)最小系統(tǒng)電路圖 4.3 DS18B20控制電路 通過(guò)P3.4口與DQ的連接實(shí)現(xiàn)51單片機(jī)與溫度傳感器DS18B20的連通工作。 4.4 鍵盤(pán)控制電路 該鍵盤(pán)接口電路通過(guò)按鍵控制定時(shí)和中斷。 本模塊通過(guò)編制程序,掃描鍵盤(pán),來(lái)比對(duì)鍵盤(pán)的值,來(lái)設(shè)置四個(gè)功能鍵。 4.5 LCD液晶顯示電路 通過(guò)P0口控制液晶顯示的輸入。P0口必須外接上拉電阻。通過(guò)P
14、2口的低三位控制RS,RW,E三個(gè)功能控制引腳,從而控制液晶顯示屏LCD的工作。 5、軟件方案設(shè)計(jì) 5.1系統(tǒng)軟件設(shè)計(jì)原理 本程序設(shè)計(jì)根據(jù)通過(guò)溫度傳感器采樣來(lái)的溫度值,經(jīng)過(guò)內(nèi)部轉(zhuǎn)化為二進(jìn)制數(shù)字量,再通過(guò)51單片機(jī)控制輸出至LCD液晶顯示屏,然后調(diào)用顯示程序進(jìn)行溫度的事實(shí)顯示。 對(duì)于各個(gè)功能鍵的程序是從P0口讀數(shù)、再轉(zhuǎn)換成十進(jìn)制數(shù)、送顯緩區(qū)、再根據(jù)鍵盤(pán)掃描的結(jié)果對(duì)溫度值進(jìn)行比較判斷,當(dāng)按下的鍵是加減功能鍵時(shí),系統(tǒng)要控制加熱的時(shí)間可進(jìn)行調(diào)節(jié)。開(kāi)始加熱后,通過(guò)定時(shí)器控制加熱時(shí)間到的中斷,當(dāng)加熱時(shí)間由設(shè)定值減至0時(shí)停止加熱,鍵盤(pán)顯示實(shí)時(shí)溫度。通過(guò)在主程序里面設(shè)立標(biāo)志,該
15、程序是通過(guò)延時(shí)的方法來(lái)確保溫度轉(zhuǎn)換為顯示數(shù)據(jù)實(shí)現(xiàn)溫度與按鍵的統(tǒng)一和“同步”,實(shí)時(shí)的控制加熱的工作,以達(dá)到人們所要求達(dá)到的效果。 5.2主程序流程圖 開(kāi)始 系統(tǒng)初始化 顯示屏初始 中斷初始 定時(shí)初始 鍵盤(pán)設(shè)置與液晶屏顯示 判斷定時(shí) 定時(shí)未到,繼續(xù)判斷 定時(shí)到 工作
16、 圖3主程序流程圖 5.3系統(tǒng)子程序設(shè)計(jì) 本軟件設(shè)計(jì)中,系統(tǒng)子程序的設(shè)計(jì)是整個(gè)程序設(shè)計(jì)的重中之重,子程序以模塊化的方式實(shí)現(xiàn)各個(gè)獨(dú)立功能,再通過(guò)主程序來(lái)調(diào)用功能子程序,使整個(gè)程序?qū)崿F(xiàn)完整的功能。 按鍵處理子程序, DS18B20溫度采樣子程序,溫度采樣轉(zhuǎn)化子程序,顯示處理子程序。 6、調(diào)試 6.1 硬件調(diào)試 6.1.1.由于本次課程設(shè)計(jì)做了實(shí)物出來(lái),通過(guò)設(shè)計(jì)方案,在試驗(yàn)焊接板上進(jìn)行合理布局并焊接實(shí)物圖。然后根據(jù)實(shí)驗(yàn)指導(dǎo)書(shū)上的各功能芯片的端口地址,連接號(hào)各部分電路,用電表測(cè)量焊接點(diǎn)的正常與否,最后連上電源。 6.1.2.檢測(cè)LCD顯示模塊,因
17、為通過(guò)鍵盤(pán)顯示,可以直觀的知道程序是否基本運(yùn)行正常,是否按預(yù)定的顯示。 6.1.3. 調(diào)試鍵盤(pán)模塊電路,看是否按壓正常,以及二極管閃滅部分是否能夠?qū)崿F(xiàn)實(shí)時(shí)閃亮。 6.1.4.最后進(jìn)行整體硬件電路的聯(lián)調(diào)。 6.2軟件調(diào)試 軟件調(diào)試是個(gè)很重要的過(guò)程,由于軟件出現(xiàn)錯(cuò)誤的話就基本上各部分功能都實(shí)現(xiàn)都有困難,所以軟件的調(diào)試時(shí)重中之重。 6.2.1第一步是進(jìn)行的是DS18B20的軟件的調(diào)試,通過(guò)采集溫度后內(nèi)部轉(zhuǎn)換后通過(guò)合理的內(nèi)存單元的分配,存儲(chǔ)采樣后轉(zhuǎn)換的值,然后同過(guò)51單片機(jī)程序看是否實(shí)現(xiàn)在LCD上顯示實(shí)時(shí)溫度值。 6.2.2鍵盤(pán)掃描部分程序的調(diào)試,該部分是程序中的功能鍵實(shí)現(xiàn)控制溫度和時(shí)間的
18、主要的部分,如果該部分程序出現(xiàn)錯(cuò)誤的話,邏輯就會(huì)出現(xiàn)混亂,各功能鍵將不能實(shí)現(xiàn),在調(diào)試的過(guò)程中,我們發(fā)現(xiàn),我們的鍵 盤(pán)電路的接法接口要正確連接,一旦鍵盤(pán)口搞錯(cuò)的話,就會(huì)出現(xiàn)按鍵的功能的混亂,所以在這一步分的調(diào)試上最主要是把握鍵盤(pán)的控制分析。 6.2.3 最后一部分調(diào)試顯示程序的調(diào)試,該部分程序的調(diào)試,關(guān)系到該課設(shè)是否夠直觀的體現(xiàn)溫度值,以及建立一個(gè)直觀的人機(jī)對(duì)話界面,在該部分程序的調(diào)試的過(guò)程中面臨的最大困難就是對(duì)于顯緩單元的分配,以及初始化,讀寫(xiě)的控制,如果顯緩單元分配有沖突的話,就會(huì)導(dǎo)致程序邏輯錯(cuò)誤,所以應(yīng)該仔細(xì)調(diào)試該部分應(yīng)該邊編寫(xiě)邊調(diào)試。 6.3調(diào)試結(jié)果 用專門的編譯軟件Ke
19、il對(duì)程序進(jìn)行編譯,編譯無(wú)誤后。并讓其生成HEX文件,按照軟件流程圖在仿真軟件Proteus上進(jìn)行仿真,把各個(gè)元器在仿真軟件中找出來(lái),再將它們連接起來(lái),連接完畢后將生成的HEX文件加載到單片機(jī)中。 經(jīng)過(guò)詳細(xì)的硬件調(diào)試和軟件調(diào)試之后,系統(tǒng)工作正常,LCD液晶顯示模塊共兩行,分別按要求實(shí)時(shí)顯示設(shè)定的最高和最低溫,當(dāng)前溫度值,定時(shí)時(shí)間值。按下“加減鍵”時(shí),系統(tǒng)可調(diào)節(jié)消毒加熱的時(shí)間,加熱時(shí)間到后點(diǎn)亮定時(shí)到指示燈,當(dāng)時(shí)間到達(dá)到0時(shí),停止加熱。 7、技術(shù)小結(jié) 通過(guò)一個(gè)多星期的研究動(dòng)手實(shí)踐完成,簡(jiǎn)單的消毒柜控制系統(tǒng)初步成形。實(shí)物圖也出來(lái)了,實(shí)現(xiàn)了課程設(shè)計(jì)的基本要求。 本設(shè)計(jì)集中了按鍵
20、,定時(shí)器,液晶顯示等的應(yīng)用。對(duì)于按鍵部分控制簡(jiǎn)單,因?yàn)槭仟?dú)立的按鍵控制,只需要與51單片機(jī)的任一輸入輸出端口相連,通過(guò)控制器高低電平即可。對(duì)于定時(shí)器和外部中斷0,1的設(shè)計(jì)書(shū)寫(xiě),只需要對(duì)中斷和定時(shí)器控制的方法和步驟熟悉,熟練運(yùn)用它們的啟動(dòng)停止就可正確完成控制。對(duì)于我來(lái)說(shuō)最難得就是LCD液晶顯示的控制了,硬件連接圖可根據(jù)經(jīng)驗(yàn)和管腳說(shuō)明連接就行,但軟件程序編寫(xiě)時(shí)對(duì)其的不熟悉和難以理解,給了我很大的障礙,以至于很久弄不出程序,不能支持實(shí)物電路板的正常工作。后來(lái)經(jīng)過(guò)學(xué)習(xí)參考咨詢和大家交流等各種渠道,慢慢的掌握了其基本的知識(shí),才有了后來(lái)的完整的程序。 本次課設(shè)一個(gè)不足之處就是沒(méi)有完成消毒后自動(dòng)關(guān)機(jī)的功能
21、,浪費(fèi)單片機(jī)的內(nèi)部資源。對(duì)于溫度傳感器電路,還存在缺憾,并不能完全掌握該部分程序的編寫(xiě)。 本課程設(shè)計(jì)自己去焊接電路,鍛煉了獨(dú)立思考和實(shí)際操作的能力,一定程度上增加了課程設(shè)計(jì)的難度,但是真正對(duì)我們?cè)O(shè)計(jì)電路卻是一個(gè)幫助和提高,所以我努力并認(rèn)真的對(duì)待著本次的設(shè)計(jì),希望能夠自行設(shè)計(jì)硬件電路根據(jù)自己設(shè)計(jì)的硬件電路來(lái)編制相應(yīng)的程序在對(duì)我們掌握各硬件部分電路有更好的理解,也一定程度上復(fù)習(xí)了以前所學(xué)的其基礎(chǔ)知識(shí),也能更好的掌握一些電氣知識(shí)。 8、參考文獻(xiàn) 【1】 萬(wàn)福君.潘松峰.劉芳.MSC-51單片微型機(jī)原理、系統(tǒng)設(shè)計(jì)及應(yīng)用【M】.北京:清華大學(xué)出版社,2009.9 【2】 陳黎娟.萬(wàn)在紅.吳
22、開(kāi)志.聶鵬程.單片微型計(jì)算機(jī)實(shí)驗(yàn)教程【M】.南昌航空大學(xué),2006.2 【3】 張永瑞. 電子測(cè)量技術(shù)基礎(chǔ)【M】.西安:西安電子科技大學(xué)出版社,2009.1 【4】 劉同法.陳忠平.彭繼衛(wèi).單片機(jī)外圍接口電路與工程實(shí)踐【M】.北京:北京航空航天大學(xué)出版社, 2009.3 【5】 何立民.單片機(jī)應(yīng)用技術(shù)選編 (1-8). 北京:北京航空航天大學(xué)出版社. 2001 【6】 鄔寬明.單片機(jī)外圍器件實(shí)用手冊(cè). 數(shù)據(jù)傳輸接口器件分冊(cè)[M].北京:北京航空航天大學(xué)出版社,1998 【7】 鮑健等. 用單片機(jī)直接驅(qū)動(dòng)液晶顯示器.量子電子學(xué)報(bào)[J].2005.2(4):651~652
23、
9、附錄
9.1主程序
源程序:
//#include
24、義DQ引腳為P3.4 sbit k0=P3^7; //確認(rèn)開(kāi)始溫度增減的按鈕 sbit k3=P1^1; //溫度加 sbit k4=P1^3; //溫度減 sbit k5=P1^7; //確定按鈕 sbit LED=P3^0; // 溫度到后亮 unsigned char min=0; unsigned char temp=0; unsigned int a=0; unsigned char b=0; unsigned char t[2],*pt; //用來(lái)存放溫度值,測(cè)溫程序就是通過(guò)這個(gè)數(shù)
25、組與主函數(shù)通信的 //unsigned char TempBuffer1[9]={0x2b,0x31,0x32,0x32,0x2e,0x30,0x30,0x43,\0}; unsigned char TempBuffer1[17]={0x2b,0x31,0x32,0x32,0x2e,0x30,0x30,0x43, 0x54,0x3a,0x30,0x30,0x43,0x3a,0x30,0x30,\0}; //顯示實(shí)時(shí)溫度,上電時(shí)顯示+125.00C unsigned char TempBuffer0[
26、17]={0x54,0x48,0x3a,0x2b,0x31,0x32,0x35,0x20, 0x54,0x4c,0x3a,0x2b,0x31,0x32,0x34,0x43,\0}; //顯示溫度上下限,上電時(shí)顯示TH:+125 TL:+124C unsigned char code dotcode[4]={0,25,50,75}; /***因顯示分辨率為0.25,但小數(shù)運(yùn)算比較麻煩,故采用查表的方法******* 再將表值分離出十位和個(gè)位后送到十分位和百分位********************/ void covert0(
27、unsigned char TH, unsigned char TL) //將溫度上下限轉(zhuǎn)換為L(zhǎng)CD顯示的數(shù)據(jù) { if(TH>0x7F) //判斷正負(fù),如果為負(fù)溫,將其轉(zhuǎn)化為其絕對(duì)值 { TempBuffer0[3]=0x2d; //0x2d為"-"的ASCII碼 TH=~TH; TH++; } else TempBuffer0[3]=0x2b; //0x2B為"+"的ASCII碼 if(TL>0x7f) { TempBuffer0[11]=0x2d;
28、 //0x2d為"-"的ASCII碼 TL=~TL+1; } else TempBuffer0[11]=0x2b; //0x2B為"+"的ASCII碼 TempBuffer0[4]=TH/100+0x30; //分離出TH的百十個(gè)位 if( TempBuffer0[4]==0x30) TempBuffer0[4]=0xfe; //百位數(shù)消隱 TempBuffer0[5]=(TH%100)/10+0x30; //分離出十位 TempBuffer0[6]=(TH%100)%10+0x30; //分離出個(gè)位
29、 TempBuffer0[12]=TL/100+0x30; //分離出TL的百十個(gè)位 if( TempBuffer0[12]==0x30) TempBuffer0[12]=0xfe; //百位數(shù)消隱 TempBuffer0[13]=(TL%100)/10+0x30; //分離出十位 TempBuffer0[14]=(TL%100)%10+0x30; //分離出個(gè)位 //if(k0==0) b=0; if((TempBuffer1[2]==TempBuffer1[14])&&(TempBuffer1[3]==Tem
30、pBuffer1[15])&&(b==1)) { LED=1; b=0; k0=1; } } void covert1(void) //將溫度轉(zhuǎn)換為L(zhǎng)CD顯示的數(shù)據(jù) { unsigned char x=0x00,y=0x00; t[0]=*pt; pt++; t[1]=*pt; if(t[1]>0x07) //判斷正負(fù)溫度 { TempBuffer1[0]=0x2d; //0x2d為"-"的ASCII碼 t[1]=~t[1];
31、 /*下面幾句把負(fù)數(shù)的補(bǔ)碼*/ t[0]=~t[0]; /* 換算成絕對(duì)值*********/ x=t[0]+1; /***********************/ t[0]=x; /***********************/ if(x>255) /**********************/ t[1]++; /*********************/ } else TempBuffer1[0]=0x2b; //0xfe為變"+"的ASCII碼 t[1]<<=4; //將高字
32、節(jié)左移4位 t[1]=t[1]&0x70; //取出高字節(jié)的3個(gè)有效數(shù)字位 x=t[0]; //將t[0]暫存到X,因?yàn)槿⌒?shù)部分還要用到它 x>>=4; //右移4位 x=x&0x0f; //和前面兩句就是取出t[0]的高四位 t[1]=t[1]|x; //將高低字節(jié)的有效值的整數(shù)部分拼成一個(gè)字節(jié) TempBuffer1[1]=t[1]/100+0x30; //+0x30 為變 0~9 ASCII碼 if( TempBuffer1[1]==0x30) TempBuffer1[1]=0xfe
33、; //百位數(shù)消隱 TempBuffer1[2]=(t[1]%100)/10+0x30; //分離出十位 TempBuffer1[3]=(t[1]%100)%10+0x30; //分離出個(gè)位 t[0]=t[0]&0x0c; //取有效的兩位小數(shù) t[0]>>=2; //左移兩位,以便查表 x=t[0]; y=dotcode[x]; //查表?yè)Q算成實(shí)際的小數(shù) TempBuffer1[5]=y/10+0x30; //分離出十分位 TempBuffer1[6]=y
34、%10+0x30; //分離出百分位 } void delay(unsigned char i) { while(i--); } void delay1(unsigned int z) { unsigned int i,j; for(i=z;i>0;i--) for(j=100;j>0;j--); } /*******************設(shè)定時(shí)間函數(shù)**************************/ void shijianset() { if(k3==0) { delay1(1
35、20); if(k3==0) min++; } if(k4==0) { delay1(120); if(k4==0) min--; } TempBuffer1[11]=min%10+0x30; TempBuffer1[10]=min/10+0x30; } /*******************確認(rèn)開(kāi)始計(jì)時(shí)函數(shù)***************************/ void jishi() { if(k5==0) { delay1(120); if(k5==0) { TR0=1;
36、 //開(kāi)始計(jì)時(shí) b=1; } } if(a==20) { a=0; min--; } if(min==0) TR0=0; } /*******************設(shè)置溫度函數(shù)***************************/ void setwendu() { TempBuffer1[14]=temp/10+0x30; TempBuffer1[15]=temp%10+0x30; } /*******************主程序*************************
37、**/ main() { unsigned char TH=110,TL=-20; //下一步擴(kuò)展時(shí)可能通過(guò)這兩個(gè)變量,調(diào)節(jié)上下限 LED=0; //測(cè)溫函數(shù)返回這個(gè)數(shù)組的頭地址 EA=1; //開(kāi)總中斷 EX0=1; //允許外部中斷0 EX1=1; //允許外部中斷1 IT0=1; //設(shè)置外部觸發(fā)0為跳沿觸發(fā) IT1=1;
38、 //設(shè)置外部觸發(fā)1為跳沿觸發(fā) TMOD=0X01; //設(shè)置定時(shí)器T0為工作方式1 TL0=0XB0; TH0=0X3C; //設(shè)置每次定時(shí)時(shí)間為50ms ET0=1; //允許定時(shí)器中斷 k0=0; while(1) { pt=ReadTemperature(TH,TL,0x3f); //上限溫度-22,下限-24,分辨率10位,也就是0.25C //讀取溫度,溫度值存放在一個(gè)兩個(gè)字節(jié)的數(shù)組中, delay(100); shijians
39、et(); setwendu(); covert1(); covert0(TH,TL); jishi(); LCD_Initial(); //第一個(gè)參數(shù)列號(hào),第二個(gè)為行號(hào),為0表示第一行 //為1表示第二行,第三個(gè)參數(shù)為顯示數(shù)據(jù)的首地址 LCD_Print(0,0,TempBuffer0); LCD_Print(0,1,TempBuffer1); } } void extern0() interrupt 0 { temp++; } void extern1() interrup
40、t 2
{
temp--;
}
void timer() interrupt 1
{
TL0=0XB0;
TH0=0X3C;
a++;
}
9.2子程序
9.2.1 LCD顯示子程序
//#include
41、**************************************************** sbit LcdRs = P2^0; sbit LcdRw = P2^1; sbit LcdEn = P2^2; sfr DBPort = 0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.數(shù)據(jù)端口 //內(nèi)部等待函數(shù)************************************************************************** unsigned char LCD_Wait(void) {
42、LcdRs=0; LcdRw=1; _nop_(); LcdEn=1; _nop_(); //while(DBPort&0x80);//在用Proteus仿真時(shí),注意用屏蔽此語(yǔ)句,在調(diào)用GotoXY()時(shí),會(huì)進(jìn)入死循環(huán), //可能在寫(xiě)該控制字時(shí),該模塊沒(méi)有返回寫(xiě)入完備命令,即DBPort&0x80==0x80 //實(shí)際硬件時(shí)打開(kāi)此語(yǔ)句 LcdEn=0; return DBPort; } //向LCD寫(xiě)入命令或數(shù)據(jù)************************************************************
43、#define LCD_COMMAND 0 // Command #define LCD_DATA 1 // Data #define LCD_CLEAR_SCREEN 0x01 // 清屏 #define LCD_HOMING 0x02 // 光標(biāo)返回原點(diǎn) void LCD_Write(bit style, unsigned char input) { LcdEn=0; LcdRs=style; LcdRw=0; _nop_(); DBPort=input; _nop_();//注意順序 LcdEn=1;
44、 _nop_();//注意順序 LcdEn=0; _nop_(); LCD_Wait(); } //設(shè)置顯示模式************************************************************ #define LCD_SHOW 0x04 //顯示開(kāi) #define LCD_HIDE 0x00 //顯示關(guān) #define LCD_CURSOR 0x02 //顯示光標(biāo) #define LCD_NO_CURSOR 0x00 //無(wú)光標(biāo) #define LCD_FLASH
45、 0x01 //光標(biāo)閃動(dòng) #define LCD_NO_FLASH 0x00 //光標(biāo)不閃動(dòng) void LCD_SetDisplay(unsigned char DisplayMode) { LCD_Write(LCD_COMMAND, 0x08|DisplayMode); } //設(shè)置輸入模式************************************************************ #define LCD_AC_UP 0x02 #define LCD_AC_DOWN 0x00 // default
46、 #define LCD_MOVE 0x01 // 畫(huà)面可平移 #define LCD_NO_MOVE 0x00 //default void LCD_SetInput(unsigned char InputMode) { LCD_Write(LCD_COMMAND, 0x04|InputMode); } //初始化LCD************************************************************ void LCD_Initial() { LcdEn=0; LCD_Write(LC
47、D_COMMAND,0x38); //8位數(shù)據(jù)端口,2行顯示,5*7點(diǎn)陣 LCD_Write(LCD_COMMAND,0x38); LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //開(kāi)啟顯示, 無(wú)光標(biāo) LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏 LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC遞增, 畫(huà)面不動(dòng) } //*************************************************
48、*********************** void GotoXY(unsigned char x, unsigned char y) { if(y==0) LCD_Write(LCD_COMMAND,0x80|x); if(y==1) LCD_Write(LCD_COMMAND,0x80|(x-0x40)); } void Print(unsigned char *str) { while(*str!=\0) { LCD_Write(LCD_DATA,*str); str++; } } void LCD_Print(uns
49、igned char x, unsigned char y, unsigned char *str)
{
GotoXY(x,y);
Print(str);
}
9.2.2 DS18B20控制子程序
/#include
50、,但只能長(zhǎng)不能短 *************在11.0592M下也行,因?yàn)闀r(shí)間長(zhǎng)些********/ void delay_18B20(unsigned int i) { while(i--); } /**********ds18b20初始化函數(shù)**********************/ void Init_DS18B20(void) { unsigned char x=0; DQ = 1; //DQ復(fù)位 delay_18B20(8); //稍做延時(shí) DQ = 0; //單片機(jī)將DQ拉低 del
51、ay_18B20(80); //精確延時(shí) 大于 480us DQ = 1; //拉高總線 delay_18B20(14); x=DQ; //稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失敗 delay_18B20(20); } /***********ds18b20讀一個(gè)字節(jié)**************/ unsigned char ReadOneChar(void) { unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--)
52、 { DQ = 0; // 給脈沖信號(hào) dat>>=1; DQ = 1; // 給脈沖信號(hào) if(DQ) dat|=0x80; delay_18B20(4); } return(dat); } /*************ds18b20寫(xiě)一個(gè)字節(jié)****************/ void WriteOneChar(unsigned char dat) { unsigned char i=0; for (i=8; i>0; i--) { DQ = 0; DQ = d
53、at&0x01; delay_18B20(5); DQ = 1; dat>>=1; } } /**************讀取ds18b20當(dāng)前溫度************/ unsigned char *ReadTemperature(char TH,char TL,unsigned char RS) { unsigned char tt[2]; Init_DS18B20(); WriteOneChar(0xCC); // 跳過(guò)讀序號(hào)列號(hào)的操作 WriteOneChar(0x4E); // //寫(xiě)入"寫(xiě)暫存器"命令,修
54、改TH和TL和分辯率配置寄存器 //先寫(xiě)TH,再寫(xiě)TL,最后寫(xiě)配置寄存器 WriteOneChar(TH); //寫(xiě)入想設(shè)定的溫度報(bào)警上限 WriteOneChar(TL); //寫(xiě)入想設(shè)定的溫度報(bào)警下限 WriteOneChar(RS); //寫(xiě)配置寄存器,格式為0 R1 R0 1,1 1 1 1 //R1R0=00分辨率婁9位,R1R0=11分辨率為12位 delay_18B20(80); // this message is wery important Init_DS18B20(); WriteOneChar
55、(0xCC); // 跳過(guò)讀序號(hào)列號(hào)的操作 WriteOneChar(0x44); // 啟動(dòng)溫度轉(zhuǎn)換 delay_18B20(80); // this message is wery important Init_DS18B20(); WriteOneChar(0xCC); //跳過(guò)讀序號(hào)列號(hào)的操作 WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度 delay_18B20(80); tt[0]=ReadOneChar(); //讀取溫度值低位 tt[1]=ReadOneC
56、har(); //讀取溫度值高位 return(tt); } 9.3消毒柜硬件連接圖 指導(dǎo)教師 評(píng) 語(yǔ) 課程設(shè)計(jì) 成 績(jī) 指導(dǎo)教師 簽 字 年 月 日 ut2ApOdfXXc02GyBKsKCWw97MrqqWhoj5TL15Zt6jIPYytYCummtARp3v1N5luizi3xh3BhWYreKO8d9g7nmZQoWPJeTLDrw08gVS8DsDQQYGC3cE7moO2tLF0Jf1gK74IUX
57、yBmtIVR97CkrfVqULT5fn2t6MpJR6rbzVPSortZvIj5NB5ndVvSr4iWr1TwLFKgLSPzuhRjQ3CmZU98eUOuijdLSZqPmvrw9zKupxf8WFUG9l2G9277g2rTipa1YpCZEuqxpKBhtVDCooQOzxUz3vJrZmOcijyM62zchmeooTYes8EBMm932tbz2Yo09RtsZEYS8Zrd2Yktj8l6jEAzVAjnfbtryLvsm6oFbfToXVRFFn7OwIYgJlamkUNXJYbz5Rrb7r4VsuR9zpfZFMfsjhcfCA37lNW2VVLRKN7R8psz1
58、BN6oRic5hU5Z6HCxAYqyNPOG8duYbAwqSl20CSg06Dh2sM8HLtgPkIcSkrgOPDpuHBj1LmPk7lYdvC6NNMwL3fwhZFTFVYAARY7lHSSxJ10V3pH3Y19BxYR77Ib7CpZSu2tijqe3hKqkKAu9KSkCpHKXUIKvvyJZpg2YijRkqfbGgOvyqKuxNWI9oMnJtt6QilZxtyrF7d20FbmabcfiixrQKUsVNXBPPFUXyQ1fJSKFSUbkgs2DUVQC9sz4JkbgN4Qqv66pyoARjurNFJ3TxyfclZiEePtwFJthphEipDFN
59、qnR2HjQKV2DzWtMPDJQkBcXmovdsjqCTJagjMdLsKPgaD2s0H0vmZGAHt36gyUEZ7UmANk1ndREuBeqdgrx0venqGnsyIB2ilq3SIQrNL4m56t7Z8Y8da5K0KUpn5Nzg4JvjdtfFHyt82AoGQkXo4VBLmLEiy2P7HtHBho07rCfttxodYDPPdtQsO7wxD0J6fKKlGm4woDzplhtRr2XgqN13hqy59zU1GegDyQniHNTaVSieueFQcYfUCJwd3vk5I7YKmhunDmIZ ut2ApOdfXXc02GyBKsKCWw97MrqqWho
60、j5TL15Zt6jIPYytYCummtARp3v1N5luizi3xh3BhWYreKO8d9g7nmZQoWPJeTLDrw08gVS8DsDQQYGC3cE7moO2tLF0Jf1gK74IUXyBmtIVR97CkrfVqULT5fn2t6MpJR6rbzVPSortZvIj5NB5ndVvSr4iWr1TwLFKgLSPzuhRjQ3CmZU98eUOuijdLSZqPmvrw9zKupxf8WFUG9l2G9277g2rTipa1YpCZEuqxpKBhtVDCooQOzxUz3vJrZmOcijyM62zchmeooTYes8EBMm932tbz2Yo09RtsZEYS8Zrd
61、2Yktj8l6jEAzVAjnfbtryLvsm6oFbfToXVRFFn7OwIYgJlamkUNXJYbz5Rrb7r4VsuR9zpfZFMfsjhcfCA37lNW2VVLRKN7R8psz1BN6oRic5hU5Z6HCxAYqyNPOG8duYbAwqSl20CSg06Dh2sM8HLtgPkIcSkrgOPDpuHBj1LmPk7lYdvC6NNMwL3fwhZFTFVYAARY7lHSSxJ10V3pH3Y19BxYR77Ib7CpZSu2tijqe3hKqkKAu9KSkCpHKXUIKvvyJZpg2YijRkqfbGgOvyqKuxNWI9oMnJtt6QilZxtyr
62、F7d20FbmabcfiixrQKUsVNXBPPFUXyQ1fJSKFSUbkgs2DUVQC9sz4JkbgN4Qqv66pyoARjurNFJ3TxyfclZiEePtwFJthphEipDFNqnR2HjQKV2DzWtMPDJQkBcXmovdsjqCTJagjMdLsKPgaD2s0H0vmZGAHt36gyUEZ7UmANk1ndREuBeqdgrx0venqGnsyIB2ilq3SIQrNL4m56t7Z8Y8da5K0KUpn5Nzg4JvjdtfFHyt82AoGQkXo4VBLmLEiy2P7HtHBho07rCfttxodYDPPdtQsO7wxD0J6fKKlGm4woDzplhtRr2XgqN13hqy59zU1GegDyQniHNTaVSieueFQcYfUCJwd3vk5I7YKmhunDmIZ
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識(shí)競(jìng)賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫(kù)試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫(kù)試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫(kù)試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識(shí)測(cè)試題庫(kù)及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測(cè)工種技術(shù)比武題庫(kù)含解析
- 1 礦山應(yīng)急救援安全知識(shí)競(jìng)賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案