




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、電子設計自動化實訓報告題目:多點溫度監測系統學生姓名:宋安邦學生學號:2104020685學院:工學院專業:電子信息工程班級:2 0 11 級指 導 教 師 : 林 君 副 教 授一、實訓目的和意義通過對多點溫度檢測系統的設計, 可以更深入的了解 MC5.2單片機的特點以 及應用技巧,對單片機的應用可以溫習其中的結構以及原理。 而且 proteus 的強 大功能也能通過此次試驗反應出來, 熟悉其界面的風格以及各種應用, 又重新的 認識了 proteus 在單片機方面的強大功能。二、實訓設計內容要求1. 實現 4 點溫度實時采集,溫度傳感器采用 DS18B202. 采用 LCD1602顯示 4
2、個采集點溫度? 3. 具有溫度上下限報警功能:上限 90C,下限 20 C? 4. 聲音和光報警 2 種模式:光報警采用 4 只發光 LED;聲音報警采用揚聲器,報警音調采用 2KHz方波。三、系統設計1方案設計相應的報警(燈光 或蜂鳴器)( 1)工作原理:( a) 通過四個溫度采集器采集數字溫度輸入到單片機的 p2.0p2.3 口。(b)初始化 LCD1602使 1602能夠接受數據,并分配其顯示位置,此處采用兩行 兩列式顯示。(c)單片機讀取信號。( d) 單片機向 LCD1602寫信號,并延時。(e)判斷是否有數據高于 90 度或低于 20度,如果有 點亮相應的 led ,并啟動 蜂鳴器
3、。2)硬件系統組成a)80C52b)晶振電路c)復位電路d)LED燈電路e) LCD1602(f )溫度檢測 ds18b203. 軟件設計(1)時間的設定:從此采用中斷 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;(2)信號的讀入與寫出: 讀字節程序如下 unsigned char Re
4、adOneChar1()/unsigned char i=0;unsigned char dat1 = 0;for (i=8;i0;i-)DQ1 = 0; / 給脈沖信號 dat1=1;DQ1 = 1; / 給脈沖信號 if(DQ1) dat1|=0x80;tmpDelay(4);return(dat1); 一共讀四個字節,接下來是寫字節程序如下 void WriteOneChar1(unsigned char dat1)/ unsigned char i=0;for (i=8; i0; i-)DQ1 = 0;DQ1 = dat1&0x01;tmpDelay(5);DQ1 = 1; dat1=
5、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(0xBE);a=ReadOneChar1();b=ReadOneChar1(); / t=b;t900)|(t1;x-)for(y=z;y1;y-);/ 寫命令函數void
6、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);lcden=1;delay(5);lcden=0; void init_lcd()/ 初始化函數 lcden=0;/默認開始狀態為關使能端,見時序圖lcdrw=0;/選擇狀態為 寫write_com(0x0f);write_com(0x38);/顯示模式設置,默認為 0x38, 不用變。write_com(0x01);/顯示清屏,將
7、上次的內容清除write_com(0x0c);/顯示功能設置 0x0f 為開顯示,顯示光標,爍; 0x0c 為開顯示,不顯光標,光標不閃write_com(0x06); / 設置光標狀態默認 0x06, 為讀一個字符光標加光標閃1.write_com(0x80); / 設置初始化數據指針for(i=0;i16;i+) / 顯示 The temperaturewrite_date(t0i);delay(0);write_com(0x80+0x40);for(i=0;i16;i+) / 顯示 is C write_date(t1i); delay(0);( 4)程序流程圖如下圖所示:四、調試方法及
8、步驟1. 用軟件調試工具先調試設計好的程序, 項目,設計開發環境,選擇單片機種類,建立方法是打開調試工具后新建.c ,然后加載到環境中,編寫程序,生成 HEX,把他放虛擬單片機中,調試2 出現錯誤,就要修改錯誤,編譯全部通過后再接外圍硬件電路,接 上仿真頭,硬件電路供電后再開啟仿真頭,然后正確設置好仿真器,最 后全速運行,查看硬件電路顯示結果是否與原設計思想一致。3. 顯示結果正確后結束仿真,先停止運行程序,再關掉仿真頭開關, 最后斷電,撬開仿真器。五、結果與討論 .查看結果是否與自己想的一樣,如果不一樣,可以向同學和老師討教,如果 一樣就記錄下。六、實訓心得通過本次試驗學會了如何使用虛擬工具
9、來進行單片機的編輯, 通過寫 c 語言 又溫習了以前的所學,回味看單片機和 c 語言的魅力。通過調試程序鍛煉了個人的耐心恒,恒心,毅力,和理論聯系實際的能力通過學習使得懂得了開發工具的使用, 多了一門吃飯的的本領, 多了一門學 習其他學科的實踐基礎。經過這次實訓課程設計,我學到了很多書本上沒有的,比較實際、實用的東 西,學會了怎樣將理論知識運用到實際設計當中, 對實驗設備和設計軟件的使用 和分析問題解決問題的能力也有了很大的提高。 同時也明白了電路焊接和作品調 試時,需要更多的耐心。通過這次實訓課程設計, 不僅可以在專業上可以學到更 多的知識, 同時也對平時的學習和工作中產生了影響, 那就是認
10、認真真的去完成 每一件事。附錄(程序清單)#include /包含 52 單片機寄存器定義的頭文件/*程序功能: LCD1602 顯示溫度#define uchar unsigned char#define uint unsigned int sbit lcdrs=P26;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=T
11、3: T4:uchar code digital=0123456789; sbit DQ1=P20;/sbit DQ2=P21;/sbit DQ3=P22;/sbit DQ4=P23;/定義溫度 DS18B20接口,詳情見原理圖定義溫度 DS18B20接口,詳情見原理圖定義溫度 DS18B20接口,詳情見原理圖定義溫度 DS18B20接口,詳情見原理圖uchar i;函數功能: DS18B20相關函數 */ void tmpDelay(int num)/ 延時函數 while(num-) ;void Time0(void) interrupt 1 using 0 sound=sound;TH0
12、=(65536-5000)/256; /定時器 T0的高 8 位重新賦初值TL0=(65536-5000)%256; / 定時器 T0的高 8 位重新賦初值 初始化 ds1820void Init_DS18B201()/ 復位稍做延時單片機將 DS拉低精確延時 大于 480usunsigned char x=0; DQ1 = 1; /DS tmpDelay(8); / DQ1 = 0; / tmpDelay(80); /初始化 ds1820復位稍做延時 單片機將 DS拉低精確延時拉高總線大于 480us稍做延時后如果 x=0 則初始化成功初始化ds1820復位稍做延時 單片機將 DS拉低精確延
13、時拉高總線DQ1 = 1; / 拉高總線 tmpDelay(14);x=DQ1; / 稍做延時后 如果 x=0 則初始化成功 tmpDelay(20); void Init_DS18B202()/ unsigned char x=0; DQ2 = 1; /DS tmpDelay(8); / DQ2 = 0; / tmpDelay(80); / DQ2 = 1; / tmpDelay(14); x=DQ2; / tmpDelay(20); void Init_DS18B203()/ unsigned char x=0; DQ3 = 1; /DS tmpDelay(8); / DQ3 = 0; /
14、 tmpDelay(80); / DQ3 = 1; / tmpDelay(14); x=DQ3; / tmpDelay(20); void Init_DS18B204()/x=1則初始化失敗x=1則初始化失敗x=1則初始化失敗x=1則初始化失敗大于 480us稍做延時后如果 x=0 則初始化成功初始化ds1820復位稍做延時單片機將 DS拉低精確延時 大于 480us拉高總線稍做延時后 如果 x=0 則初始化成功 unsigned char x=0; DQ4 = 1; /DS tmpDelay(8); / DQ4 = 0; / tmpDelay(80); / DQ4 = 1; / tmpDel
15、ay(14); x=DQ4; / tmpDelay(20);unsigned char ReadOneChar1()/ 讀一個字節 unsigned char i=0;unsigned char dat1 = 0;for (i=8;i0;i-)DQ1 = 0; / 給脈沖信號 dat1=1;DQ1 = 1; / 給脈沖信號 if(DQ1) dat1|=0x80;tmpDelay(4);return(dat1);unsigned char ReadOneChar2()/ 讀一個字節 unsigned char i=0;unsigned char dat2 = 0;for (i=8;i0;i-)D
16、Q2 = 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;i0;i-)DQ3 = 0; / 給脈沖信號 dat3=1;DQ3 = 1; / 給脈沖信號 if(DQ3) dat3|=0x80;tmpDelay(4);return(dat3); unsigned char ReadOneChar4()/ 讀一個字節 un
17、signed char i=0; unsigned char dat4 = 0;for (i=8;i0;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; i0; i-)DQ1 = 0;DQ1 = dat1&0x01; tmpDelay(5);DQ1 = 1; dat1=1; void WriteOneChar2(unsig
18、ned char dat2)/ 寫一個字節 unsigned char i=0;for (i=8; i0; i-)DQ2 = 0;DQ2 = dat2&0x01; tmpDelay(5);DQ2 = 1; dat2=1; void WriteOneChar3(unsigned char dat3)/ 寫一個字節 unsigned char i=0;for (i=8; i0; i-)DQ3 = 0;DQ3 = dat3&0x01; tmpDelay(5);DQ3 = 1;dat3=1;寫一個字節void WriteOneChar4(unsigned char dat4)/unsigned cha
19、r i=0;for (i=8; i0; 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); / Init_DS18B201();WriteOneChar1(0xCC); /WriteOneChar1(0xBE); / a=Rea
20、dOneChar1(); / b=ReadOneChar1();跳過讀序號列號的操作啟動溫度轉換跳過讀序號列號的操作 讀取溫度寄存器 連續讀兩個字節數據 /讀低 8 位讀高 8 位t=b;t=t|a;tt=t*0.0625;/ 兩字節合成一個整型變量。/ 得到真實十進制溫度值, 因為 DS18B20可以精確到 0.0625 度,t900)|(t200)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;unsign
21、ed int t=0;float tt=0;Init_DS18B202();WriteOneChar2(0xCC); / WriteOneChar2(0x44); / Init_DS18B202();WriteOneChar2(0xCC); / WriteOneChar2(0xBE); / a=ReadOneChar2(); / b=ReadOneChar2(); t=b;t900|t200)LED2=0;EA=1;TR0=1;elseLED2=1;EA=0;TR0=0;return(t); 讀取溫度unsigned int Readtemp3()/ unsigned char a=0; un
22、signed char b=0; unsigned int t=0;float tt=0;Init_DS18B203();WriteOneChar3(0xCC); / WriteOneChar3(0x44); / Init_DS18B203();WriteOneChar3(0xCC); /WriteOneChar3(0xBE); / a=ReadOneChar3(); / b=ReadOneChar3();跳過讀序號列號的操作啟動溫度轉換跳過讀序號列號的操作 讀取溫度寄存器 連續讀兩個字節數據 /讀低 8 位讀高 8 位t900|t200)LED3=0;EA=1;TR0=1;elseLED3=
23、1;EA=0;TR0=0;return(t); unsigned int Readtemp4()/unsigned char a=0; unsigned char b=0; unsigned int t=0;float tt=0; Init_DS18B204();WriteOneChar4(0xCC); /讀取溫度WriteOneChar4(0x44); /跳過讀序號列號的操作啟動溫度轉換Init_DS18B204();WriteOneChar4(0xCC); /跳過讀序號列號的操作WriteOneChar4(0xBE); /讀取溫度寄存器a=ReadOneChar4(); /連續讀兩個字節數
24、據 /讀低 8 位b=ReadOneChar4();/讀高 8 位t=b;t900|t1;x-) for(y=z;y1;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);lcden=1;delay(5);lcden=0; void init_lcd() lcden=0; lcdrw=0;/ 初始化函數/ 默認開始狀態為關使能端,見時序圖/ 選擇狀態為 寫
25、write_com(0x0f); write_com(0x38); write_com(0x01); write_com(0x0c);/ 顯示模式設置,默認為 0x38, 不用變。/ 顯示清屏,將上次的內容清除/ 顯示功能設置 0x0f 為開顯示, 顯示光標, 光標閃爍;write_com(0x06);write_com(0x80);/ 設置光標狀態默認 0x06, 為讀一個字符光標加 1. / 設置初始化數據指針0x0c 為開顯示,不顯光標,光標不閃for(i=0;i16;i+) / 顯示 The temperaturewrite_date(t0i); delay(0); write_com
26、(0x80+0x40); for(i=0;i16;i+) / 顯示 is C write_date(t1i); delay(0);void display1() uint num; / uint shi,ge,xiaoshu; / 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);/ 顯示函數定義的時候用 uchar 宏定義就會出錯 定義的時候用 uchar 宏
27、定義就會出錯/ 顯示溫度十位/ 顯示溫度個位write_com(0x80+5);write_date(0x2e);/ 顯示“ . ”這個符號write_com(0x80+6);write_date(digitalxiaoshu); /顯示溫度小數位/ 顯示函數定義的時候用 uchar 宏定義就會出錯 定義的時候用 uchar 宏定義就會出錯void display2() uint num;/ 顯示溫度十位uint shi,ge,xiaoshu; / 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(digitalxiaoshu); /顯示溫度小數位void display3() uint num; / uint shi,ge,xiaoshu; / num=Readtemp3();
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學前兒童疾病防御教育
- 愛學班班培訓
- 酒店服務培訓
- 精細管理型廠房租賃安全責任書
- 車輛銷售代理傭金結算及售后服務協議
- 智能家居合同財務管理與用戶隱私保護協議
- 電影節場地借用及影視作品推廣合同
- 工程質量教育培訓
- 財務風險控制顧問勞動合同范本及風險評估方法
- 融資型餐廳總經理職務任聘合同書范本
- 2025年江西省中考數學試卷真題(含標準答案)
- 2025年河北省中考麒麟卷生物(三)及答案
- 2025年河北省萬唯中考定心卷地理(二)
- 2025年高考全國二卷英語高考真題含解析
- 2025甘肅省農墾集團有限責任公司招聘生產技術人員145人筆試參考題庫附帶答案詳解
- 2024-2025學年部編版七年級歷史第二學期期末測試卷(含答案)
- 四川省成都市金牛區2023-2024學年七年級下學期期末數學試題
- 吉林省全省市縣鄉鎮衛生院街道社區衛生服務中心基本公共衛生服務醫療機構信息名單目錄995家
- 倔強的小紅軍-精講版課件
- 信息隱藏與數字水印課件(全)全書教學教程完整版電子教案最全幻燈片
- 公開招聘社區居委專職工作人員考試筆試、面試題集及相關知識(11套試題含答案)
評論
0/150
提交評論