數(shù)字溫度計(jì)課程設(shè)計(jì)_第1頁
數(shù)字溫度計(jì)課程設(shè)計(jì)_第2頁
數(shù)字溫度計(jì)課程設(shè)計(jì)_第3頁
數(shù)字溫度計(jì)課程設(shè)計(jì)_第4頁
數(shù)字溫度計(jì)課程設(shè)計(jì)_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 單片機(jī)原理及系統(tǒng)課程設(shè)計(jì)專 業(yè): 電氣工程及其自動(dòng)化 班 級(jí): 姓 名: 學(xué) 號(hào): 指導(dǎo)教師: 評(píng)語:平時(shí)(40)修改(30)報(bào)告(30)總成績(jī)蘭州交通大學(xué)自動(dòng)化與電氣工程學(xué)院2012 年 7月 1日基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)1 數(shù)字溫度計(jì)的設(shè)計(jì)要求與設(shè)計(jì)方案1.1 基本設(shè)計(jì)要求隨著人們生活水平的不斷提高,單片機(jī)控制無疑是人們追求的目標(biāo)之一,它所給人帶來的方便也是不可否定的,其中數(shù)字溫度計(jì)就是一個(gè)典型的例子,但人們對(duì)它的要求越來越高,要為現(xiàn)代人工作、科研、生活、提供更好的更方便的設(shè)施就需要從數(shù)單片機(jī)技術(shù)入手,一切向著數(shù)字化控制,智能化控制方向發(fā)展。本設(shè)計(jì)所介紹的數(shù)字溫度計(jì)與傳統(tǒng)的溫度計(jì)相比

2、,具有讀數(shù)方便,測(cè)溫范圍廣,測(cè)溫準(zhǔn)確,其輸出溫度采用數(shù)字顯示,主要用于對(duì)測(cè)溫比較準(zhǔn)確的場(chǎng)所,或科研實(shí)驗(yàn)室使用,該設(shè)計(jì)控制器使用單片機(jī)AT89C52,測(cè)溫傳感器使用DS18B20,用1602液晶實(shí)現(xiàn)溫度顯示,能準(zhǔn)確達(dá)到以上要求。1.2 性能指標(biāo)(1) 基本范圍-50-110;(2) 精度誤差小于0.5;(3) 液晶LCD顯示;(4) 可以設(shè)定溫度的上下限報(bào)警功能。2 數(shù)字溫度計(jì)系統(tǒng)的硬件設(shè)計(jì)2.1 數(shù)字溫度計(jì)硬件框圖數(shù)字溫度計(jì)系統(tǒng)硬件框圖如圖2.1所示。圖2.1系統(tǒng)的硬件框圖2.2 AT89C52單片機(jī)AT89C52單片機(jī)引腳配置圖,如圖2.2所示。圖2.2 AT89C52引腳配置截圖2.3 總

3、設(shè)計(jì)圖數(shù)字溫度計(jì)系統(tǒng)的硬件總設(shè)計(jì)圖如圖2.3所示。圖2.3總設(shè)計(jì)圖如圖2.3所示,AT89C52的時(shí)鐘電路是單片機(jī)內(nèi)部有一個(gè)高增益、反相放大器,其輸入端為芯片引腳XTAL1,其輸出端為引腳XTAL2。通過這兩個(gè)引腳在芯片外并接石英晶體振蕩器和兩只電容(電容和一般取33pF)。構(gòu)成一個(gè)穩(wěn)定的自激振蕩器。AT89C52的按鍵復(fù)位操作,若要復(fù)位,只要按圖中的RESET鍵,電源VCC經(jīng)電阻分壓,在RESET端產(chǎn)生一個(gè)復(fù)位高電平。顯示電路對(duì)于現(xiàn)實(shí)電路我們采用LCD1602液晶顯示。 故障狀態(tài)指示電路本設(shè)計(jì)采用發(fā)光二級(jí)管以及蜂鳴器對(duì)運(yùn)行方式進(jìn)行指示,可清楚看到系統(tǒng)的故障狀態(tài)。3 數(shù)字溫度計(jì)系統(tǒng)的軟件設(shè)計(jì)及

4、系統(tǒng)整體流程3.1 總體流程圖數(shù)字溫度計(jì)系統(tǒng)總體流程圖如圖3.1所示。圖3.1 主流序流程圖3.2 子程序流程圖數(shù)字溫度計(jì)系統(tǒng)子程序主要包含:讀溫度子程序、轉(zhuǎn)換溫度子程序、計(jì)算溫度子程序。 讀溫度子程序流程圖讀溫度子程序流程圖如圖3.2所示。圖3.2 讀溫度子程序流程圖3.2.2 轉(zhuǎn)換溫度子程序流程圖轉(zhuǎn)換溫度子程序流程圖如圖3.3所示。圖3.3 轉(zhuǎn)換溫度子程序流程圖3.2.3 計(jì)算溫度子程序流程圖計(jì)算溫度子程序流程圖如圖3.4所示。圖3.4 計(jì)算溫度子程序流程圖4 設(shè)計(jì)體會(huì)與小結(jié)通過這次對(duì)數(shù)字溫度計(jì)的設(shè)計(jì)與制作,讓我了解了設(shè)計(jì)電路的程序,也讓我了解了關(guān)于數(shù)字溫度計(jì)的原理與設(shè)計(jì)理念。本設(shè)計(jì)主要完

5、成了一款簡(jiǎn)單的數(shù)字溫度計(jì)設(shè)計(jì),溫度通過LCD屏顯示出來。實(shí)現(xiàn)溫度測(cè)試的基本功能要求。在1周的課程設(shè)計(jì)中我學(xué)會(huì)了很多的東西。經(jīng)過自己努力,基本上完成了設(shè)計(jì)要求的內(nèi)容,在系統(tǒng)可行性分析、原理圖設(shè)計(jì)等方面都作了許多實(shí)際工作,取得了一些成績(jī),同時(shí)也存在一些不足。對(duì)于本次的課程設(shè)計(jì)還有很大提升空間,目前僅完成的是基本功能實(shí)現(xiàn),還有很多的擴(kuò)展功能可以提升。在這次課程設(shè)計(jì)中我發(fā)現(xiàn),凡事都要自己去動(dòng)下手,去實(shí)踐一下,遇到困難,永遠(yuǎn)不要沮喪氣餒,只有這樣才能讓自己進(jìn)一步的去學(xué)會(huì)新的東西和知識(shí)。在動(dòng)手的過程中,不僅能增強(qiáng)實(shí)踐能力,而且在理論上可以有更深的認(rèn)識(shí)。 參考文獻(xiàn)1 李群芳,張士軍,黃建.單片微型計(jì)算機(jī)與接

6、口技術(shù)M.北京:電子工業(yè)出版.2008.2 丁元杰,吳大偉.單片微機(jī)習(xí)題集與實(shí)驗(yàn)指導(dǎo)書M.機(jī)械工業(yè)出版社.2004.3 張友德,趙志英,涂時(shí)亮.單片微型機(jī)原理M.上海:復(fù)旦大學(xué)出版社.2005.附錄A 源程序/使用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

7、 = P32; /使能端 sbit deng=P16; /超過溫度限制指示燈 sbit beep=P17; /超過溫度限制報(bào)警器 uchar high=30; /最高溫度 uchar low=10; /最低溫度 unsigned char r; void delayUs() /短延時(shí) _nop_(); void delayMs(uint a) /長(zhǎng)延時(shí) uint i, j; for(i = a; i > 0; i-) for(j = 100; j > 0; j-); /第一行開始地址為0x80, 第二行開始地址為0xc0; /寫命令:RS=0, RW=0; void writeCo

8、mm(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點(diǎn)陣,8位數(shù)據(jù)接口 /顯示開/關(guān)及光標(biāo)設(shè)置00001100=0x0c /指令1: 00001DCB : D:開顯示/關(guān)顯示(H/L); C:

9、顯示光標(biāo)/不顯示(H/L), B:光標(biāo)閃爍/不閃爍(H/L) /指令2: 000001NS : /N=1, 當(dāng)讀/寫一個(gè)字符后地址指針加1, 且光標(biāo)也加1; N=0則相反 /S=1, 當(dāng)寫一個(gè)字符, 整屏顯示左移(N=1)或右移(N=0), 但光標(biāo)不移動(dòng); S=0, 整屏不移動(dòng) void init() writeComm(0x38); /顯示模式 writeComm(0x0c); /開顯示, 關(guān)光標(biāo) writeComm(0x06); /寫字符后地址加1, 光標(biāo)加1 writeComm(0x01); /清屏 void writeString(uchar * str, uchar length)

10、uchar i; for(i = 0; i < length; i+) writeData(stri); /*DS18B20*/ sbit ds = P37; /初始化DS18B20 /讓DS18B20一段相對(duì)長(zhǎng)時(shí)間低電平, 然后一段相對(duì)非常短時(shí)間高電平, 即可啟動(dòng) void dsInit() /對(duì)于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)入等

11、待應(yīng)答狀態(tài) i = 4; while(i>0) i-; void dsWait() unsigned int i; while(ds); while(ds); /檢測(cè)到應(yīng)答脈沖 i = 4; while(i > 0) i-; /向DS18B20讀取一位數(shù)據(jù)/讀一位, 讓DS18B20一小周期低電平, 然后兩小周期高電平, /之后DS18B20則會(huì)輸出持續(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é)議要求的至少

12、延時(shí)15us以上 b = ds; i = 8; while(i>0) i-; /延時(shí)約64us, 符合讀時(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 writ

13、eByte(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, 符號(hào)要求1560us內(nèi) ds = 1; i = 8; while(i>0) i-; /延時(shí)約64us, 符合寫時(shí)隙不低于60us要求 else /寫"0"

14、, 將DQ拉低60us120us ds = 0; i = 8; while(i>0) i-; /拉低約64us, 符號(hào)要求 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會(huì)拉低DQ 60240us作為應(yīng)答信號(hào) writeByte(0xcc); /寫入跳過序列號(hào)命令字

15、 Skip Rom writeByte(0x44); /寫入溫度轉(zhuǎn)換命令字 Convert T/向DS18B20發(fā)送讀取數(shù)據(jù)命令void sendReadCmd() dsInit(); dsWait(); delayMs(1); writeByte(0xcc); /寫入跳過序列號(hào)命令字 Skip Rom writeByte(0xbe); /寫入讀取數(shù)據(jù)令字 Read Scratchpad/獲取當(dāng)前溫度值int getTmpValue() unsigned int tmpvalue; int value; /存放溫度數(shù)值 float t; unsigned char low, high; sen

16、dReadCmd(); /連續(xù)讀取兩個(gè)字節(jié)數(shù)據(jù) low = readByte(); high = readByte(); /將高低兩個(gè)字節(jié)合成一個(gè)整形變量 /計(jì)算機(jī)中對(duì)于負(fù)數(shù)是利用補(bǔ)碼來表示的 /若是負(fù)值, 讀取出來的數(shù)值是用補(bǔ)碼表示的, 可直接賦值給int型的value tmpvalue = high; tmpvalue <<= 8; tmpvalue |= low; value = tmpvalue; /使用DS18B20的默認(rèn)分辨率12位, 精確度為0.0625度, 即讀回?cái)?shù)據(jù)的最低位代表0.0625度 t = value * 0.0625; /將它放大10倍, 使顯示時(shí)可顯

17、示小數(shù)點(diǎn)后一位, 并對(duì)小數(shù)點(diǎn)后第二位進(jìn)行4舍5入 /如t=11.0625, 進(jìn)行計(jì)數(shù)后, 得到value = 111, 即11.1 度 /如t=-11.0625, 進(jìn)行計(jì)數(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); da

18、tas0 = 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('.'); /*報(bào)警*/void BEEP()/報(bào)警if(r>=high&&r<129)|r<low) beep=!beep; deng=1; else beep=1; deng=0; /*DS18B20*/void main() uchar ta

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論