單片機大作業(yè)_第1頁
單片機大作業(yè)_第2頁
單片機大作業(yè)_第3頁
單片機大作業(yè)_第4頁
單片機大作業(yè)_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、西安電子科技大學單片機大作業(yè)學 院:電子工程學院班 級: 02121X 班姓 名: XXX學 號: 0212XXX指導老師: XXX溫度控制系統(tǒng)設計一、溫度控制系統(tǒng)設計發(fā)展歷史及意義在工業(yè)企業(yè)中 , 如何提高溫度控制對象的運行性能一直以來都是控制人員和現(xiàn)場技術 人員努力解決的問題。 這類控制對象慣性大 ,滯后現(xiàn)象嚴重 ,存在很多不確定的因素 , 難以建 立精確的數(shù)學模型 ,從而導致控制系統(tǒng)性能不佳 , 甚至出現(xiàn)控制不穩(wěn)定、失控現(xiàn)象。傳統(tǒng)的 繼電器調(diào)溫電路簡單實用 , 但由于繼電器動作頻繁 , 可能會因觸點不良而影響正常工作。 控制領域還大量采用傳統(tǒng)的 PID控制方式,但PID控制對象的模型難以

2、建立,并且當擾動因 素不明確時,參數(shù)調(diào)整不便仍是普遍存在的問題。而采用數(shù)字溫度傳感器DS18B20因其內(nèi)部集成了 A/D轉換器,使得電路結構更加簡單,而且減少了溫度測量轉換時的精度損失, 使得測量溫度更加精確。數(shù)字溫度傳感器DS18B2C只用一個引腳即可與單片機進行通信,大大減少了接線的麻煩,使得單片機更加具有擴展性。由于DS18B2C芯片的小型化,更加可以通過單跳數(shù)據(jù)線就可以和主電路連接,故可以把數(shù)字溫度傳感器DS18B20故成探頭,探入到狹小的地方,增加了實用性。更能串接多個數(shù)字溫度傳感器DS18B2C進行范圍的溫度檢測。二、DS18B20工作原理DS18B20勺讀寫時序和測溫原理與DS1

3、820相同,只是得到的溫度值的位數(shù)因分辨率不 同而不同,且溫度轉換時的延時時間由 2s減為750ms DS18B20測溫原理如圖3所示。圖 中低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號送給計數(shù)器1。高溫度系數(shù)晶振隨溫度變化其振蕩率明顯改變, 所產(chǎn)生的信號作為計數(shù)器 2的脈沖輸入。 計數(shù)器1和溫度寄存器被預置在-55 C所對應的一個基數(shù)值。計數(shù)器1對低溫度系數(shù)晶振產(chǎn) 生的脈沖信號進行減法計數(shù),當計數(shù)器 1 的預置值減到 0時,溫度寄存器的值將加 1,計 數(shù)器 1 的預置將重新被裝入,計數(shù)器 1 重新開始對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進行計 數(shù),如此循環(huán)直到計數(shù)器 2計數(shù)到

4、 0時,停止溫度寄存器值的累加,此時溫度寄存器中的 數(shù)值即為所測溫度。斜率累加器用于補償和修正測溫過程中的非線性,其輸出用于修正計 數(shù)器 1 的預置值。三、系統(tǒng)軟件流程圖四、電路原理圖1.DS18B20溫度傳感器檢測電路溫度采集通過數(shù)字化的溫度傳感器 DS18B20通過QD接向單片機的P3.0 口。DS18B20溫度傳感器電路如圖5.3所示2. 二極管顯示報警電路二極管顯示報警電路如下圖所示。通過單片機的 P3.4 和 P3.5 兩個端口送出,采用的是 高電平驅動,使其發(fā)光發(fā)出警告。二極管顯示電路3. 整體原理圖五、程序設計1)讀出溫度子程序讀出溫度子程序的主要功能是讀出 RAM中的9字節(jié),在

5、讀出時需進行CRC校驗,校驗有錯 時不進行溫度數(shù)據(jù)的改寫,程序流程圖如圖 5.10 所示。DS18B20 的各個命令對時序的要求特別嚴格,所以必須按照所要求的時序才能達到預期 的目的,同時,要注意讀進來的是高位在后低位在前, 共有12位數(shù),小數(shù)4位,整數(shù) 7位, 還有一位符號位。讀出溫度子程序的主要功能是讀出 RAM中的9字節(jié),在讀出時需進行CRC校驗,校驗有 錯時不進行溫度數(shù)據(jù)的改寫,程序流程圖如圖 5.10 所示。DS18B20 的各個命令對時序的要求特別嚴格,所以必須按照所要求的時序才能達到預期 的目的,同時,要注意讀進來的是高位在后低位在前, 共有12位數(shù),小數(shù)4位,整數(shù) 7位, 還有

6、一位符號位。2)寫入子程序寫入子程序的流程圖如 5.11 所示 六、主要程序#include#include#define uchar unsigned char#define uint unsigned int#define duan P0#define wei P1sbit DSP0RT=P3qvoid Delay1ms(uint y);void Delay5ms();uchar Ds18b20Init();void Ds18b20WriteByte(uchar dat);uchar Ds18b20ReadByte();void Ds18b20ChangTemp();void Ds18b2

7、0ReadTempCom();int Ds18b20ReadTemp();void DigDisplay();void LcdDisplay(int temp);uchar code segta10=0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;unsigned char DisplayData8;void main()while(1)LcdDisplay(Ds18b20ReadTemp();void Delay1ms(uint y)uint x;for( ; y0; y-)for(x=110; x0; x-);/* 函 數(shù) 名 : Ds1

8、8b20Init* 函數(shù)功能 : 初始化* 輸入:無* 輸出:初始化成功返回 1 ,失敗返回 0*/uchar Ds18b20Init()uchar i;DSPORT = 0;/ 將總線拉低 480us960usi = 70;while(i-);/延時 642usDSPORT = 1;/然后拉高總線,如果DS18B2做出反應會將在15us60us后總線拉低i = 0;while(DSPORT)/ 等待 DS18B2拉低總線Delay1ms(1);i+;if(i5)等待 5MSreturn 0;/ 初始化失敗return 1;/ 初始化成功* 函 數(shù) 名 : Ds18b20WriteByte*函

9、數(shù)功能 :向18B2C寫入一個字節(jié)* 輸入: com* 輸出:無*/void Ds18b20WriteByte(uchar dat)uint i, j;for(j=0; j= 1;* 函數(shù)名: Ds18b20ReadByte* 函數(shù)功能:讀取一個字節(jié)* 輸入: com* 輸出: 無*/ uchar Ds18b20ReadByte()uchar byte, bi;uint i, j;for(j=8; j0; j-)DSPORT = 0;/ 先將總線拉低 1usi+;DSPORT = 1;/ 然后釋放總線i+;i+;延時6us等待數(shù)據(jù)穩(wěn)定bi = DSPORT; /讀取數(shù)據(jù),從最低位開始讀取/*將

10、byte左移一位,然后與上右移7位后的bi,注意移動之后移掉那位補0。*/byte = (byte 1) | (bi 7);i = 4;/讀取完之后等待48us再接著讀取下一個數(shù)while(i-);return byte;函 數(shù) 名: Ds18b20ChangTemp函數(shù)功能 :讓18b20開始轉換溫度輸入: com輸出*/ void Ds18b20ChangTemp()Ds18b20Init();Delay1ms(1);Ds18b20WriteByte(0xcc);/ 跳過 RO操作命令Ds18b20WriteByte(0x44); / 溫度轉換命令/ Delay1ms(100); / 等待

11、轉換成功,而如果你是一直刷著的話,就不用這個延時了* 函數(shù)名: Ds18b20ReadTempCom* 函數(shù)功能: 發(fā)送讀取溫度命令* 輸 入: com* 輸 出: 無*/ void Ds18b20ReadTempCom()Ds18b20Init();Delay1ms(1);Ds18b20WriteByte(0xcc);/ 跳過 RO操作命令Ds18b20WriteByte(0xbe);/ 發(fā)送讀取溫度命令* 函 數(shù) 名 : Ds18b20ReadTemp* 函數(shù)功能 : 讀取溫度* 輸入: com* 輸出:無*/ int Ds18b20ReadTemp()int temp = 0;uchar

12、 tmh, tml;/ 先寫入轉換命令/ 然后等待轉換完后發(fā)送讀取溫度命令/ 讀取溫度值共 16位,先讀低字節(jié)Ds18b20ChangTemp();Ds18b20ReadTempCom();tml = Ds18b20ReadByte();temp = tmh;temp = 8;temp |= tml;return temp;/* 函 數(shù) 名: LcdDisplay()* 函數(shù)功能 : LCD 顯示讀取到的溫度* 輸入: v* 輸出:無*/void LcdDisplay(int temp)/lcd 顯示float tp;DisplayData0 = 0x40;/ 因為讀取的溫度是實際溫度的補碼,

13、所以減 1,再取反求出原碼temp=temp-1;temp=temp;tp=temp;temp=tp*0.0625*100+0.5;/留兩個小數(shù)點就*100 , +0.5是四舍五入,因為C語言浮點數(shù)轉換為整型的時候把 小數(shù)點/ 后面的數(shù)自動去掉,不管是否大于 0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就/ 算由 ?.5 ,還是在小數(shù)點后面。elseDisplayData0 = 0x00;tp=temp;/ 因為數(shù)據(jù)處理有小數(shù)點所以將溫度賦給一個浮點型變量/ 如果溫度是正的那么,那么正數(shù)的原碼就是補碼它本身temp=tp*0.0625*100+0.5;/留兩個小數(shù)點就*100 , +0.5是四舍五入,因為C語言浮點數(shù)轉換為整型的時候把 小數(shù)點/ 后面的數(shù)自動去掉,不管是否大于 0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就/ 算加上 0.5 ,還是在小數(shù)點后面。DisplayData1= segtatemp / 10000;D

溫馨提示

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

評論

0/150

提交評論