




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 電子設(shè)計自動化實 訓(xùn) 報 告題 目:多點溫度監(jiān)測系統(tǒng)學(xué)生姓名:宋安邦學(xué)生學(xué)號:2104020685學(xué) 院:工學(xué)院專 業(yè):電子信息工程班 級:2011級指導(dǎo)教師:林君 副教授一、實訓(xùn)目的和意義通過對多點溫度檢測系統(tǒng)的設(shè)計,可以更深入的了解MC5.2單片機的特點以及應(yīng)用技巧,對單片機的應(yīng)用可以溫習(xí)其中的結(jié)構(gòu)以及原理。而且proteus的強大功能也能通過此次試驗反應(yīng)出來,熟悉其界面的風格以及各種應(yīng)用,又重新的認識了proteus在單片機方面的強大功能。二、實訓(xùn)設(shè)計內(nèi)容要求Ø 1.實現(xiàn)4點溫度實時采集,溫度傳感器采用DS18B20Ø 2.采用LCD1602顯示4個采集點溫度
2、216; 3.具有溫度上下限報警功能:上限90°C,下限20°CØ 4.聲音和光報警2種模式: 光報警采用4只發(fā)光LED; 聲音報警采用揚聲器,報警音調(diào)采用2KHz方波。 三、系統(tǒng)設(shè)計1方案設(shè)計采集溫度顯示溫度8052系統(tǒng)處理相應(yīng)的報警(燈光或蜂鳴器)是是否高于90C°或低于20C°2硬件電路設(shè)計(1)工作原理:(a)通過四個溫度采集器采集數(shù)字溫度輸入到單片機的p2.0p2.3口。(b)初始化LCD1602使1602能夠接受數(shù)據(jù),并分配其顯示位置,此處采用兩行兩列式顯示。(c)單片機讀取信號。(d)單片機向LCD1602寫信號,并延時。(e)判
3、斷是否有數(shù)據(jù)高于90度或低于20度,如果有 點亮相應(yīng)的led,并啟動蜂鳴器。(2)硬件系統(tǒng)組成(a)80C52(b)晶振電路(c)復(fù)位電路(d)LED燈電路(e)LCD1602(f)溫度檢測ds18b203. 軟件設(shè)計(1)時間的設(shè)定:從此采用中斷T0方式延時,而且是基本單位,無論蜂鳴器還是led,或是顯示溫度都用到此延時程序。延時程序如下:void tmpDelay(int num)while(num-) ; void Time0(void) interrupt 1 using 0 sound=sound; TH0=(65536-5000)/256; TL0=(65536-5000)%256
4、; (2)信號的讀入與寫出:讀字節(jié)程序如下unsigned char ReadOneChar1()/unsigned char i=0;unsigned char dat1 = 0;for (i=8;i>0;i-)DQ1 = 0; / 給脈沖信號dat1>>=1;DQ1 = 1; / 給脈沖信號if(DQ1)dat1|=0x80;tmpDelay(4);return(dat1);一共讀四個字節(jié),接下來是寫字節(jié)程序如下void WriteOneChar1(unsigned char dat1)/unsigned char i=0;for (i=8; i>0; i-)DQ1
5、 = 0;DQ1 = dat1&0x01;tmpDelay(5);DQ1 = 1;dat1>>=1;注意度字節(jié)的返回值。 讀取溫度unsigned int Readtemp1()/unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B201();WriteOneChar1(0xCC); WriteOneChar1(0x44); Init_DS18B201();WriteOneChar1(0xCC); WriteOneChar1(0xBE); a=ReadOneChar1(); b=
6、ReadOneChar1(); /t=b;t<<=8;t=t|a; tt=t*0.0625; t= tt*10; if(t>900)|(t<200)LED1=0;EA=1;TR0=1;else LED1=1;EA=0;TR0=0;return(t); (3) 蜂鳴器以及l(fā)ed的顯示程序如下void delay(uchar z)uchar x,y; for(x=1000;x>1;x-)for(y=z;y>1;y-);void write_com(uchar com)/寫命令函數(shù)lcdrs=0;P0=com;delay(5);lcden=1;delay(5);
7、lcden=0; void write_date(uchar date)/寫數(shù)據(jù)函數(shù)lcdrs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0; void init_lcd()/初始化函數(shù)lcden=0;/默認開始狀態(tài)為關(guān)使能端,見時序圖 lcdrw=0;/選擇狀態(tài)為 寫write_com(0x0f);write_com(0x38);/顯示模式設(shè)置,默認為0x38,不用變。write_com(0x01);/顯示清屏,將上次的內(nèi)容清除write_com(0x0c);/顯示功能設(shè)置0x0f為開顯示,顯示光標,光標閃爍;0x0c為開顯示,不顯光標,光標不閃wr
8、ite_com(0x06);/設(shè)置光標狀態(tài)默認0x06,為讀一個字符光標加1. write_com(0x80);/設(shè)置初始化數(shù)據(jù)指針for(i=0;i<16;i+)/顯示 The temperaturewrite_date(t0i);delay(0);write_com(0x80+0x40);for(i=0;i<16;i+)/顯示 is C write_date(t1i);delay(0);(4)程序流程圖如下圖所示:開始初始化讀取溫度點亮相應(yīng)的led,啟動蜂鳴器是否大于90度否點亮相應(yīng)的led,啟動蜂鳴器是否小于20度否結(jié)束顯示溫度四、調(diào)試方法及步驟1.用軟件調(diào)試工具先調(diào)試設(shè)計好
9、的程序,方法是打開調(diào)試工具后新建項目,設(shè)計開發(fā)環(huán)境,選擇單片機種類,建立.c,然后加載到環(huán)境中,編寫程序,生成HEX,把他放虛擬單片機中,調(diào)試。2出現(xiàn)錯誤,就要修改錯誤,編譯全部通過后再接外圍硬件電路,接上仿真頭,硬件電路供電后再開啟仿真頭,然后正確設(shè)置好仿真器,最后全速運行,查看硬件電路顯示結(jié)果是否與原設(shè)計思想一致。3.顯示結(jié)果正確后結(jié)束仿真,先停止運行程序,再關(guān)掉仿真頭開關(guān),最后斷電,撬開仿真器。五、結(jié)果與討論.查看結(jié)果是否與自己想的一樣,如果不一樣,可以向同學(xué)和老師討教,如果一樣就記錄下。六、實訓(xùn)心得通過本次試驗學(xué)會了如何使用虛擬工具來進行單片機的編輯,通過寫c語言又溫習(xí)了以前的所學(xué),回
10、味看單片機和c語言的魅力。通過調(diào)試程序鍛煉了個人的耐心恒,恒心,毅力,和理論聯(lián)系實際的能力通過學(xué)習(xí)使得懂得了開發(fā)工具的使用,多了一門吃飯的的本領(lǐng),多了一門學(xué)習(xí)其他學(xué)科的實踐基礎(chǔ)。經(jīng)過這次實訓(xùn)課程設(shè)計,我學(xué)到了很多書本上沒有的,比較實際、實用的東西,學(xué)會了怎樣將理論知識運用到實際設(shè)計當中,對實驗設(shè)備和設(shè)計軟件的使用和分析問題解決問題的能力也有了很大的提高。同時也明白了電路焊接和作品調(diào)試時,需要更多的耐心。通過這次實訓(xùn)課程設(shè)計,不僅可以在專業(yè)上可以學(xué)到更多的知識,同時也對平時的學(xué)習(xí)和工作中產(chǎn)生了影響,那就是認認真真的去完成每一件事。附錄(程序清單)#include<reg52.h> /
11、 包含52單片機寄存器定義的頭文件/*程序功能:LCD1602 顯示溫度*/#define uchar unsigned char #define uint unsigned intsbit lcdrs=P26; /數(shù)據(jù)命令選擇控制sbit lcdrw=P25; /讀/寫選擇控制sbit lcden=P27; /使能信號sbit LED1=P10;sbit LED2=P11;sbit LED3=P12;sbit LED4=P13;sbit sound=P14;uchar code t0="T1: T2: "uchar code t1="T3: T4: "
12、uchar code digital="0123456789"sbit DQ1=P20; /定義溫度DS18B20接口,詳情見原理圖sbit DQ2=P21; /定義溫度DS18B20接口,詳情見原理圖sbit DQ3=P22; /定義溫度DS18B20接口,詳情見原理圖sbit DQ4=P23; /定義溫度DS18B20接口,詳情見原理圖uchar i;/*函數(shù)功能:DS18B20相關(guān)函數(shù)*/void tmpDelay(int num)/延時函數(shù)while(num-) ; void Time0(void) interrupt 1 using 0 sound=sound;
13、TH0=(65536-5000)/256; /定時器T0的高8位重新賦初值TL0=(65536-5000)%256; /定時器T0的高8位重新賦初值 void Init_DS18B201()/初始化ds1820unsigned char x=0;DQ1 = 1; /DS復(fù)位tmpDelay(8); /稍做延時DQ1 = 0; /單片機將DS拉低tmpDelay(80); /精確延時 大于 480usDQ1 = 1; /拉高總線tmpDelay(14);x=DQ1; /稍做延時后 如果x=0則初始化成功 x=1則初始化失敗tmpDelay(20);void Init_DS18B202()/初始化
14、ds1820unsigned char x=0;DQ2 = 1; /DS復(fù)位tmpDelay(8); /稍做延時DQ2 = 0; /單片機將DS拉低tmpDelay(80); /精確延時 大于 480usDQ2 = 1; /拉高總線tmpDelay(14);x=DQ2; /稍做延時后 如果x=0則初始化成功 x=1則初始化失敗tmpDelay(20);void Init_DS18B203()/初始化ds1820unsigned char x=0;DQ3 = 1; /DS復(fù)位tmpDelay(8); /稍做延時DQ3 = 0; /單片機將DS拉低tmpDelay(80); /精確延時 大于 48
15、0usDQ3 = 1; /拉高總線tmpDelay(14);x=DQ3; /稍做延時后 如果x=0則初始化成功 x=1則初始化失敗tmpDelay(20);void Init_DS18B204()/初始化ds1820unsigned char x=0;DQ4 = 1; /DS復(fù)位tmpDelay(8); /稍做延時DQ4 = 0; /單片機將DS拉低tmpDelay(80); /精確延時 大于 480usDQ4 = 1; /拉高總線tmpDelay(14);x=DQ4; /稍做延時后 如果x=0則初始化成功 x=1則初始化失敗tmpDelay(20);unsigned char ReadOne
16、Char1()/讀一個字節(jié)unsigned char i=0;unsigned char dat1 = 0;for (i=8;i>0;i-)DQ1 = 0; / 給脈沖信號dat1>>=1;DQ1 = 1; / 給脈沖信號if(DQ1)dat1|=0x80;tmpDelay(4);return(dat1);unsigned char ReadOneChar2()/讀一個字節(jié)unsigned char i=0;unsigned char dat2 = 0;for (i=8;i>0;i-)DQ2 = 0; / 給脈沖信號dat2>>=1;DQ2 = 1; / 給
17、脈沖信號if(DQ2)dat2|=0x80;tmpDelay(4);return(dat2);unsigned char ReadOneChar3()/讀一個字節(jié)unsigned char i=0;unsigned char dat3 = 0;for (i=8;i>0;i-)DQ3 = 0; / 給脈沖信號dat3>>=1;DQ3 = 1; / 給脈沖信號if(DQ3)dat3|=0x80;tmpDelay(4);return(dat3);unsigned char ReadOneChar4()/讀一個字節(jié)unsigned char i=0;unsigned char dat
18、4 = 0;for (i=8;i>0;i-)DQ4 = 0; / 給脈沖信號dat4>>=1;DQ4 = 1; / 給脈沖信號if(DQ4)dat4|=0x80;tmpDelay(4);return(dat4);void WriteOneChar1(unsigned char dat1)/寫一個字節(jié)unsigned char i=0;for (i=8; i>0; i-)DQ1 = 0;DQ1 = dat1&0x01;tmpDelay(5);DQ1 = 1;dat1>>=1;void WriteOneChar2(unsigned char dat2)/
19、寫一個字節(jié)unsigned char i=0;for (i=8; i>0; i-)DQ2 = 0;DQ2 = dat2&0x01;tmpDelay(5);DQ2 = 1;dat2>>=1;void WriteOneChar3(unsigned char dat3)/寫一個字節(jié)unsigned char i=0;for (i=8; i>0; i-)DQ3 = 0;DQ3 = dat3&0x01;tmpDelay(5);DQ3 = 1;dat3>>=1;void WriteOneChar4(unsigned char dat4)/寫一個字節(jié)uns
20、igned char i=0;for (i=8; i>0; i-)DQ4 = 0;DQ4 = dat4&0x01;tmpDelay(5);DQ4 = 1;dat4>>=1;unsigned int Readtemp1()/讀取溫度unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B201();WriteOneChar1(0xCC); / 跳過讀序號列號的操作WriteOneChar1(0x44); / 啟動溫度轉(zhuǎn)換Init_DS18B201();WriteOneChar1(
21、0xCC); /跳過讀序號列號的操作WriteOneChar1(0xBE); /讀取溫度寄存器a=ReadOneChar1(); /連續(xù)讀兩個字節(jié)數(shù)據(jù) /讀低8位 b=ReadOneChar1(); /讀高8位t=b;t<<=8;t=t|a; /兩字節(jié)合成一個整型變量。tt=t*0.0625; /得到真實十進制溫度值,因為DS18B20可以精確到0.0625度,所以讀回數(shù)據(jù)的最低位代表的是0.0625度t= tt*10; /放大十倍,這樣做的目的將小數(shù)點后第一位也轉(zhuǎn)換為可顯示數(shù)字,同時進行一個四舍五入操作。if(t>900)|(t<200)LED1=0;EA=1;TR0
22、=1;else LED1=1;EA=0;TR0=0;return(t); unsigned int Readtemp2()/讀取溫度unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B202();WriteOneChar2(0xCC); / 跳過讀序號列號的操作WriteOneChar2(0x44); / 啟動溫度轉(zhuǎn)換Init_DS18B202();WriteOneChar2(0xCC); /跳過讀序號列號的操作WriteOneChar2(0xBE); /讀取溫度寄存器a=ReadOneChar2(
23、); /連續(xù)讀兩個字節(jié)數(shù)據(jù) /讀低8位 b=ReadOneChar2(); /讀高8位t=b;t<<=8;t=t|a; /兩字節(jié)合成一個整型變量。tt=t*0.0625; /得到真實十進制溫度值,因為DS18B20可以精確到0.0625度,所以讀回數(shù)據(jù)的最低位代表的是0.0625度t= tt*10; /放大十倍,這樣做的目的將小數(shù)點后第一位也轉(zhuǎn)換為可顯示數(shù)字,同時進行一個四舍五入操作。if(t>900|t<200)LED2=0;EA=1;TR0=1;else LED2=1;EA=0;TR0=0;return(t); unsigned int Readtemp3()/讀取
24、溫度unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B203();WriteOneChar3(0xCC); / 跳過讀序號列號的操作WriteOneChar3(0x44); / 啟動溫度轉(zhuǎn)換Init_DS18B203();WriteOneChar3(0xCC); /跳過讀序號列號的操作WriteOneChar3(0xBE); /讀取溫度寄存器a=ReadOneChar3(); /連續(xù)讀兩個字節(jié)數(shù)據(jù) /讀低8位 b=ReadOneChar3(); /讀高8位t=b;t<<=8;t=t|a
25、; /兩字節(jié)合成一個整型變量。tt=t*0.0625; /得到真實十進制溫度值,因為DS18B20可以精確到0.0625度,所以讀回數(shù)據(jù)的最低位代表的是0.0625度t= tt*10; /放大十倍,這樣做的目的將小數(shù)點后第一位也轉(zhuǎn)換為可顯示數(shù)字,同時進行一個四舍五入操作。if(t>900|t<200)LED3=0;EA=1;TR0=1;else LED3=1;EA=0;TR0=0;return(t); unsigned int Readtemp4()/讀取溫度unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=
26、0;Init_DS18B204();WriteOneChar4(0xCC); / 跳過讀序號列號的操作WriteOneChar4(0x44); / 啟動溫度轉(zhuǎn)換Init_DS18B204();WriteOneChar4(0xCC); /跳過讀序號列號的操作WriteOneChar4(0xBE); /讀取溫度寄存器a=ReadOneChar4(); /連續(xù)讀兩個字節(jié)數(shù)據(jù) /讀低8位 b=ReadOneChar4(); /讀高8位t=b;t<<=8;t=t|a; /兩字節(jié)合成一個整型變量。tt=t*0.0625; /得到真實十進制溫度值,因為DS18B20可以精確到0.0625度,所以
27、讀回數(shù)據(jù)的最低位代表的是0.0625度t= tt*10; /放大十倍,這樣做的目的將小數(shù)點后第一位也轉(zhuǎn)換為可顯示數(shù)字,同時進行一個四舍五入操作。if(t>900|t<200)LED4=0;EA=1;TR0=1;else LED4=1;EA=0;TR0=0;return(t); /*函數(shù)功能:LCD相關(guān)函數(shù)*/void delay(uchar z)uchar x,y; for(x=1000;x>1;x-)for(y=z;y>1;y-);void write_com(uchar com)/寫命令函數(shù)lcdrs=0;P0=com;delay(5);lcden=1;delay(
28、5); lcden=0; void write_date(uchar date)/寫數(shù)據(jù)函數(shù)lcdrs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0; void init_lcd()/初始化函數(shù)lcden=0;/默認開始狀態(tài)為關(guān)使能端,見時序圖 lcdrw=0;/選擇狀態(tài)為 寫write_com(0x0f);write_com(0x38);/顯示模式設(shè)置,默認為0x38,不用變。write_com(0x01);/顯示清屏,將上次的內(nèi)容清除write_com(0x0c);/顯示功能設(shè)置0x0f為開顯示,顯示光標,光標閃爍;0x0c為開顯示,不顯光標,光標
29、不閃write_com(0x06);/設(shè)置光標狀態(tài)默認0x06,為讀一個字符光標加1. write_com(0x80);/設(shè)置初始化數(shù)據(jù)指針for(i=0;i<16;i+)/顯示 The temperaturewrite_date(t0i);delay(0);write_com(0x80+0x40);for(i=0;i<16;i+)/顯示 is C write_date(t1i);delay(0);void display1()/顯示函數(shù)uint num; /定義的時候用uchar宏定義就會出錯uint shi,ge,xiaoshu; /定義的時候用uchar宏定義就會出錯num=
30、Readtemp1();shi=num/100;ge=num/10%10;xiaoshu=num%10;write_com(0x80+3);write_date(digitalshi); /顯示溫度十位write_com(0x80+4);write_date(digitalge);/顯示溫度個位write_com(0x80+5);write_date(0x2e); /顯示“.”這個符號write_com(0x80+6);write_date(digitalxiaoshu); /顯示溫度小數(shù)位void display2()/顯示函數(shù)uint num; /定義的時候用uchar宏定義就會出錯uint shi,ge,xiaoshu; /定義的時候用uchar宏定義就會出錯num=Readtemp2();shi=num/100;ge=num/10%10;xiaoshu=num%10;write_com(0x80+12);write_date(digitalshi); /顯示溫度十位write_com(0x80+13);write_date(digitalge);/顯示溫度個位write_com(0x80+14);write_date(0x2
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 倉儲物流管理試題及答案
- 廣告設(shè)計師考試的解析思路與試題及答案
- 疫情輿論面試題及答案
- 2024年商業(yè)設(shè)計師考試變更試題及答案
- 2024年廣告設(shè)計師廣告管理知識試題及答案
- 創(chuàng)新思維試題題庫及答案
- 決策能力的2024年國際商業(yè)美術(shù)設(shè)計師考試試題及答案
- 2024年助理廣告師考試全局認知能力考核試題及答案
- 初中數(shù)學(xué)試題及答案詳解
- 滲透思維國際商業(yè)美術(shù)設(shè)計師考試試題及答案
- 室內(nèi)設(shè)計人機工程學(xué)講義
- GB/T 35513.2-2017塑料聚碳酸酯(PC)模塑和擠出材料第2部分:試樣制備和性能測試
- T-CEEAS 004-2021 企業(yè)合規(guī)師職業(yè)技能評價標準
- 林教頭風雪山神廟【區(qū)一等獎】-完整版課件
- 兒童生長發(fā)育專項能力提升項目-初級結(jié)業(yè)考試卷
- 天津市新版就業(yè)、勞動合同登記名冊
- 改性環(huán)氧樹脂薄層鋪裝方案
- 產(chǎn)品追溯及模擬召回演練計劃
- 合同到期協(xié)議書(3篇)
- IPC-A-610國際標準中英文對照(doc 17)
- 山大《毛澤東思想和中國特色社會主義理論體系概論》教案第3章 社會主義改造理論
評論
0/150
提交評論