九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > DOCX文檔下載  

單片機課程設計 數(shù)字溫度計課程設計

  • 資源ID:61161192       資源大?。?span id="24d9guoke414" class="font-tahoma">222.20KB        全文頁數(shù):16頁
  • 資源格式: DOCX        下載積分:5積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要5積分
郵箱/手機:
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機號,方便查詢和重復下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗證碼:   換一換

 
賬號:
密碼:
驗證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認打開,此種情況可以點擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標題沒有明確說明有答案則都視為沒有答案,請知曉。

單片機課程設計 數(shù)字溫度計課程設計

單片機原理及系統(tǒng)課程設計評語:考勤10分守紀10分過程30分設計報告30分答辯20分總成績(100分)專 業(yè):電氣工程及其自動化班 級: 電氣1101 姓 名: 學 號: 指導教師: 蘭州交通大學自動化與電氣工程學院2014 年 1 月 17 日1 設計題目基于單片機的數(shù)字溫度計設計。2 設計方案2.1設計目的單片機是單片微型計算機的簡稱,其具有體積小、可靠性高、功能強、靈活方便等優(yōu)點,故可以廣泛應用于各種領域。其中數(shù)字溫度計就是一個典型的例子。本設計所介紹的數(shù)字溫度計與傳統(tǒng)的溫度計相比,具有讀數(shù)方便,測溫范圍廣,測溫準確等特點,其輸出溫度采用數(shù)字顯示,主要用于對測溫要求較高的場所,該設計主要使用的元件有單片機AT89C52,測溫傳感器使用DS18B20和LCD1602液晶顯示器。2.2 性能指標(1) 基本范圍-50-110;(2) 精度為0.5;(3) 液晶LCD顯示;(4) 可以設定溫度的上下限以及報警功能。3 數(shù)字溫度計系統(tǒng)的硬件設計3.1 數(shù)字溫度計硬件框圖數(shù)字溫度計系統(tǒng)硬件框圖如圖1所示。圖1 系統(tǒng)的硬件框圖3.2 AT89C52單片機AT89C52單片機引腳配置圖,如圖2所示。圖2 AT89C52引腳配置圖3.3 外圍電路AT89C52的時序就是CPU在執(zhí)行指令時所需控制信號的時間順序。選擇了內(nèi)部時鐘方式,即利用芯片內(nèi)部的振蕩器,然后在引腳XTAL1和XTAL兩端跨接晶體或陶瓷諧振器,就構(gòu)成了穩(wěn)定的自激振蕩器,其發(fā)出的脈沖直接送入內(nèi)部時鐘電路。外接晶振時,C1和C2值通常選擇為30PF左右。C1和C2對頻率有微調(diào)作用。晶體的頻率范圍可在1.212MHZ之間選擇。AT89C52的復位電路是按鍵電平復位電路,相當于按復位鍵后復位端通過電阻與Vcc電源接通。復位是單片機的初始化操作。單片機在啟動運行時,都需要先復位,其作用是使CPU和系統(tǒng)中其他部件都處于一個確定的初始狀態(tài),并從這個狀態(tài)開始工作。顯示電路采用LCD1602液晶顯示器顯示。故障狀態(tài)指示電路采用發(fā)光二級管以及蜂鳴器對運行方式進行指示,可清楚看到系統(tǒng)的故障狀態(tài)。測溫傳感器DS18B20可以直接讀出被測溫度值,采用三線制和單片機相連,少了外部的硬件電路,具有低成本和易使用的特點。3.4 總設計圖數(shù)字溫度計系統(tǒng)的硬件總設計圖如圖3所示。圖3 總設計圖4 數(shù)字溫度計系統(tǒng)的軟件設計及系統(tǒng)整體流程整個系統(tǒng)的功能是由硬件電路配合軟件來實現(xiàn)的,從軟件的功能不同,可以分為兩類:主程序和子程序。主程序是整個軟件的核心,專門用來協(xié)調(diào)各個執(zhí)行模塊和操作者的聯(lián)系。子程序是用來完成各種實質(zhì)性的工作的,如讀溫度子程序、轉(zhuǎn)換溫度子程序、計算溫度子程序等。各執(zhí)行模塊規(guī)劃好以后,就可以規(guī)劃監(jiān)控軟件了。首先要根據(jù)系統(tǒng)的總體功能選擇一種最合適的主程序結(jié)構(gòu),然后根據(jù)實時性的條件,合理安排監(jiān)控軟件和執(zhí)行軟件之間的調(diào)度關系。4.1 總體流程圖 數(shù)字溫度計系統(tǒng)總體流程圖如圖4所示。圖4 主流序流程圖4.2 子程序流程圖數(shù)字溫度計系統(tǒng)子程序主要包含:讀溫度子程序、轉(zhuǎn)換溫度子程序、計算溫度子程序。(1)讀溫度子程序流程圖讀溫度子程序流程圖如圖5所示。圖5 讀溫度子程序流程圖(2)轉(zhuǎn)換溫度子程序流程圖轉(zhuǎn)換溫度子程序流程圖如圖6所示。圖6 轉(zhuǎn)換溫度子程序流程圖(3)計算溫度子程序流程圖計算溫度子程序流程圖如圖7所示。圖7 計算溫度子程序流程圖5 仿真結(jié)果(1) 正常溫度顯示溫度計正常溫度顯示如圖8所示。圖8 正常溫度顯示(2) 報警溫度顯示溫度計報警溫度顯示如圖9所示。圖9 報警溫度顯示6 總結(jié)通過這次單片機課程設計,不僅讓我加深了解了單片機課本上所學的知識,更通過自己的動手設計,將課本知識與動手操作能力相結(jié)合,讓我對單片機及其系統(tǒng)設計的認識更進一步。在此次的課程設計中我學會了很多的東西。經(jīng)過自己努力,基本上完成了設計要求的內(nèi)容,在系統(tǒng)可行性分析、原理圖設計等方面都作了許多實際工作,取得了一些結(jié)果,同時也發(fā)現(xiàn)了許多不足。對于本次的課程設計還有很大提升空間,目前僅完成的是基本功能實現(xiàn),還有很多的擴展功能可以提升。參考文獻1. 王思明. 單片機原理及應用系統(tǒng)設計M. 北京:科學出版社, 2012.2. 李廣弟. 單片機基礎M. 北京:北京航空航天大學出版社, 1994.3. 艾德才. pentium/80486實用匯編語言程序設計M. 北京:清華大學出版社, 1997.附錄 源程序/使用1602LCD顯示DS18B20轉(zhuǎn)換的溫度值 #include <reg52.H> #include <intrins.H> #include <math.H> #define uchar unsigned char #define uint unsigned int sbit RS = P30; /數(shù)據(jù)/命令選擇端(H/L) sbit LCDEN = P32; /使能端 sbit deng=P16; /超過溫度限制指示燈 sbit beep=P17; /超過溫度限制報警器 uchar high=30; /最高溫度 uchar low=10; /最低溫度 unsigned char r; void delayUs() /短延時 _nop_(); void delayMs(uint a) /長延時 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; P2 = comm; LCDEN = 1; delayUs(); LCDEN = 0; delayMs(1); /寫數(shù)據(jù):RS=1, RW=00 void writeData(uchar dat) RS = 1; P2 = dat; LCDEN = 1; delayUs(); LCDEN = 0; delayMs(1); /初始化函數(shù) /顯示模式, 固定指令為00111000=0x38, 16*2顯示, 5*7點陣,8位數(shù)據(jù)接口 /顯示開/關及光標設置00001100=0x0c /指令1: 00001DCB : D:開顯示/關顯示(H/L); C:顯示光標/不顯示(H/L), B:光標閃爍/不閃爍(H/L) /指令2: 000001NS : /N=1, 當讀/寫一個字符后地址指針加1, 且光標也加1; N=0則相反 /S=1, 當寫一個字符, 整屏顯示左移(N=1)或右移(N=0), 但光標不移動; S=0, 整屏不移動 void init() writeComm(0x38); /顯示模式 writeComm(0x0c); /開顯示, 關光標 writeComm(0x06); /寫字符后地址加1, 光標加1 writeComm(0x01); /清屏 void writeString(uchar * str, uchar length) uchar i; for(i = 0; i < length; i+) writeData(stri); /*DS18B20*/ sbit ds = P37; /初始化DS18B20 /讓DS18B20一段相對長時間低電平, 然后一段相對非常短時間高電平, 即可啟動 void dsInit() /對于11.0592MHz時鐘, unsigned int型的i, 作一個i+操作的時間大于為8us unsigned int i; ds = 0; i = 100; /拉低約800us, 符合協(xié)議要求的480us以上 while(i>0) i-; ds = 1; /產(chǎn)生一個上升沿, 進入等待應答狀態(tài) i = 4; while(i>0) i-; void dsWait() unsigned int i; while(ds); while(ds); /檢測到應答脈沖 i = 4; while(i > 0) i-; /向DS18B20讀取一位數(shù)據(jù)/讀一位, 讓DS18B20一小周期低電平, 然后兩小周期高電平, /之后DS18B20則會輸出持續(xù)一段時間的一位數(shù)據(jù)bit readBit() unsigned int i; bit b; ds = 0; i+; /延時約8us, 符合協(xié)議要求至少保持1us ds = 1; i+; i+; /延時約16us, 符合協(xié)議要求的至少延時15us以上 b = ds; i = 8; while(i>0) i-; /延時約64us, 符合讀時隙不低于60us要求 return b;/讀取一字節(jié)數(shù)據(jù), 通過調(diào)用readBit()來實現(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; unsigned 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-; /延時約64us, 符合寫時隙不低于60us要求 else /寫"0", 將DQ拉低60us120us ds = 0; i = 8; while(i>0) i-; /拉低約64us, 符號要求 ds = 1; i+; i+; /整個寫0時隙過程已經(jīng)超過60us, 這里就不用像寫1那樣, 再延時64us了 /向DS18B20發(fā)送溫度轉(zhuǎn)換命令void sendChangeCmd() dsInit(); /初始化DS18B20, 無論什么命令, 首先都要發(fā)起初始化 dsWait(); /等待DS18B20應答 delayMs(1); /延時1ms, 因為DS18B20會拉低DQ 60240us作為應答信號 writeByte(0xcc); /寫入跳過序列號命令字 Skip Rom writeByte(0x44); /寫入溫度轉(zhuǎn)換命令字 Convert T/向DS18B20發(fā)送讀取數(shù)據(jù)命令void sendReadCmd() dsInit(); dsWait(); delayMs(1); writeByte(0xcc); /寫入跳過序列號命令字 Skip Rom writeByte(0xbe); /寫入讀取數(shù)據(jù)令字 Read Scratchpad/獲取當前溫度值int getTmpValue() unsigned int tmpvalue; int value; /存放溫度數(shù)值 float t; unsigned char low, high; sendReadCmd(); /連續(xù)讀取兩個字節(jié)數(shù)據(jù) low = readByte(); high = readByte(); /將高低兩個字節(jié)合成一個整形變量 /計算機中對于負數(shù)是利用補碼來表示的 /若是負值, 讀取出來的數(shù)值是用補碼表示的, 可直接賦值給int型的value tmpvalue = high; tmpvalue <<= 8; tmpvalue |= low; value = tmpvalue; /使用DS18B20的默認分辨率12位, 精確度為0.0625度, 即讀回數(shù)據(jù)的最低位代表0.0625度 t = value * 0.0625; /將它放大10倍, 使顯示時可顯示小數(shù)點后一位, 并對小數(shù)點后第二位進行4舍5入 /如t=11.0625, 進行計數(shù)后, 得到value = 111, 即11.1 度 /如t=-11.0625, 進行計數(shù)后, 得到value = -111, 即-11.1 度 value = t * 10 + (value > 0 ? 0.5 : -0.5); /大于0加0.5, 小于0減0.5 return value;/顯示溫度void display(int v) unsigned char count; unsigned char datas = 0, 0, 0, 0; unsigned int tmp = abs(v); datas0 = tmp / 1000; datas1 = tmp % 1000 / 100; datas2 = tmp % 100 / 10; datas3 = tmp % 10;r= tmp/10; writeComm(0xc0+3); if(v < 0) writeString("- ", 2); else writeString("+ ", 2); if(datas0 != 0) writeData('0'+datas0); for(count = 1; count != 4; count+) writeData('0'+datascount); if(count = 2) writeData('.'); /*報警*/void BEEP()/報警if(r>=high&&r<129)|r<low) beep=!beep; deng=1; else beep=1; deng=0; /*DS18B20*/void main() uchar table = "Now Temperature " delayMs(1); sendChangeCmd(); init(); writeComm(0x80); writeString(table, 16); while(1) delayMs(1000); /溫度轉(zhuǎn)換時間需要750ms以上 writeComm(0xc0); display(getTmpValue(); sendChangeCmd();BEEP();

注意事項

本文(單片機課程設計 數(shù)字溫度計課程設計)為本站會員(細水****9)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權或隱私,請立即通知裝配圖網(wǎng)(點擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因為網(wǎng)速或其他原因下載失敗請重新下載,重復下載不扣分。




關于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

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

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


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