多點溫度監測系統_第1頁
多點溫度監測系統_第2頁
多點溫度監測系統_第3頁
多點溫度監測系統_第4頁
已閱讀5頁,還剩17頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、。電子設計自動化實訓報告題目:多點溫度監測系統學生姓名:宋安邦學 生 學 號 : 2104020685學院:工學院專業:電子信息工程班級: 2011級指導教師:林君副 教 授。1。一、實訓目的和意義通過對多點溫度檢測系統的設計, 可以更深入的了解MC5.2單片機的特點以及應用技巧, 對單片機的應用可以溫習其中的結構以及原理。而且 proteus 的強大功能也能通過此次試驗反應出來,熟悉其界面的風格以及各種應用,又重新的認識了 proteus 在單片機方面的強大功能。二、實訓設計內容要求1. 實現 4 點溫度實時采集,溫度傳感器采用DS18B202. 采用 LCD1602顯示 4 個采集點溫度3

2、. 具有溫度上下限報警功能:上限 90°C,下限 20° C4. 聲音和光報警 2 種模式:光報警采用 4 只發光 LED;聲音報警采用揚聲器,報警音調采用2KHz方波。三、系統設計1方案設計采集溫度8052顯示溫度系統處理2硬件電路設計是否高于90C°是或低于 20C°相應的報警(燈光或蜂鳴器)。1。( 1)工作原理:( a)通過四個溫度采集器采集數字溫度輸入到單片機的p2.0p2.3 口。( b)初始化 LCD1602使 1602 能夠接受數據,并分配其顯示位置,此處采用兩行兩列式顯示。( c)單片機讀取信號。( d)單片機向 LCD1602寫信號,

3、并延時。( e)判斷是否有數據高于 90 度或低于 20 度,如果有 點亮相應的 led ,并啟動蜂鳴器。( 2)硬件系統組成( a) 80C52( b)晶振電路( c)復位電路( d) LED燈電路( e) LCD1602。2。( f )溫度檢測 ds18b203. 軟件設計( 1)時間的設定:從此采用中斷 T0 方式延時,而且是基本單位,無論蜂鳴器還是led ,或是顯示溫度都用到此延時程序。延時程序如下: void tmpDelay(int num)while(num-) ;void Time0(void) interrupt 1 using 0sound=sound;TH0=(65536

4、-5000)/256;TL0=(65536-5000)%256;( 2)信號的讀入與寫出:讀字節程序如下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;。3。tmpDelay(4);return(dat1);一共讀四個字節,接下來是寫字節程序如下void WriteOneChar1(unsigned char dat1)/unsigned c

5、har i=0;for (i=8; i>0; i-)DQ1 = 0;DQ1 = dat1&0x01;tmpDelay(5);DQ1 = 1;dat1>>=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);Init_DS18B201();WriteOneChar1(0xCC);WriteOneChar1

6、(0xBE);。4。a=ReadOneChar1();b=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;elseLED1=1;EA=0;TR0=0;return(t);( 3) 蜂鳴器以及 led 的顯示程序如下void delay(uchar z) uchar x,y; for(x=1000;x>1;x-)for(y=z;y>1;y-);void write_com(uchar com)/ 寫命令函數lcdrs=0;。5。P0=

7、com;delay(5);lcden=1;delay(5);lcden=0;void write_date(uchar date)/ 寫數據函數lcdrs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0; void init_lcd()/ 初始化函數lcden=0;/ 默認開始狀態為關使能端,見時序圖lcdrw=0;/ 選擇狀態為 寫write_com(0x0f);write_com(0x38);/ 顯示模式設置,默認為 0x38, 不用變。write_com(0x01);/ 顯示清屏,將上次的內容清除write_com(0x0c);/ 顯示功能設置 0

8、x0f 為開顯示,顯示光標,光標閃爍; 0x0c 為開顯示,不顯光標,光標不閃write_com(0x06);/ 設置光標狀態默認0x06, 為讀一個字符光標加1.write_com(0x80);/ 設置初始化數據指針for(i=0;i<16;i+) / 顯示 The temperature write_date(t0i);delay(0);write_com(0x80+0x40);for(i=0;i<16;i+)。6。/ 顯示 isCwrite_date(t1i);delay(0);( 4)程序流程圖如下圖所示:開始初始化讀取溫度是否大于 90 度否是否小于20 度否顯示溫度結束

9、點亮相應的 led ,啟動蜂鳴器點亮相應的 led,啟動蜂鳴器四、調試方法及步驟1. 用軟件調試工具先調試設計好的程序,方法是打開調試工具后新建項目,設計開發環境,選擇單片機種類,建立.c ,然后加載到環境中,編寫程序,生成HEX,把他放虛擬單片機中,調試。7。2 出現錯誤,就要修改錯誤,編譯全部通過后再接外圍硬件電路,接上仿真頭,硬件電路供電后再開啟仿真頭,然后正確設置好仿真器,最后全速運行,查看硬件電路顯示結果是否與原設計思想一致。3. 顯示結果正確后結束仿真,先停止運行程序,再關掉仿真頭開關,最后斷電,撬開仿真器。五、結果與討論 .查看結果是否與自己想的一樣,如果不一樣,可以向同學和老師

10、討教,如果一樣就記錄下。六、實訓心得通過本次試驗學會了如何使用虛擬工具來進行單片機的編輯,通過寫 c 語言又溫習了以前的所學,回味看單片機和c 語言的魅力。通過調試程序鍛煉了個人的耐心恒,恒心,毅力,和理論聯系實際的能力通過學習使得懂得了開發工具的使用, 多了一門吃飯的的本領, 多了一門學習其他學科的實踐基礎。經過這次實訓課程設計,我學到了很多書本上沒有的,比較實際、實用的東西,學會了怎樣將理論知識運用到實際設計當中, 對實驗設備和設計軟件的使用和分析問題解決問題的能力也有了很大的提高。 同時也明白了電路焊接和作品調試時,需要更多的耐心。 通過這次實訓課程設計, 不僅可以在專業上可以學到更多的

11、知識,同時也對平時的學習和工作中產生了影響, 那就是認認真真的去完成每一件事。附錄(程序清單)#include<reg52.h>/包含 52 單片機寄存器定義的頭文件。8。/*程序功能: LCD1602 顯示溫度*/#define uchar unsigned char#define uint unsigned intsbit lcdrs=P26;/數據命令選擇控制sbit lcdrw=P25;/讀/ 寫選擇控制sbit lcden=P27;/使能信號sbit LED1=P10;sbit LED2=P11;sbit LED3=P12;sbit LED4=P13;sbit sound

12、=P14;uchar code t0="T1:T2:"uchar code t1="T3:T4:"uchar code digital="0123456789"sbit DQ1=P20;/ 定義溫度 DS18B20接口,詳情見原理圖sbit DQ2=P21;/ 定義溫度 DS18B20接口,詳情見原理圖sbit DQ3=P22;/ 定義溫度 DS18B20接口,詳情見原理圖sbit DQ4=P23;/ 定義溫度 DS18B20接口,詳情見原理圖uchar i;/*函數功能: DS18B20相關函數*/void tmpDelay(int

13、 num)/延時函數while(num-) ;void Time0(void) interrupt 1 using 0sound=sound;TH0=(65536-5000)/256; / 定時器 T0 的高 8 位重新賦初值 TL0=(65536-5000)%256; / 定時器 T0 的高 8 位重新賦初值void Init_DS18B201()/初始化 ds1820unsigned char x=0;DQ1 = 1;/DS復位tmpDelay(8); /稍做延時DQ1 = 0;/單片機將DS拉低tmpDelay(80); /精確延時大于 480us。9。DQ1 = 1;/拉高總線tmpD

14、elay(14);x=DQ1;/稍做延時后如果 x=0 則初始化成功x=1 則初始化失敗tmpDelay(20);void Init_DS18B202()/初始化 ds1820unsigned char x=0;DQ2 = 1;/DS復位tmpDelay(8); /稍做延時DQ2 = 0;/單片機將 DS拉低tmpDelay(80); /精確延時大于 480usDQ2 = 1;/拉高總線tmpDelay(14);x=DQ2;/稍做延時后如果 x=0 則初始化成功x=1 則初始化失敗tmpDelay(20);void Init_DS18B203()/初始化 ds1820unsigned char

15、 x=0;DQ3 = 1;/DS復位tmpDelay(8); /稍做延時DQ3 = 0;/單片機將 DS拉低tmpDelay(80); /精確延時大于 480usDQ3 = 1;/拉高總線tmpDelay(14);x=DQ3;/稍做延時后如果 x=0 則初始化成功x=1 則初始化失敗tmpDelay(20);void Init_DS18B204()/初始化 ds1820unsigned char x=0;DQ4 = 1;/DS復位tmpDelay(8); /稍做延時DQ4 = 0;/單片機將 DS拉低tmpDelay(80); /精確延時大于 480usDQ4 = 1;/拉高總線tmpDela

16、y(14);x=DQ4;/稍做延時后如果 x=0 則初始化成功x=1 則初始化失敗tmpDelay(20);。10。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);unsigned char ReadOneChar2()/讀一個字節unsigned char i=0;unsigned

17、 char dat2 = 0;for (i=8;i>0;i-)DQ2 = 0; /給脈沖信號dat2>>=1;DQ2 = 1; /給脈沖信號if(DQ2)dat2|=0x80;tmpDelay(4);return(dat2);unsigned char ReadOneChar3()/讀一個字節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(da

18、t3);。11。unsigned char ReadOneChar4()/讀一個字節unsigned char i=0;unsigned char dat4 = 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)/寫一個字節unsigned char i=0;for (i=8; i>0; i-)DQ1 = 0;DQ1 = dat1&0x01

19、;tmpDelay(5);DQ1 = 1;dat1>>=1;void WriteOneChar2(unsigned char dat2)/寫一個字節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)/寫一個字節unsigned char i=0;。12。for (i=8; i>0; i-)DQ3 = 0;DQ3 = dat3&0x01;tmp

20、Delay(5);DQ3 = 1;dat3>>=1;void WriteOneChar4(unsigned char dat4)/寫一個字節unsigned 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

21、(0xCC); /跳過讀序號列號的操作WriteOneChar1(0x44); /啟動溫度轉換Init_DS18B201();WriteOneChar1(0xCC); /跳過讀序號列號的操作WriteOneChar1(0xBE); /讀取溫度寄存器a=ReadOneChar1();/連續讀兩個字節數據/讀低 8 位b=ReadOneChar1();/讀高 8位t=b;t<<=8;t=t|a;/ 兩字節合成一個整型變量。tt=t*0.0625;/ 得到真實十進制溫度值,因為 DS18B20可以精確到0.0625 度,所以讀回數據的最低位代表的是0.0625 度t= tt*10;/ 放

22、大十倍,這樣做的目的將小數點后第一位也轉換為可顯示數字,同時進行一個四舍五入操作。if(t>900)|(t<200)。13。LED1=0;EA=1;TR0=1;elseLED1=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); /啟動溫度轉換Init_DS18B202

23、();WriteOneChar2(0xCC); /跳過讀序號列號的操作WriteOneChar2(0xBE); /讀取溫度寄存器a=ReadOneChar2();/連續讀兩個字節數據/讀低 8 位b=ReadOneChar2();/讀高 8位t=b;t<<=8;t=t|a;/ 兩字節合成一個整型變量。tt=t*0.0625;/ 得到真實十進制溫度值,因為 DS18B20可以精確到0.0625 度,所以讀回數據的最低位代表的是0.0625 度t= tt*10;/ 放大十倍,這樣做的目的將小數點后第一位也轉換為可顯示數字,同時進行一個四舍五入操作。if(t>900|t<20

24、0)LED2=0;EA=1;TR0=1;elseLED2=1;EA=0;TR0=0;。14。return(t);unsigned int Readtemp3()/讀取溫度unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B203();WriteOneChar3(0xCC); /跳過讀序號列號的操作WriteOneChar3(0x44); /啟動溫度轉換Init_DS18B203();WriteOneChar3(0xCC); /跳過讀序號列號的操作WriteOneChar3(0xBE); /讀取溫度寄

25、存器a=ReadOneChar3();/連續讀兩個字節數據/讀低 8 位b=ReadOneChar3();/讀高 8位t=b;t<<=8;t=t|a;/ 兩字節合成一個整型變量。tt=t*0.0625;/ 得到真實十進制溫度值,因為 DS18B20可以精確到0.0625 度,所以讀回數據的最低位代表的是0.0625 度t= tt*10;/ 放大十倍,這樣做的目的將小數點后第一位也轉換為可顯示數字,同時進行一個四舍五入操作。if(t>900|t<200)LED3=0;EA=1;TR0=1;elseLED3=1;EA=0;TR0=0;return(t);unsigned i

26、nt Readtemp4()/讀取溫度unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B204();WriteOneChar4(0xCC); /跳過讀序號列號的操作WriteOneChar4(0x44); /啟動溫度轉換。15。Init_DS18B204();WriteOneChar4(0xCC); /跳過讀序號列號的操作WriteOneChar4(0xBE); /讀取溫度寄存器a=ReadOneChar4();/連續讀兩個字節數據/讀低 8 位b=ReadOneChar4();/讀高 8位t=b

27、;t<<=8;t=t|a;/ 兩字節合成一個整型變量。tt=t*0.0625;/ 得到真實十進制溫度值,因為 DS18B20可以精確到0.0625 度,所以讀回數據的最低位代表的是0.0625 度t= tt*10;/ 放大十倍,這樣做的目的將小數點后第一位也轉換為可顯示數字,同時進行一個四舍五入操作。if(t>900|t<200)LED4=0;EA=1;TR0=1;elseLED4=1;EA=0;TR0=0;return(t);/*函數功能: LCD相關函數*/void delay(uchar z) uchar x,y; for(x=1000;x>1;x-) fo

28、r(y=z;y>1;y-);void write_com(uchar com)/ 寫命令函數lcdrs=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;void write_date(uchar date)/ 寫數據函數lcdrs=1;P0=date;delay(5);。16。lcden=1;delay(5);lcden=0; void init_lcd()/初始化函數 lcden=0;/ 默認開始狀態為關使能端,見時序圖lcdrw=0;/ 選擇狀態為 寫write_com(0x0f);write_com(0x38);/顯示模式設置,默認為0x38,

29、 不用變。write_com(0x01);/顯示清屏,將上次的內容清除write_com(0x0c);/顯示功能設置0x0f 為開顯示, 顯示光標, 光標閃爍;0x0c 為開顯示,不顯光標,光標不閃write_com(0x06);/ 設置光標狀態默認0x06, 為讀一個字符光標加 1.write_com(0x80);/ 設置初始化數據指針for(i=0;i<16;i+)/ 顯示 The temperature write_date(t0i);delay(0);write_com(0x80+0x40);for(i=0;i<16;i+)/ 顯示 isCwrite_date(t1i);d

30、elay(0);void display1()/ 顯示函數uint num;/定義的時候用uchar 宏定義就會出錯uint shi,ge,xiaoshu; /定義的時候用uchar 宏定義就會出錯num=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);/顯示“ . ”這個符號wr

31、ite_com(0x80+6);write_date(digitalxiaoshu); /顯示溫度小數位。17。void display2()/顯示函數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(0x2e);/顯示“ . ”這個符號write_com(0x80+15);write_date(digita

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論