單片機(jī)課程設(shè)計(jì) 數(shù)字溫度計(jì)課程設(shè)計(jì)
《單片機(jī)課程設(shè)計(jì) 數(shù)字溫度計(jì)課程設(shè)計(jì)》由會(huì)員分享,可在線閱讀,更多相關(guān)《單片機(jī)課程設(shè)計(jì) 數(shù)字溫度計(jì)課程設(shè)計(jì)(16頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、單片機(jī)原理及系統(tǒng)課程設(shè)計(jì) 評(píng)語: 考勤10分 守紀(jì)10分 過程30分 設(shè)計(jì)報(bào)告30分 答辯20分 總成績(jī)(100分) 專 業(yè):電氣工程及其自動(dòng)化 班 級(jí): 電氣1101 姓 名: 學(xué) 號(hào): 指導(dǎo)教師: 蘭州交通大學(xué)自動(dòng)化與電氣工程學(xué)院 2014 年 1 月 17 日 1 設(shè)計(jì)題目 基于單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)。 2 設(shè)計(jì)方案 2.1設(shè)計(jì)目的 單片機(jī)是單片微
2、型計(jì)算機(jī)的簡(jiǎn)稱,其具有體積小、可靠性高、功能強(qiáng)、靈活方便等優(yōu)點(diǎn),故可以廣泛應(yīng)用于各種領(lǐng)域。其中數(shù)字溫度計(jì)就是一個(gè)典型的例子。 本設(shè)計(jì)所介紹的數(shù)字溫度計(jì)與傳統(tǒng)的溫度計(jì)相比,具有讀數(shù)方便,測(cè)溫范圍廣,測(cè)溫準(zhǔn)確等特點(diǎn),其輸出溫度采用數(shù)字顯示,主要用于對(duì)測(cè)溫要求較高的場(chǎng)所,該設(shè)計(jì)主要使用的元件有單片機(jī)AT89C52,測(cè)溫傳感器使用DS18B20和LCD1602液晶顯示器。 2.2 性能指標(biāo) (1) 基本范圍-50℃-110℃; (2) 精度為0.5℃; (3) 液晶LCD顯示; (4) 可以設(shè)定溫度的上下限以及報(bào)警功能。 3 數(shù)字溫度計(jì)系統(tǒng)的硬件設(shè)計(jì) 3.1 數(shù)字溫度計(jì)硬件框圖 數(shù)字
3、溫度計(jì)系統(tǒng)硬件框圖如圖1所示。 圖1 系統(tǒng)的硬件框圖 3.2 AT89C52單片機(jī) AT89C52單片機(jī)引腳配置圖,如圖2所示。 圖2 AT89C52引腳配置圖 3.3 外圍電路 AT89C52的時(shí)序就是CPU在執(zhí)行指令時(shí)所需控制信號(hào)的時(shí)間順序。選擇了內(nèi)部時(shí)鐘方式,即利用芯片內(nèi)部的振蕩器,然后在引腳XTAL1和XTAL兩端跨接晶體或陶瓷諧振器,就構(gòu)成了穩(wěn)定的自激振蕩器,其發(fā)出的脈沖直接送入內(nèi)部時(shí)鐘電路。外接晶振時(shí),C1和C2值通常選擇為30PF左右。C1和C2對(duì)頻率有微調(diào)作用。晶體的頻率范圍可在1.2~12MHZ之間選擇。 AT89C52的復(fù)位電路是按鍵電平復(fù)位電
4、路,相當(dāng)于按復(fù)位鍵后復(fù)位端通過電阻與Vcc電源接通。復(fù)位是單片機(jī)的初始化操作。單片機(jī)在啟動(dòng)運(yùn)行時(shí),都需要先復(fù)位,其作用是使CPU和系統(tǒng)中其他部件都處于一個(gè)確定的初始狀態(tài),并從這個(gè)狀態(tài)開始工作。 顯示電路采用LCD1602液晶顯示器顯示。 故障狀態(tài)指示電路采用發(fā)光二級(jí)管以及蜂鳴器對(duì)運(yùn)行方式進(jìn)行指示,可清楚看到系統(tǒng)的故障狀態(tài)。 測(cè)溫傳感器DS18B20可以直接讀出被測(cè)溫度值,采用三線制和單片機(jī)相連,少了外部的硬件電路,具有低成本和易使用的特點(diǎn)。 3.4 總設(shè)計(jì)圖 數(shù)字溫度計(jì)系統(tǒng)的硬件總設(shè)計(jì)圖如圖3所示。 圖3 總設(shè)計(jì)圖 4 數(shù)字溫度計(jì)系統(tǒng)的軟件設(shè)計(jì)及系統(tǒng)整體流程 整個(gè)系統(tǒng)的
5、功能是由硬件電路配合軟件來實(shí)現(xiàn)的,從軟件的功能不同,可以分為兩類:主程序和子程序。 主程序是整個(gè)軟件的核心,專門用來協(xié)調(diào)各個(gè)執(zhí)行模塊和操作者的聯(lián)系。 子程序是用來完成各種實(shí)質(zhì)性的工作的,如讀溫度子程序、轉(zhuǎn)換溫度子程序、計(jì)算溫度子程序等。 各執(zhí)行模塊規(guī)劃好以后,就可以規(guī)劃監(jiān)控軟件了。首先要根據(jù)系統(tǒng)的總體功能選擇一種最合適的主程序結(jié)構(gòu),然后根據(jù)實(shí)時(shí)性的條件,合理安排監(jiān)控軟件和執(zhí)行軟件之間的調(diào)度關(guān)系。 4.1 總體流程圖 數(shù)字溫度計(jì)系統(tǒng)總體流程圖如圖4所示。 圖4 主流序流程圖 4.2 子程序流程圖 數(shù)字溫度計(jì)系統(tǒng)子程序主要包含:讀溫度子程序、轉(zhuǎn)換溫度子程序、計(jì)算溫度子程序
6、。 (1)讀溫度子程序流程圖 讀溫度子程序流程圖如圖5所示。 圖5 讀溫度子程序流程圖 (2)轉(zhuǎn)換溫度子程序流程圖 轉(zhuǎn)換溫度子程序流程圖如圖6所示。 圖6 轉(zhuǎn)換溫度子程序流程圖 (3)計(jì)算溫度子程序流程圖 計(jì)算溫度子程序流程圖如圖7所示。 圖7 計(jì)算溫度子程序流程圖 5 仿真結(jié)果 (1) 正常溫度顯示 溫度計(jì)正常溫度顯示如圖8所示。 圖8 正常溫度顯示 (2) 報(bào)警溫度顯示 溫度計(jì)報(bào)警溫度顯示如圖9所示。 圖9 報(bào)警溫度顯示 6 總結(jié) 通過這次單片機(jī)課程設(shè)計(jì),不僅讓我加深了解了單片機(jī)課本上所學(xué)的知識(shí),更通過自己的動(dòng)手設(shè)計(jì),將課
7、本知識(shí)與動(dòng)手操作能力相結(jié)合,讓我對(duì)單片機(jī)及其系統(tǒng)設(shè)計(jì)的認(rèn)識(shí)更進(jìn)一步。 在此次的課程設(shè)計(jì)中我學(xué)會(huì)了很多的東西。經(jīng)過自己努力,基本上完成了設(shè)計(jì)要求的內(nèi)容,在系統(tǒng)可行性分析、原理圖設(shè)計(jì)等方面都作了許多實(shí)際工作,取得了一些結(jié)果,同時(shí)也發(fā)現(xiàn)了許多不足。對(duì)于本次的課程設(shè)計(jì)還有很大提升空間,目前僅完成的是基本功能實(shí)現(xiàn),還有很多的擴(kuò)展功能可以提升。 參考文獻(xiàn) 1. 王思明. 單片機(jī)原理及應(yīng)用系統(tǒng)設(shè)計(jì)[M]. 北京:科學(xué)出版社, 2012. 2. 李廣弟. 單片機(jī)基礎(chǔ)[M]. 北京:北京航空航天大學(xué)出版社, 1994. 3. 艾德才. pentium/80486實(shí)用匯編語言程序設(shè)計(jì)[M]. 北京:清華
8、大學(xué)出版社, 1997.
附錄 源程序
//使用1602LCD顯示DS18B20轉(zhuǎn)換的溫度值
#include
9、6; //超過溫度限制指示燈 sbit beep=P1^7; //超過溫度限制報(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--);
10、 } //第一行開始地址為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;
11、 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:顯示光標(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è)字符, 整屏顯示左移
12、(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) { uchar i; for(i = 0; i < length; i++) {
13、 writeData(str[i]); } } /*****************************DS18B20*******************************/ sbit ds = P3^7; //初始化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
14、 = 0; i = 100; //拉低約800us, 符合協(xié)議要求的480us以上 while(i>0) i--; ds = 1; //產(chǎn)生一個(gè)上升沿, 進(jìn)入等待應(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ù)
15、據(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é)議要求的至少延時(shí)15us以上 b = ds; i = 8; while(i>0) i--; //延時(shí)約64us, 符合讀時(shí)隙不低于60us要求
16、 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ù)
17、據(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后, 在15us~60us內(nèi)將DQ拉高, 即完成寫1 if(b) { ds = 0; i++; i++; //拉低約16u
18、s, 符號(hào)要求15~60us內(nèi) ds = 1; i = 8; while(i>0) i--; //延時(shí)約64us, 符合寫時(shí)隙不低于60us要求 } else //寫"0", 將DQ拉低60us~120us { ds = 0; i = 8; while(i>0) i--; //拉低約64us, 符號(hào)要求 ds = 1; i++; i++; //整個(gè)寫0時(shí)隙過程已經(jīng)超過60
19、us, 這里就不用像寫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 60~240us作為應(yīng)答信號(hào) writeByte(0xcc); //寫入跳過序列號(hào)命令字 Skip Rom writeByte(0x44); //寫入
20、溫度轉(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ù)值
21、float t; unsigned char low, high; sendReadCmd(); //連續(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 = tmp
22、value; //使用DS18B20的默認(rèn)分辨率12位, 精確度為0.0625度, 即讀回?cái)?shù)據(jù)的最低位代表0.0625度 t = value * 0.0625; //將它放大10倍, 使顯示時(shí)可顯示小數(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, 小于
23、0減0.5 return value; } //顯示溫度 void display(int v) { unsigned char count; unsigned char datas[] = {0, 0, 0, 0}; unsigned int tmp = abs(v); datas[0] = tmp / 1000; datas[1] = tmp % 1000 / 100; datas[2] = tmp % 100 / 10; datas[3] = tmp % 10; r= tmp/10;
24、 writeComm(0xc0+3); if(v < 0) { writeString("- ", 2); } else { writeString("+ ", 2); } if(datas[0] != 0) { writeData('0'+datas[0]); } for(count = 1; count != 4; count++) { writeData('0'+datas[count]);
25、 if(count == 2)
{
writeData('.');
}
}
}
/******************************報(bào)警*******************************/
void BEEP()//報(bào)警
{if((r>=high&&r<129)||r 26、*********DS18B20*******************************/
void main()
{
uchar table[] = "Now Temperature ";
delayMs(1);
sendChangeCmd();
init();
writeComm(0x80);
writeString(table, 16);
while(1)
{
delayMs(1000); //溫度轉(zhuǎn)換時(shí)間需要750ms以上
writeComm(0xc0);
display(getTmpValue());
sendChangeCmd();
BEEP();
}
}
- 溫馨提示:
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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 指向核心素養(yǎng)發(fā)展的高中生物學(xué)1輪復(fù)習(xí)備考建議
- 新課程新評(píng)價(jià)新高考導(dǎo)向下高三化學(xué)備考的新思考
- 新時(shí)代背景下化學(xué)高考備考策略及新課程標(biāo)準(zhǔn)的高中化學(xué)教學(xué)思考
- 2025屆江西省高考政治二輪復(fù)習(xí)備考建議
- 新教材新高考背景下的化學(xué)科學(xué)備考策略
- 新高考背景下的2024年高考化學(xué)二輪復(fù)習(xí)備考策略
- 2025屆高三數(shù)學(xué)二輪復(fù)習(xí)備考交流會(huì)課件
- 2025年高考化學(xué)復(fù)習(xí)研究與展望
- 2024年高考化學(xué)復(fù)習(xí)備考講座
- 2025屆高考數(shù)學(xué)二輪復(fù)習(xí)備考策略和方向
- 2024年感動(dòng)中國(guó)十大人物事跡及頒獎(jiǎng)詞
- XX教育系統(tǒng)單位述職報(bào)告教育工作概述教育成果展示面臨的挑戰(zhàn)未來規(guī)劃
- 2025《增值稅法》全文解讀學(xué)習(xí)高質(zhì)量發(fā)展的增值稅制度規(guī)范增值稅的征收和繳納
- 初中資料:400個(gè)語文優(yōu)秀作文標(biāo)題
- 初中語文考試專項(xiàng)練習(xí)題(含答案)