單片機課程設計報告基于STC89C52的溫度測控系統(tǒng)設計_第1頁
單片機課程設計報告基于STC89C52的溫度測控系統(tǒng)設計_第2頁
單片機課程設計報告基于STC89C52的溫度測控系統(tǒng)設計_第3頁
單片機課程設計報告基于STC89C52的溫度測控系統(tǒng)設計_第4頁
單片機課程設計報告基于STC89C52的溫度測控系統(tǒng)設計_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、課程設計總結報告課程名稱 單片機應用系統(tǒng)設計 設計題目 基于stc89c52的溫度測控系統(tǒng)設計 專 業(yè) 電子與信息工程 班 級 080823班 姓 名 崔兆坤 學 號 08082337 指導教師 王玉玲 報告成績 信息與工程學院二一一年六月十二日26單片機應用系統(tǒng)設計課程設計任務書一、課題名稱溫度測量與報警系統(tǒng)二、設計任務1、利用四位數(shù)碼管顯示當前溫度;2、通過鍵盤修改報警溫度上限與下限值;3、具有報警功能,報警溫度上限與下限值能修改,利用蜂鳴器實現(xiàn)報警;上限溫度值到達時發(fā)出“嘀-嘀-嘀-嘀”的報警音。三、設計報告撰寫規(guī)范單片微機應用系統(tǒng)設計總結報告正文,主要含以下內容(硬件、軟件各部分內容也

2、可組合起來進行撰寫說明):1、系統(tǒng)總體設計方案(畫出系統(tǒng)原理框圖、方案的論證與比較等內容);2、硬件系統(tǒng)分析與設計(各模塊或單元電路的設計、工作原理闡述、參數(shù)計算、元器件選擇、完整的系統(tǒng)電路圖、系統(tǒng)所需的元器件清單。等內容);3、軟件系統(tǒng)分析與設計(各功能模塊的程序設計流程圖與說明、軟件系統(tǒng)設計、軟件抗干擾措施、完整的程序等內容);4、系統(tǒng)仿真調試與參數(shù)測量(使用儀器儀表、故障排除、電路硬件和軟件調試的方法和技巧、指標測試的參數(shù)和波形、測量誤差分析);5、總結(本課題核心內容及使用價值、電路設計、軟件設計的特點和選擇方案的優(yōu)缺點、改進方向和意見等);6、按統(tǒng)一格式列出主要參考文獻。溫度測量與報

3、警系統(tǒng)一、系統(tǒng)總體設計方案1.1 方案一由于本設計是測溫電路,可以使用熱敏電阻之類的器件利用其感溫效應,在將隨被測溫度變化的電壓或電流采集過來,進行a/d 轉換后,就可以用單片機進行數(shù)據(jù)的處理,在顯示電路上,就可以將被測溫度顯示出來,這種設計需要用到a/d 轉換電路,其中還涉及到電阻與溫度的對應值的計算,感溫電路比較麻煩。而且在對采集的信號進行放大時容易受溫度的影響出現(xiàn)較大的偏差。1.2 方案二進而考慮到用溫度傳感器,在單片機電路設計中,大多都是使用傳感器,所以這是非常容易想到的,所以可以采用一只溫度傳感器ds18b20,此傳感器,可以很容易直接讀取被測溫度值,進行轉換,電路簡單,精度高,軟硬

4、件都以實現(xiàn),而且使用單片機的接口便于系統(tǒng)的再擴展,滿足設計要求。從以上兩種方案,很容易看出,采用方案二,電路比較簡單,費用較低,可靠性高,軟件設計也比較簡單,故采用了方案二。方案二系統(tǒng)主要包括單片機模塊、溫度采集模塊、溫度顯示模塊,溫度上下限調整模塊等四部分。系統(tǒng)總體框架如圖1所示。單片機處理模塊18b20溫度采集模塊溫度顯示模塊溫度上下限調整模塊圖1 系統(tǒng)總體框架報警模塊二、電路設計2.1 單片機處理模塊處理模塊是整個設計方案的核心,它控制了溫度的采集、處理與顯示、溫度上下限值的設定。本文采用stc89c52rc作為處理模塊。這是stc公司推出的8051系列微處理器。它的特點是價格低、功耗低

5、、高可靠、無法解密,內部flash擦寫次數(shù)為100,000次以上。圖2是該芯片的引腳圖。圖2 stc89c52引腳圖 圖3是stc89c52的最小系統(tǒng)。圖3是stc89c52的最小系統(tǒng)圖32.2 溫度采集模塊溫度由dallas 半導體公司的一線數(shù)字化溫度傳感器ds18b20采集。ds18b20測溫范圍為-55+125,測溫分辨率可達0.0625,被測溫度用16位二進制形式串行輸出。用戶設定的上下限溫度儲存在eeprom中,掉電后依然保存。cpu只需一根端口線就能與諸多ds18b20通信。占用微處理器的端口少,可節(jié)省大量的引線和邏輯電路。圖4為ds18b20的引腳圖。圖4 ds18b20圖ds1

6、8b20是通過一種片上溫度測量技術來測量溫度的。圖5示出了溫度測量電路的方框圖。 圖4 ds18b20溫度測量電路的方框圖由圖5可知ds18b20用一個高溫度系數(shù)的振蕩器確立一個門周期,內部計數(shù)器在這個門周期內對一個低溫度系數(shù)的振蕩器的脈沖進行計數(shù)來得到溫度值。計數(shù)器被預置到對應與-55的一個值。如果計數(shù)器在門周期結束前到達0,則溫度寄存器(同樣被預置到-55)的值增加,表明所測的溫度大于-55。同時計數(shù)器被復位到一個值,這個值由斜坡式累加器電路確定,斜坡式累加器電路用來補償感溫振蕩器的拋物線特性。然后計數(shù)器又開始計數(shù)直到0,如果門周期仍未結束,將重復這一過程。斜坡式累加器用來補償感溫振蕩器的

7、非線性,以及在測溫時獲得比較高的分辨力。這是通過改變計數(shù)器對溫度每增加一度所需計數(shù)的值來實現(xiàn)的。因此,要想獲得所需的分辨力,必須同時知道給定溫度下計數(shù)器的值和每一度的計數(shù)值。ds18b20內部對此計算的結果可提供0.0625的分辨力。溫度以16bit帶符號位擴展的二進制補碼形式讀出。表1給出了溫度值和輸出數(shù)據(jù)的關系。表1:溫度值和輸出數(shù)據(jù)的關系溫度數(shù)據(jù)輸出(二進制)數(shù)據(jù)輸出(十六進制)+1250000 0111 1101 000007d0+25.06250000 0001 1001 00010191+0.50000 0000 0000 1000000800000 0000 0000 00000

8、000-0.51111 1111 1111 1000fff8-25.06251111 1110 0110 1111ffce-551111 1100 1001 0000fc90二進制的低四位是小數(shù)數(shù)據(jù),高五位是符號位。正溫度時,讀到的16位數(shù)據(jù)乘以0.0625就可以得到實際溫度。若是負溫度則要把讀到的數(shù)據(jù)按位取反再加1,之后按正溫度轉換,前面加符號就行了。另一種轉換方法就是分離出低四位,中間七位和高五位。低四位乘以0.0625就可以得到小數(shù)部分的值,中間八位直接就是整數(shù)部分的值。高四位就是判斷符號的。ds18b20內部有一個9字節(jié)的高速存儲器用于存儲溫度值。其中前兩個字節(jié)是測得的溫度數(shù)據(jù),第一個

9、字節(jié)的內容是溫度的低八位,第二個字節(jié)是溫度的高八位,第三和第四字節(jié)是溫度上限th與溫度下限tl的易失性拷貝,第五字節(jié)是結構寄存器的易失性拷貝,第6,7,8這三個字節(jié)用于內部計算,第九個字節(jié)是冗余檢驗字節(jié)crc,可用來保證通信的正取性。當溫度轉換命令發(fā)出后,經(jīng)轉換所得的溫度值以二字節(jié)補碼形式存放在此存儲器的第1和第2個字節(jié)。單片機可通過單線接口讀到該數(shù)據(jù),讀取時低位在前,高位在后。通過單線總線端口訪問ds18b20的協(xié)議如下:初始化、rom操作命令、存儲器操作命令、執(zhí)行/數(shù)據(jù)。rom操作命令:read rom 33h 這個命令允許總線控制器讀到ds18b20的8位系列編碼、唯一的序列號和8位cr

10、c碼。只有在總線上存在單只ds18b20的時候才能使用這個命令。如果總線上不止一個從機時,當所有從機試圖同時傳送信號時就會發(fā)生數(shù)據(jù)沖突。match rom 55h 匹配rom命令,后跟64位rom序列,讓總線控制器在多點總線上定位一只特定的ds18b20。只有和64為rom序列完全匹配的ds18b20才能響應隨后的儲存操作命令。skip rom cch 這條命令允許總線控制器不用提供64位rom編碼就使用儲存器操作命令,在單點總線情況下用以節(jié)省時間。如果總線上不止一個從機,在skip rom命令之后跟著發(fā)一條讀命令,由于多個從機同時傳送信號,總線上就會發(fā)生數(shù)據(jù)沖突。search rom f0h

11、 當一個系統(tǒng)初次啟動時,總線控制器可能不知道單線總線上有多少器件或它們的64位rom編碼。搜索rom命令允許總線控制器用排除法識別總線上的所有從機的64位編碼。alarm search ech 這條命令的流程圖和search rom相同。然而,只有在最近一次測溫后遇到符合報警條件的情況,ds18b20才會響應這條命令。表2:ds18b20的命令和時序圖命 令說 明協(xié) 議單線總線發(fā)出協(xié)議后溫度轉換命令convert t開始溫度轉換44h存儲器命令read scratchpad讀取暫存器和crc字節(jié)behwriteschratchpad把字節(jié)寫入暫存器的地址2和3(th和tl溫度報警促發(fā))4ehc

12、opy scratchpad把暫存器內容拷貝到非易失性存儲器中(僅指地址2和3)48hrecall e2把非易失性存儲器中的值召回暫存器(溫度報警觸發(fā))b8hread power supply標識ds18b20的供電模式b4h圖6為ds18b20的電路連接圖。圖6 18b20電路圖ds18b20有兩種供電接法,圖6采用的是接入外部電源。這樣做的好處是i/o線上不需要加強上拉,而且總線控制器用在溫度轉換期間總保持高電平。這樣在轉換期間可以允許在單線總線上進行其他數(shù)據(jù)的往來。另外,在單總線上可以掛任意多片ds18b20,而且如果它們都使用外部電源的話,就可以先發(fā)一個skip rom命令,再接一個c

13、onvert t命令,讓它們同時進行溫度轉換。注意當加上外部電源時,gnd引腳不能懸空。2.3 溫度顯示模塊由于此文重在說明ds18b20的功能及使用,所以顯示部分就采用簡單的數(shù)碼管顯示。只顯示兩位整數(shù)和一位小數(shù),負溫度就不顯示了。圖7為數(shù)碼管的連接圖。圖7 數(shù)碼管顯示電路2.4 溫度上下限調整模塊圖8為溫度上下限調整模塊。圖8 按鍵電路圖所選按鍵是輕觸開關。按一次k1后,會在數(shù)碼管顯示ds18b20內儲存的溫度上限。按第k2次后就能調節(jié)溫度的上限,通過k3和k4來調節(jié)。按下第3次后恢復到溫度的顯示。k2是調節(jié)溫度下限的。操作方法和k1一樣。2.5 報警電路該模塊只是用蜂鳴器表示。蜂鳴器響就報

14、警。如圖9圖9 圖9 報警電路圖總體原理圖圖10為電路的總體原理圖。圖10 系統(tǒng)總體原理圖圖10三、系統(tǒng)算法與程序流程圖系統(tǒng)程序主要包括主程序,讀出溫度子程序,溫度轉換命令子程序,計算溫度子程序,顯示數(shù)據(jù)刷新子程序,按鍵掃描處理子程序等。3.1 主程序流程圖主程序的主要功能是負責溫度的實時顯示、讀出并處理ds18b20 的測量的當前溫度值,溫度測量每1s 進行一次。這樣可以在一秒之內測量一次被測溫度,其程序流程如下:圖11主程序流程圖3.2 讀出溫度子程序讀出溫度子程序的主要功能是讀出ram 中的9 字節(jié),在讀出時需進行crc 校驗,校驗有錯時不進行溫度數(shù)據(jù)的改寫。其程序流程圖如下:圖12 讀

15、出溫度子程序3.3 溫度轉換命令子程序溫度轉換命令子程序主要是發(fā)溫度轉換開始命令,當采用12 位分辨率時轉換時間約為750ms,在本程序設計中采用1s 顯示程序延時法等待轉換的完成。溫度轉換命令子程序流程如:圖13溫度轉換命令子程序3.4 計算溫度子程序計算溫度子程序將ram 中讀取值進行bcd 碼的轉換運算,并進行溫度值正負的判定,其程序流程圖。圖14計算溫度子程序3.5 顯示數(shù)據(jù)刷新子程序顯示數(shù)據(jù)刷新子程序主要是對分離后的溫度顯示數(shù)據(jù)進行刷新操作,當標志位位為1時將符號顯示位移入第一位。程序流程圖如下:圖15顯示數(shù)據(jù)刷新子程序3.6 按鍵掃描處理子程序按鍵采用掃描查詢方式,設置標志位,當標

16、志位為1 時,顯示設置溫度,否則顯示當前溫度。如下:圖16按鍵掃描處理子程序四、程序/*功能說明按k1設定溫度上限,然后按k2調整小數(shù)位增加,按k4小數(shù)位減小按rd1確認,按rd復位按rd1設定溫度下限,然后按k2調整整數(shù)位增加,按k4整數(shù)位減小按k1確認,按rd復位如果實際溫度超過上下限,則報警*/#include #include #define uchar unsigned char#define uint unsigned int sbit k1=p20; sbit k2=p21; sbit k3=p34;sbit k4=p23; sbit dq=p22; sbit rd=p24; s

17、bit rd1=p25; sbit beep=p32;uchar buffer0,buffer1,zhi,zhi1; uchar table=0x7f,0xbf,0xdf,0xef,0xff; /設置位選uchar table1=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f; /前兩位數(shù)碼管碼表uchar table2=0xc0,0xcf,0xa4,0x86,0x8b,0x92,0x90,0xc7,0x80,0x82,0x7f,0xf0; /后兩位數(shù)碼管碼表uchar code table32=00; uchar value,nu

18、m,num1,num2;uchar temp,temp3,temp1,temph,templ,temp5,flag,flag1;uchar temp55,temp33,tempxiaoh,tempxiaol;uint qq;void delay(uint z) /延時子程序uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void delay_18b20(unsigned int i) /ds18b20延時子程序,延時1uswhile(i-);void init_ds18b20(void) /ds18b20初始化函數(shù)u uchar x=0; dq = 1; /dq

19、復位 delay_18b20(8); /稍做延時 ,穩(wěn)定數(shù)據(jù) dq = 0; /單片機將dq拉低 delay_18b20(100); /精確延時 大于 480us dq = 1; /拉高總線 delay_18b20(14); /(15-60)us x=dq; /稍做延時后 如果x=0則初始化成功 x=1則初始化失敗,采樣 delay_18b20(20);void write_18b20byte(uchar dat)/向18b20寫一個節(jié),dat為入口函數(shù) uchar i; for (i=8; i0; i-)/一字節(jié)8位 dq = 0; dq = dat&0x01; delay_18b20(5)

20、;/18b20采樣 dq = 1;/拉高dq dat=1;/出口函數(shù),dat為入口函數(shù) uchar read_18b20byte(void)uchar i;uchar dat;for (i=8;i0;i-)/判斷8次移位7次 dq = 0; / 給脈沖信號,拉低總線 dat=1;/可以起延時作用 dq = 1; / 給脈沖信號,釋放總線后才可以采樣 if(dq) dat|=0x80; delay_18b20(4); return(dat);void readtemp(void) /讀取ds18b20當前溫度uchar a,b;init_ds18b20();/18b20初始化write_18b2

21、0byte(0xcc); / 跳過讀序號列號的操作write_18b20byte(0x44); / 啟動溫度轉換delay_18b20(100); / 轉換需要時間,延時init_ds18b20();write_18b20byte(0xcc); /跳過讀序號列號的操作write_18b20byte(0xbe); /讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度delay_18b20(100);a=read_18b20byte(); /讀取溫度值低位b=read_18b20byte(); /讀取溫度值高位 temp=b*16+a/16;temp1=(a%16)*10/16;void bee

22、pon(void)beep=0;void beepoff(void)beep=1;void display(uchar one,uchar two,uchar three) p1=table0;/選中第一個數(shù)碼管p0=table1one;/顯示10位delay(3);p1=table1;/選中第二個數(shù)碼管p0=table1two&0x7f;delay(3);p1=table2;p0=table2three;delay(3);p1=table3;p0=table211&0x7f;delay(3);void keywendu()uchar temp2,temp22;temp2=temp;/整數(shù)位t

23、emp22=temp1;/小數(shù)位rd=0;if(k1=0) /功能鍵delay(20);if(k1=0) while(!k1);/按鍵消抖程序 flag=1;p1=table1;p0=0xff;delay(10);/個位不顯示p1=table2;p0=0xff;delay(10);/小數(shù)位不顯示while(1)display(temp2/10,temp2%10,temp22);if(k1=0) /k1功能鍵delay(20);if(k1=0) while(!k1);num1+;if(num1=2)num1=0;/num1=0修改小數(shù)位/num1=1修改個位switch(num1)case 0:

24、/小數(shù)位if(k2=0) /case0,k2功能鍵delay(20);if(k2=0) while(!k2);temp22+;if(temp22=10)temp22=0;delay(20); p1=table2;p0=table2temp22;delay(50);/顯示小數(shù)位if(k4=0) /case0 k4 鍵delay(20);if(k4=0) while(!k4);temp22-;if(temp22=-1)temp22=9;delay(20);p1=table2;p0=table2temp22;delay(50);break;case 1:if(k2=0) /case1 k2鍵dela

25、y(20);if(k2=0) while(!k2);temp2+;delay(20);p1=table0;p0=table1temp2/10;delay(5);p1=table1;p0=table1temp2%10&0x7f;delay(5);if(k4=0) /case1 k4鍵delay(20);if(k4=0) while(!k4);temp2-;delay(20);p1=table0;p0=table1temp2/10;delay(5);p1=table1;p0=table1temp2%10&0x7f;delay(5);break;if(k3=0) delay(20);if(k3=0)

26、 while(!k3);temph=temp2;tempxiaoh=temp22;break;void keywendu_l()uchar temp2,temp22;temp2=temp;/調節(jié)整數(shù)位temp22=temp1;/調節(jié)小數(shù)位rd=0;if(k3=0) /k3鍵delay(20);if(k3=0) while(!k3);/消抖電路 flag1=1;p1=table1;p0=0xff;delay(10);p1=table2;p0=0xff;delay(10);while(1)display(temp2/10,temp2%10,temp22);if(k3=0) /功能鍵delay(20

27、);if(k3=0) while(!k3);num1+;if(num1=2)num1=0;switch(num1)case 0:/case0時選擇小數(shù)位if(k2=0) delay(20);if(k2=0) while(!k2);temp22+;if(temp22=10)temp22=0;delay(20);p1=table2;p0=table2temp22;delay(50);if(k4=0) delay(20);if(k4=0) while(!k4);temp22-;if(temp22=-1)temp22=9;delay(20);p1=table2;p0=table2temp22;dela

28、y(50);break;case 1:if(k2=0) /case1 調節(jié)k2鍵delay(20);if(k2=0) while(!k2);temp2+;delay(20);p1=table0;p0=table1temp2/10;delay(5);p1=table1;p0=table1temp2%10&0x7f;delay(5);if(k4=0) /case1調節(jié)k4鍵delay(20);if(k4=0) while(!k4);temp2-;delay(20);p1=table0;p0=table1temp2/10;delay(5);p1=table1;p0=table1temp2%10&0x

29、7f;delay(5);break;if(k1=0) delay(20);if(k1=0) while(!k1);templ=temp2;tempxiaol=temp22;break;void main() uchar shi,ge; /十位和個位定義字符格式 init_ds18b20();/初始化18b20溫度傳感器while(1)readtemp();/讀取18b20傳感器溫度值shi=temp/10;ge=temp%10;delay(5); display(shi,ge,temp1);/顯示溫度值 keywendu();/修改溫度上限keywendu_l();/修改溫度下限if(flag

30、=1&temptemph)/大于最高設定溫度報警beepon();delay(500);delay(500);beepoff();if(flag=1&temp=temph&tempxiaohtemp1)/蜂鳴器報警beepon();delay(500);delay(500);beepoff();if(flag1=1&temptemp1)/蜂鳴器報警beepon();delay(500);delay(500);beepoff();五、心得體會作為一名電子信息工程專業(yè)的大三學生,我覺得做單片機課程設計是十分有意義的,而且是十分必要的。在已度過的大學時間里,我們大多數(shù)接觸的是專業(yè)課。我們在課堂上掌握

31、的僅僅是專業(yè)課的理論知識,如何去鍛煉我們的實踐能力?如何把我們所學的專業(yè)基礎課理論知識運用到實踐中去呢?我想做類似的課程設計就為我們提供了良好的實踐平臺。課程設計是培養(yǎng)學生綜合運用所學知識,發(fā)現(xiàn),提出,分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學生實際工作能力的具體訓練和考察過程.隨著科學技術發(fā)展的日新日異,單片機已經(jīng)成為當今計算機應用中空前活躍的領域,在生活中可以說得是無處不在。因此作為二十一世紀的大學來說掌握單片機的開發(fā)技術是十分重要的。這次單片機課程設計我們歷時兩個星期,從理論到實踐,學到了很多的東西。同時不僅鞏固了以前所學過的知識,而且還學到了很多在書本上所沒有學到過的知識。通過這次課程設計使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力。在這次課程設計后我發(fā)現(xiàn)自己在一點一滴的努力中對單片機的興趣也在逐漸增加。這次的課程設計還讓我學會了

溫馨提示

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

評論

0/150

提交評論