《單片機原理及應(yīng)用》課程設(shè)計報告書消毒柜控制電路的設(shè)計

上傳人:仙*** 文檔編號:28068260 上傳時間:2021-08-23 格式:DOC 頁數(shù):31 大?。?93.56KB
收藏 版權(quán)申訴 舉報 下載
《單片機原理及應(yīng)用》課程設(shè)計報告書消毒柜控制電路的設(shè)計_第1頁
第1頁 / 共31頁
《單片機原理及應(yīng)用》課程設(shè)計報告書消毒柜控制電路的設(shè)計_第2頁
第2頁 / 共31頁
《單片機原理及應(yīng)用》課程設(shè)計報告書消毒柜控制電路的設(shè)計_第3頁
第3頁 / 共31頁

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《《單片機原理及應(yīng)用》課程設(shè)計報告書消毒柜控制電路的設(shè)計》由會員分享,可在線閱讀,更多相關(guān)《《單片機原理及應(yīng)用》課程設(shè)計報告書消毒柜控制電路的設(shè)計(31頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、31 《單片機原理及應(yīng)用》 課程設(shè)計報告書 課題名稱 消毒柜控制電路的設(shè)計 姓 名 學(xué) 號 專 業(yè) 電氣工程及其自動化 指導(dǎo)教師 機電與控制工程學(xué)院 年 月 日 填 寫 說 明 1、正文部分: (1) 標題與正文格式定義標準如下: 一級標題:1.標題1 二級標題:1.1標題2 三級標題:1.1.1標題3 四級標題:1.1.1.1標題4 (2)表格:盡可能采用三線表。

2、 (3)圖形:直接插入的插圖應(yīng)有圖標、圖號,不能直接插入的圖應(yīng)留出插圖空位。圖中文字、符號書寫要清楚,并與正文一致。 (4)文字表述:要求層次清楚,語言流暢,語句通順,無語法和邏輯錯誤,無錯字、別字、漏字。文字的表述應(yīng)當以科學(xué)語言描述研究過程和研究結(jié)果,不要以口語化的方式表達,報告中科技術(shù)語和名詞應(yīng)符合規(guī)定的通用詞語,并使用法定計量單位和標準符號。 2、參考文獻: (1)數(shù)量要求:參考文獻只選擇最主要的列入,應(yīng)不低于5種。 (2)種類要求:參考文獻的引用,可以是著作[M]、論文[J]、專利文獻[P]、會議論文等。 (3)文獻著錄格式及示例。參考文獻用宋體五號字

3、。 [1] 作者. 書名[M]. 版次. 出版地: 出版者, 出版年: 起止頁碼 (著作圖書文獻) [2] 作者. 文章名[J]. 學(xué)術(shù)刊物名稱. 年. 卷(期): 起止頁碼 (學(xué)術(shù)刊物文獻) 示例:[1]王社國,趙建光?;贏RM的嵌入式語音識別系統(tǒng)研究 [J]。微計算機信息,2007,2-2:149-150. 3、附錄或附件:(可選項) 重要的測試結(jié)果、圖表、設(shè)計圖紙、源程序代碼、大量的公式、符號、照片等不宜放入正文中的可以附錄形式出現(xiàn)。 4、如果需要可另行附頁粘貼。 任 務(wù) 書 基于單片機的消毒柜控制電路的設(shè)計 設(shè)計一

4、臺消毒柜控制系統(tǒng), 要求: (1)顯示消毒柜溫度,保持時間。 (2)可以鍵盤設(shè)定消毒柜溫度,定時時間。 (3)可以實現(xiàn)實時中斷功能。 (4)消毒后自動關(guān)機。 (5)測溫誤差:〈0.5 ?c。 (6)定時誤差:〈20s/月 目 錄 1、緒論………………………………………………………………………… 2、方案論證(規(guī)劃、選定)…………………………………………… 3、方案說明(設(shè)計)……………………………………………………… 4、硬件方案設(shè)計…………………………………

5、……………………… 5、軟件方案設(shè)計………………………………………………………… 6、調(diào)試……………………………………………………………………… 7、技術(shù)小結(jié)(結(jié)束語)………………………………………………… 8、參考文獻………………………………………………………………… 9、附錄(源程序代碼、電路圖等)………………………………………… 1. 緒論 該課題是設(shè)計一個消毒柜其實就是設(shè)計一個智能的溫度控制系統(tǒng),消毒柜主要通過加熱到一個指定溫度,對餐具等衛(wèi)

6、生潔具進行高溫消毒,消毒柜將高溫控制在一個指定的范圍內(nèi),并維持一定時間,殺滅細菌,極大地增強了人們的飲食衛(wèi)生,大大降低了疾病的交叉?zhèn)魅?,為提高人們的身體健康起了重要的作用。 本文主要介紹了一個基于AT89C51單片機制作的消毒柜控制電路。它主要包括供電電源電路、上電復(fù)位電路、晶振電路、開關(guān)控制電路、顯示電路等部分。文中對各電路的結(jié)構(gòu)及工作原理作了詳盡的介紹。電路運行后,能自動定時控制消毒柜的加電和斷電,適時有效地完成對柜內(nèi)餐具或其它物品的消毒工作。具有電路簡單、制作容易、使用靈活等優(yōu)點。通過該電路,可以進一步了解到單片機電路的應(yīng)用擴展功能和指令應(yīng)用技巧。 本文的消毒柜控制系統(tǒng)就是為

7、了人們?nèi)粘I钪械牟途呦径O(shè)計的,采用微電腦控制技術(shù),精確地控制消毒柜內(nèi)的溫度和加熱時間,很大程度上改善了人們的飲食衛(wèi)生,提高了人們的生活水平。本設(shè)計采用DS18B20溫度傳感器采集實時溫度,通過DQ口送51單片機系統(tǒng),實現(xiàn)模擬溫度值的采集、轉(zhuǎn)化、輸出數(shù)字值,然后51單片機對采集的數(shù)據(jù)處理后送液晶顯示電路,實時動態(tài)地顯示當前的溫度及倒計時時間。對溫度的控制主要由單片機內(nèi)部三種中斷方式來控制啟動和停止。 。 2、方案論證 2.1 系統(tǒng)設(shè)計要求 2.1.1顯示消毒柜溫度,保持時間。 2.1.2可以鍵盤設(shè)定消毒柜溫度,定時時間。 2.1.3可以實現(xiàn)實時中斷功能。

8、2.2 系統(tǒng)組成框圖 DS18B20 鍵盤控制 單片機 液晶屏顯示 發(fā)光二極管顯示 圖2.1 系統(tǒng)組成框圖 2.3 系統(tǒng)工作原理 該系統(tǒng)是基于AT89S51單片機的溫度控制的且實現(xiàn)通過高溫來殺滅病毒的消毒柜系統(tǒng),該系統(tǒng)主要三大部分組成。第一部分是由溫度傳感器DS18B20采集實時溫度轉(zhuǎn)換成數(shù)字信號;第二部分的電路是由鍵盤控制消毒的定時和啟停;第三部分是液晶顯示屏的顯示部分。 AT89S51單片機對鍵盤的掃描結(jié)果和即時溫度值的處理,實現(xiàn)對溫度的實時控制,系統(tǒng)設(shè)計了啟動設(shè)定定時時間,設(shè)置定時時間,中斷控制定時,共四個鍵,按下啟動設(shè)定定時時間功能鍵即確定開始溫度增減按鈕時

9、,單片機加熱時間可通過溫度加減按鈕設(shè)定,開始加熱,啟動定時器中斷控制,當溫度加熱設(shè)定時間到后停止加熱。 2.3系統(tǒng)工作論證 通過對系統(tǒng)控制要求的研究,確定了控制系統(tǒng)的基本框圖,針對其基本原理進行了分析說明,此方案能滿足消毒柜控制系統(tǒng)的基本要求。 3、方案說明 3.1 DS18B20 一線總線溫度傳感器 特點: 1 體積小,安裝方便; 可聯(lián)網(wǎng),方便分散點測量; 三線∕二線式連接方式; 測量范圍-55℃~+125℃; 3.2 AT89C51   按照單片機系統(tǒng)擴展與系統(tǒng)配置狀況,單片機應(yīng)用系統(tǒng)可分為最小系統(tǒng)、最小功耗系統(tǒng)及典型系統(tǒng)等。AT89C51單片機是

10、美國ATMEL公司生產(chǎn)的低電壓、高性能CMOS 8位單片機,具有豐富的內(nèi)部資源:4kB閃存、128BRAM、32根I/O口線、2個16位定時/計數(shù)器、5個向量兩級中斷結(jié)構(gòu)、2個全雙工的串行口,具有4.25~5.50V的電壓工作范圍和0~24MHz工作頻率,使用AT89C51單片機時無須外擴存儲器。因此,單片機最小系統(tǒng)為晶振、復(fù)位、電源等電路和必要的軟件組成的單個單片機。 3.3 1602液晶顯示 首先是1602液晶的管腳,總共有16個管腳,其中有三根是電源地、電源正、還有事對比 度的調(diào)整電壓;還有兩根是LCD背光的正、負極。重要的是決定led指令的三根管腳嗎,分別是RS、 R/W、E(一

11、般接單片機的P2.0~P2.2),剩下的八根式數(shù)據(jù)線分別為DB0~DB7(一般接單片機的P0口)。 4、硬件方案設(shè)計 4.1系統(tǒng)硬件結(jié)構(gòu)框圖 51單片機 LCD液晶 顯示屏 實時溫度,定時時間, 溫度上下限 二極管亮滅 按鍵 DS18B20 圖2系統(tǒng)硬件結(jié)構(gòu)框圖 4.2單片機最小系統(tǒng)設(shè)計 單片機采用的是ATMEL公司的AT89S51芯片該款芯片是一種低功耗、高性能CMOS8位微控制器,具有 4K 在系統(tǒng)可編程Flash 存儲器。使用Atmel 公司高密度非 易失性存儲器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完 全兼容。片上Flash允許程序存儲

12、器在系統(tǒng)可編程,亦適于 常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng) 可編程Flash,使得AT89S51為眾多嵌入式控制應(yīng)用系統(tǒng)提 供高靈活、超有效的解決方案。 AT89S51具有以下標準功能: 4k字節(jié)Flash,128字節(jié)RAM, 32 位I/O 口線,看門狗定時器,2 個數(shù)據(jù)指針,兩個16 位 定時器/計數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口, 片內(nèi)晶振及時鐘電路。另外,AT89S51可降至0Hz 靜態(tài)邏 輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU 停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工 作。掉電保護方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),

13、單片機一切工作停止,直到下一個中斷或硬件復(fù)位為止。8 位微控制器 4K 字節(jié)在系統(tǒng)可編程 Flash AT89S51。 單片機最小系統(tǒng)電路圖如圖3.2所示。 圖3.2 單片機最小系統(tǒng)電路圖 4.3 DS18B20控制電路 通過P3.4口與DQ的連接實現(xiàn)51單片機與溫度傳感器DS18B20的連通工作。 4.4 鍵盤控制電路 該鍵盤接口電路通過按鍵控制定時和中斷。 本模塊通過編制程序,掃描鍵盤,來比對鍵盤的值,來設(shè)置四個功能鍵。 4.5 LCD液晶顯示電路 通過P0口控制液晶顯示的輸入。P0口必須外接上拉電阻。通過P

14、2口的低三位控制RS,RW,E三個功能控制引腳,從而控制液晶顯示屏LCD的工作。 5、軟件方案設(shè)計 5.1系統(tǒng)軟件設(shè)計原理 本程序設(shè)計根據(jù)通過溫度傳感器采樣來的溫度值,經(jīng)過內(nèi)部轉(zhuǎn)化為二進制數(shù)字量,再通過51單片機控制輸出至LCD液晶顯示屏,然后調(diào)用顯示程序進行溫度的事實顯示。 對于各個功能鍵的程序是從P0口讀數(shù)、再轉(zhuǎn)換成十進制數(shù)、送顯緩區(qū)、再根據(jù)鍵盤掃描的結(jié)果對溫度值進行比較判斷,當按下的鍵是加減功能鍵時,系統(tǒng)要控制加熱的時間可進行調(diào)節(jié)。開始加熱后,通過定時器控制加熱時間到的中斷,當加熱時間由設(shè)定值減至0時停止加熱,鍵盤顯示實時溫度。通過在主程序里面設(shè)立標志,該

15、程序是通過延時的方法來確保溫度轉(zhuǎn)換為顯示數(shù)據(jù)實現(xiàn)溫度與按鍵的統(tǒng)一和“同步”,實時的控制加熱的工作,以達到人們所要求達到的效果。 5.2主程序流程圖 開始 系統(tǒng)初始化 顯示屏初始 中斷初始 定時初始 鍵盤設(shè)置與液晶屏顯示 判斷定時 定時未到,繼續(xù)判斷 定時到 工作

16、 圖3主程序流程圖 5.3系統(tǒng)子程序設(shè)計 本軟件設(shè)計中,系統(tǒng)子程序的設(shè)計是整個程序設(shè)計的重中之重,子程序以模塊化的方式實現(xiàn)各個獨立功能,再通過主程序來調(diào)用功能子程序,使整個程序?qū)崿F(xiàn)完整的功能。 按鍵處理子程序, DS18B20溫度采樣子程序,溫度采樣轉(zhuǎn)化子程序,顯示處理子程序。 6、調(diào)試 6.1 硬件調(diào)試 6.1.1.由于本次課程設(shè)計做了實物出來,通過設(shè)計方案,在試驗焊接板上進行合理布局并焊接實物圖。然后根據(jù)實驗指導(dǎo)書上的各功能芯片的端口地址,連接號各部分電路,用電表測量焊接點的正常與否,最后連上電源。 6.1.2.檢測LCD顯示模塊,因

17、為通過鍵盤顯示,可以直觀的知道程序是否基本運行正常,是否按預(yù)定的顯示。 6.1.3. 調(diào)試鍵盤模塊電路,看是否按壓正常,以及二極管閃滅部分是否能夠?qū)崿F(xiàn)實時閃亮。 6.1.4.最后進行整體硬件電路的聯(lián)調(diào)。 6.2軟件調(diào)試 軟件調(diào)試是個很重要的過程,由于軟件出現(xiàn)錯誤的話就基本上各部分功能都實現(xiàn)都有困難,所以軟件的調(diào)試時重中之重。 6.2.1第一步是進行的是DS18B20的軟件的調(diào)試,通過采集溫度后內(nèi)部轉(zhuǎn)換后通過合理的內(nèi)存單元的分配,存儲采樣后轉(zhuǎn)換的值,然后同過51單片機程序看是否實現(xiàn)在LCD上顯示實時溫度值。 6.2.2鍵盤掃描部分程序的調(diào)試,該部分是程序中的功能鍵實現(xiàn)控制溫度和時間的

18、主要的部分,如果該部分程序出現(xiàn)錯誤的話,邏輯就會出現(xiàn)混亂,各功能鍵將不能實現(xiàn),在調(diào)試的過程中,我們發(fā)現(xiàn),我們的鍵 盤電路的接法接口要正確連接,一旦鍵盤口搞錯的話,就會出現(xiàn)按鍵的功能的混亂,所以在這一步分的調(diào)試上最主要是把握鍵盤的控制分析。 6.2.3 最后一部分調(diào)試顯示程序的調(diào)試,該部分程序的調(diào)試,關(guān)系到該課設(shè)是否夠直觀的體現(xiàn)溫度值,以及建立一個直觀的人機對話界面,在該部分程序的調(diào)試的過程中面臨的最大困難就是對于顯緩單元的分配,以及初始化,讀寫的控制,如果顯緩單元分配有沖突的話,就會導(dǎo)致程序邏輯錯誤,所以應(yīng)該仔細調(diào)試該部分應(yīng)該邊編寫邊調(diào)試。 6.3調(diào)試結(jié)果 用專門的編譯軟件Ke

19、il對程序進行編譯,編譯無誤后。并讓其生成HEX文件,按照軟件流程圖在仿真軟件Proteus上進行仿真,把各個元器在仿真軟件中找出來,再將它們連接起來,連接完畢后將生成的HEX文件加載到單片機中。 經(jīng)過詳細的硬件調(diào)試和軟件調(diào)試之后,系統(tǒng)工作正常,LCD液晶顯示模塊共兩行,分別按要求實時顯示設(shè)定的最高和最低溫,當前溫度值,定時時間值。按下“加減鍵”時,系統(tǒng)可調(diào)節(jié)消毒加熱的時間,加熱時間到后點亮定時到指示燈,當時間到達到0時,停止加熱。 7、技術(shù)小結(jié) 通過一個多星期的研究動手實踐完成,簡單的消毒柜控制系統(tǒng)初步成形。實物圖也出來了,實現(xiàn)了課程設(shè)計的基本要求。 本設(shè)計集中了按鍵

20、,定時器,液晶顯示等的應(yīng)用。對于按鍵部分控制簡單,因為是獨立的按鍵控制,只需要與51單片機的任一輸入輸出端口相連,通過控制器高低電平即可。對于定時器和外部中斷0,1的設(shè)計書寫,只需要對中斷和定時器控制的方法和步驟熟悉,熟練運用它們的啟動停止就可正確完成控制。對于我來說最難得就是LCD液晶顯示的控制了,硬件連接圖可根據(jù)經(jīng)驗和管腳說明連接就行,但軟件程序編寫時對其的不熟悉和難以理解,給了我很大的障礙,以至于很久弄不出程序,不能支持實物電路板的正常工作。后來經(jīng)過學(xué)習(xí)參考咨詢和大家交流等各種渠道,慢慢的掌握了其基本的知識,才有了后來的完整的程序。 本次課設(shè)一個不足之處就是沒有完成消毒后自動關(guān)機的功能

21、,浪費單片機的內(nèi)部資源。對于溫度傳感器電路,還存在缺憾,并不能完全掌握該部分程序的編寫。 本課程設(shè)計自己去焊接電路,鍛煉了獨立思考和實際操作的能力,一定程度上增加了課程設(shè)計的難度,但是真正對我們設(shè)計電路卻是一個幫助和提高,所以我努力并認真的對待著本次的設(shè)計,希望能夠自行設(shè)計硬件電路根據(jù)自己設(shè)計的硬件電路來編制相應(yīng)的程序在對我們掌握各硬件部分電路有更好的理解,也一定程度上復(fù)習(xí)了以前所學(xué)的其基礎(chǔ)知識,也能更好的掌握一些電氣知識。 8、參考文獻 【1】 萬福君.潘松峰.劉芳.MSC-51單片微型機原理、系統(tǒng)設(shè)計及應(yīng)用【M】.北京:清華大學(xué)出版社,2009.9 【2】 陳黎娟.萬在紅.吳

22、開志.聶鵬程.單片微型計算機實驗教程【M】.南昌航空大學(xué),2006.2 【3】 張永瑞. 電子測量技術(shù)基礎(chǔ)【M】.西安:西安電子科技大學(xué)出版社,2009.1 【4】 劉同法.陳忠平.彭繼衛(wèi).單片機外圍接口電路與工程實踐【M】.北京:北京航空航天大學(xué)出版社, 2009.3 【5】 何立民.單片機應(yīng)用技術(shù)選編 (1-8). 北京:北京航空航天大學(xué)出版社. 2001 【6】 鄔寬明.單片機外圍器件實用手冊. 數(shù)據(jù)傳輸接口器件分冊[M].北京:北京航空航天大學(xué)出版社,1998 【7】 鮑健等. 用單片機直接驅(qū)動液晶顯示器.量子電子學(xué)報[J].2005.2(4):651~652

23、 9、附錄 9.1主程序 源程序: //#include //用AT89C51時就用這個頭文件 #include //用華邦W78E58B時必須用這個頭文件 #include #include #include #include #include #include #include "LCD1602.h" ////液晶顯示頭文件 //sbit DQ = P3^4; //定

24、義DQ引腳為P3.4 sbit k0=P3^7; //確認開始溫度增減的按鈕 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; //用來存放溫度值,測溫程序就是通過這個數(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}; //顯示實時溫度,上電時顯示+125.00C unsigned char TempBuffer0[

26、17]={0x54,0x48,0x3a,0x2b,0x31,0x32,0x35,0x20, 0x54,0x4c,0x3a,0x2b,0x31,0x32,0x34,0x43,\0}; //顯示溫度上下限,上電時顯示TH:+125 TL:+124C unsigned char code dotcode[4]={0,25,50,75}; /***因顯示分辨率為0.25,但小數(shù)運算比較麻煩,故采用查表的方法******* 再將表值分離出十位和個位后送到十分位和百分位********************/ void covert0(

27、unsigned char TH, unsigned char TL) //將溫度上下限轉(zhuǎn)換為LCD顯示的數(shù)據(jù) { if(TH>0x7F) //判斷正負,如果為負溫,將其轉(zhuǎn)化為其絕對值 { 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的百十個位 if( TempBuffer0[4]==0x30) TempBuffer0[4]=0xfe; //百位數(shù)消隱 TempBuffer0[5]=(TH%100)/10+0x30; //分離出十位 TempBuffer0[6]=(TH%100)%10+0x30; //分離出個位

29、 TempBuffer0[12]=TL/100+0x30; //分離出TL的百十個位 if( TempBuffer0[12]==0x30) TempBuffer0[12]=0xfe; //百位數(shù)消隱 TempBuffer0[13]=(TL%100)/10+0x30; //分離出十位 TempBuffer0[14]=(TL%100)%10+0x30; //分離出個位 //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)換為LCD顯示的數(shù)據(jù) { unsigned char x=0x00,y=0x00; t[0]=*pt; pt++; t[1]=*pt; if(t[1]>0x07) //判斷正負溫度 { TempBuffer1[0]=0x2d; //0x2d為"-"的ASCII碼 t[1]=~t[1];

31、 /*下面幾句把負數(shù)的補碼*/ t[0]=~t[0]; /* 換算成絕對值*********/ 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個有效數(shù)字位 x=t[0]; //將t[0]暫存到X,因為取小數(shù)部分還要用到它 x>>=4; //右移4位 x=x&0x0f; //和前面兩句就是取出t[0]的高四位 t[1]=t[1]|x; //將高低字節(jié)的有效值的整數(shù)部分拼成一個字節(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; //分離出個位 t[0]=t[0]&0x0c; //取有效的兩位小數(shù) t[0]>>=2; //左移兩位,以便查表 x=t[0]; y=dotcode[x]; //查表換算成實際的小數(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ù)**************************/ 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; } /*******************確認開始計時函數(shù)***************************/ void jishi() { if(k5==0) { delay1(120); if(k5==0) { TR0=1;

36、 //開始計時 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; //下一步擴展時可能通過這兩個變量,調(diào)節(jié)上下限 LED=0; //測溫函數(shù)返回這個數(shù)組的頭地址 EA=1; //開總中斷 EX0=1; //允許外部中斷0 EX1=1; //允許外部中斷1 IT0=1; //設(shè)置外部觸發(fā)0為跳沿觸發(fā) IT1=1;

38、 //設(shè)置外部觸發(fā)1為跳沿觸發(fā) TMOD=0X01; //設(shè)置定時器T0為工作方式1 TL0=0XB0; TH0=0X3C; //設(shè)置每次定時時間為50ms ET0=1; //允許定時器中斷 k0=0; while(1) { pt=ReadTemperature(TH,TL,0x3f); //上限溫度-22,下限-24,分辨率10位,也就是0.25C //讀取溫度,溫度值存放在一個兩個字節(jié)的數(shù)組中, delay(100); shijians

39、et(); setwendu(); covert1(); covert0(TH,TL); jishi(); LCD_Initial(); //第一個參數(shù)列號,第二個為行號,為0表示第一行 //為1表示第二行,第三個參數(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 //用AT89C51時就用這個頭文件 #include //用華邦W78E58B時必須用這個頭文件 #include //注意那個LCD_Wait()函數(shù),它是判"忙"標志的,在實際硬件要把注掉的那種打開 //Port Definitions******

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仿真時,注意用屏蔽此語句,在調(diào)用GotoXY()時,會進入死循環(huán), //可能在寫該控制字時,該模塊沒有返回寫入完備命令,即DBPort&0x80==0x80 //實際硬件時打開此語句 LcdEn=0; return DBPort; } //向LCD寫入命令或數(shù)據(jù)************************************************************

43、#define LCD_COMMAND 0 // Command #define LCD_DATA 1 // Data #define LCD_CLEAR_SCREEN 0x01 // 清屏 #define LCD_HOMING 0x02 // 光標返回原點 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 //顯示開 #define LCD_HIDE 0x00 //顯示關(guān) #define LCD_CURSOR 0x02 //顯示光標 #define LCD_NO_CURSOR 0x00 //無光標 #define LCD_FLASH

45、 0x01 //光標閃動 #define LCD_NO_FLASH 0x00 //光標不閃動 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 // 畫面可平移 #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點陣 LCD_Write(LCD_COMMAND,0x38); LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //開啟顯示, 無光標 LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏 LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC遞增, 畫面不動 } //*************************************************

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 //用AT89C51時就用這個頭文件 #include //用華邦W78E58B時必須用這個頭文件 sbit DQ = P3^4; //定義DQ引腳為P3.4 /***********ds18b20延遲子函數(shù)(晶振12MHz )*******/ /************DS18B20對時間要求很嚴

50、,但只能長不能短 *************在11.0592M下也行,因為時間長些********/ 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); //稍做延時 DQ = 0; //單片機將DQ拉低 del

51、ay_18B20(80); //精確延時 大于 480us DQ = 1; //拉高總線 delay_18B20(14); x=DQ; //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗 delay_18B20(20); } /***********ds18b20讀一個字節(jié)**************/ unsigned char ReadOneChar(void) { unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--)

52、 { DQ = 0; // 給脈沖信號 dat>>=1; DQ = 1; // 給脈沖信號 if(DQ) dat|=0x80; delay_18B20(4); } return(dat); } /*************ds18b20寫一個字節(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當前溫度************/ unsigned char *ReadTemperature(char TH,char TL,unsigned char RS) { unsigned char tt[2]; Init_DS18B20(); WriteOneChar(0xCC); // 跳過讀序號列號的操作 WriteOneChar(0x4E); // //寫入"寫暫存器"命令,修

54、改TH和TL和分辯率配置寄存器 //先寫TH,再寫TL,最后寫配置寄存器 WriteOneChar(TH); //寫入想設(shè)定的溫度報警上限 WriteOneChar(TL); //寫入想設(shè)定的溫度報警下限 WriteOneChar(RS); //寫配置寄存器,格式為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); // 跳過讀序號列號的操作 WriteOneChar(0x44); // 啟動溫度轉(zhuǎn)換 delay_18B20(80); // this message is wery important Init_DS18B20(); WriteOneChar(0xCC); //跳過讀序號列號的操作 WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度 delay_18B20(80); tt[0]=ReadOneChar(); //讀取溫度值低位 tt[1]=ReadOneC

56、har(); //讀取溫度值高位 return(tt); } 9.3消毒柜硬件連接圖 指導(dǎo)教師 評 語 課程設(shè)計 成 績 指導(dǎo)教師 簽 字 年 月 日 ut2ApOdfXXc02GyBKsKCWw97MrqqWhoj5TL15Zt6jIPYytYCummtARp3v1N5luizi3xh3BhWYreKO8d9g7nmZQoWPJeTLDrw08gVS8DsDQQYGC3cE7moO2tLF0Jf1gK74IUX

57、yBmtIVR97CkrfVqULT5fn2t6MpJR6rbzVPSortZvIj5NB5ndVvSr4iWr1TwLFKgLSPzuhRjQ3CmZU98eUOuijdLSZqPmvrw9zKupxf8WFUG9l2G9277g2rTipa1YpCZEuqxpKBhtVDCooQOzxUz3vJrZmOcijyM62zchmeooTYes8EBMm932tbz2Yo09RtsZEYS8Zrd2Yktj8l6jEAzVAjnfbtryLvsm6oFbfToXVRFFn7OwIYgJlamkUNXJYbz5Rrb7r4VsuR9zpfZFMfsjhcfCA37lNW2VVLRKN7R8psz1

58、BN6oRic5hU5Z6HCxAYqyNPOG8duYbAwqSl20CSg06Dh2sM8HLtgPkIcSkrgOPDpuHBj1LmPk7lYdvC6NNMwL3fwhZFTFVYAARY7lHSSxJ10V3pH3Y19BxYR77Ib7CpZSu2tijqe3hKqkKAu9KSkCpHKXUIKvvyJZpg2YijRkqfbGgOvyqKuxNWI9oMnJtt6QilZxtyrF7d20FbmabcfiixrQKUsVNXBPPFUXyQ1fJSKFSUbkgs2DUVQC9sz4JkbgN4Qqv66pyoARjurNFJ3TxyfclZiEePtwFJthphEipDFN

59、qnR2HjQKV2DzWtMPDJQkBcXmovdsjqCTJagjMdLsKPgaD2s0H0vmZGAHt36gyUEZ7UmANk1ndREuBeqdgrx0venqGnsyIB2ilq3SIQrNL4m56t7Z8Y8da5K0KUpn5Nzg4JvjdtfFHyt82AoGQkXo4VBLmLEiy2P7HtHBho07rCfttxodYDPPdtQsO7wxD0J6fKKlGm4woDzplhtRr2XgqN13hqy59zU1GegDyQniHNTaVSieueFQcYfUCJwd3vk5I7YKmhunDmIZ ut2ApOdfXXc02GyBKsKCWw97MrqqWho

60、j5TL15Zt6jIPYytYCummtARp3v1N5luizi3xh3BhWYreKO8d9g7nmZQoWPJeTLDrw08gVS8DsDQQYGC3cE7moO2tLF0Jf1gK74IUXyBmtIVR97CkrfVqULT5fn2t6MpJR6rbzVPSortZvIj5NB5ndVvSr4iWr1TwLFKgLSPzuhRjQ3CmZU98eUOuijdLSZqPmvrw9zKupxf8WFUG9l2G9277g2rTipa1YpCZEuqxpKBhtVDCooQOzxUz3vJrZmOcijyM62zchmeooTYes8EBMm932tbz2Yo09RtsZEYS8Zrd

61、2Yktj8l6jEAzVAjnfbtryLvsm6oFbfToXVRFFn7OwIYgJlamkUNXJYbz5Rrb7r4VsuR9zpfZFMfsjhcfCA37lNW2VVLRKN7R8psz1BN6oRic5hU5Z6HCxAYqyNPOG8duYbAwqSl20CSg06Dh2sM8HLtgPkIcSkrgOPDpuHBj1LmPk7lYdvC6NNMwL3fwhZFTFVYAARY7lHSSxJ10V3pH3Y19BxYR77Ib7CpZSu2tijqe3hKqkKAu9KSkCpHKXUIKvvyJZpg2YijRkqfbGgOvyqKuxNWI9oMnJtt6QilZxtyr

62、F7d20FbmabcfiixrQKUsVNXBPPFUXyQ1fJSKFSUbkgs2DUVQC9sz4JkbgN4Qqv66pyoARjurNFJ3TxyfclZiEePtwFJthphEipDFNqnR2HjQKV2DzWtMPDJQkBcXmovdsjqCTJagjMdLsKPgaD2s0H0vmZGAHt36gyUEZ7UmANk1ndREuBeqdgrx0venqGnsyIB2ilq3SIQrNL4m56t7Z8Y8da5K0KUpn5Nzg4JvjdtfFHyt82AoGQkXo4VBLmLEiy2P7HtHBho07rCfttxodYDPPdtQsO7wxD0J6fKKlGm4woDzplhtRr2XgqN13hqy59zU1GegDyQniHNTaVSieueFQcYfUCJwd3vk5I7YKmhunDmIZ

展開閱讀全文
溫馨提示:
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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!