版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 信息工程學院</b></p><p> 課程設計說明書(論文)</p><p> 題 目: 溫度測量 </p><p> 課 程 名 稱: 單片機原理及應用課程設計 </p><p> 專 業(yè): 電子信息工程 <
2、/p><p> 班 級: 電信 0902 </p><p> 設計起止時間: 年 月 日至 年 月 日</p><p><b> 目 錄</b></p><p> 一、設計功能要求3</p><p> 二、系統(tǒng)總體設計方案3</
3、p><p> 三、系統(tǒng)分析與設計3</p><p><b> 四、源碼清單3</b></p><p> 五、改進意見與收獲體會3</p><p> 六、主要參考資料4</p><p><b> 一、設計功能要求</b></p><p>
4、 采用數(shù)字式溫度傳感器為檢測器件,進行單點溫度檢測。用數(shù)碼管直接顯示溫度值,微機系統(tǒng)作為數(shù)字溫度計的控制系統(tǒng)。</p><p><b> ?。保疽螅?lt;/b></p><p> (1)檢測的溫度范圍:-20℃~70℃,檢測分辨率0.5℃。</p><p> (2)用1602液晶屏來顯示溫度值。</p><p>
5、 (3)超過警戒值(自己定義)要報警提示。</p><p> 二、系統(tǒng)總體設計方案</p><p> 本系統(tǒng)是一個基于單片機AT89S51的數(shù)字溫度計的設計,用來測量環(huán)境溫度,測量范圍為-20℃—70℃度。整個設計系統(tǒng)分為4部分:單片機控制、溫度傳感器、數(shù)碼顯示以及鍵盤控制電路。整個設計是以AT89S52為核心,通過數(shù)字溫度傳感器DS18B20來實現(xiàn)環(huán)境溫度的采集和A/D轉(zhuǎn)換,同時因其
6、輸出為數(shù)字形式,且為串行輸出,這就方便了單片機進行數(shù)據(jù)處理,但同時也對編程提出了更高的要求。單片機把采集到的溫度進行相應的轉(zhuǎn)換后,使之能夠方便地在數(shù)碼管上輸出。采用1602液晶屏顯示溫度。</p><p><b> 三、系統(tǒng)分析與設計</b></p><p><b> 1.基本工作原理</b></p><p> 以A
7、T89C51作為核心控制溫度傳感器DS18B20進行實時溫度檢測并顯示,其能夠測量環(huán)境溫度,根據(jù)此溫度設定上下限報警溫度。所以,我們在電路設置了三個按鈕,其中兩個按鈕作于調(diào)控溫度的值的大小,剩下的一個是設置按鈕,利用它來切換到調(diào)控溫度最高值與最低值的界面。當溫度值達到上限或下限值甚至超多它,馬上觸發(fā)報警系統(tǒng),二極管會閃爍,發(fā)聲器發(fā)聲。</p><p><b> 溫度計工作原理圖</b>&l
8、t;/p><p> 2.基本框圖及各個部分的組成</p><p> 本電路的小系統(tǒng)主要由四部分組成,復位電路、脈沖電路、檢溫電路、顯示電路。</p><p> 2.1復位電路:計算機在啟動運行的時候都需要復位,使中央處理器CPU和系統(tǒng)中的其他部件都處于一個確定的初始狀態(tài),并且從這個初始狀態(tài)開始工作。單片機的復位是靠外部電路實現(xiàn)的,51單片機有一個復位引腳RST,高
9、電平有效。</p><p> 最常用的復位電路 有兩種 一種是有極性電容和一個電阻串聯(lián),電容接電源端,電阻的一端接地,電容和電阻的公共端接復位端口;另外一種方法是一個按鈕和極性電容并聯(lián),電容正極與按鈕的公共端接復位電路,另外一個公共端接地。在焊接硬件的時候我們是采用了第一種方法接復位電路的。</p><p> 2.2脈沖電路:計算機的正常運行是需要脈沖才能正常工作,一個12MHZ的晶振
10、和兩個電容并接一起接到單片機XTAL1和XTAL2的端口,根據(jù)自己程序的需要我們可以選擇產(chǎn)生脈沖的大小,產(chǎn)生脈沖的大小與晶振和電容有關。我們選擇的是一個12MHZ的晶振和22pf的電容。</p><p> 2.3檢溫電路:DS18B20數(shù)字溫度傳感器</p><p> DS18B20內(nèi)部結構主要由四部分組成:64位光刻ROM 、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器。
11、DS18B20的外形及管腳排列如下圖1: </p><p> DS18B20引腳定義: (1)DQ為數(shù)字信號輸入/輸出端; </p><p> (2)GND為電源地; </p><p> (3)VDD為外接供電電源輸入端(在寄生電源接線方式時接地)。</p><p> DS18B20的管腳圖</p><p>
12、 2.4測溫工作:溫度傳感器DS18B20連接時I/O口上要接一個上拉5K左右的電阻,這樣可以保證溫傳感器工作時候的精度,還有抗干擾的作用。</p><p> 溫度傳感器檢測外界的溫度,得到的數(shù)據(jù),將進行數(shù)據(jù)的轉(zhuǎn)換,轉(zhuǎn)換完成的溫度數(shù)字將會保留,然后在液晶上顯示,同時也會與程序設計的溫度的上限和下限進行比較,若超出設定的上限和下限的溫度值,就報警。</p><p><b> 顯
13、示電路:</b></p><p><b> 第1腳:VSS接地</b></p><p> 第2腳:VDD接5V正電源。</p><p> 第3腳:為液晶顯示器對比度調(diào)整端,接電源時對比度最弱,接地時對比度最高,對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10K歐姆的電位器來調(diào)整對比度。</p><p>
14、; 第4腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。</p><p> 第5腳:RW為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和RW共同為低電平時,可以寫入指令或者顯示地址,當RS為低電平RW為高電平時,可以讀忙信號,當RS為高電平RW為低電平時可以寫入數(shù)據(jù)。</p><p> 第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)
15、行命令。</p><p> 第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。</p><p> 第15~16腳:屏幕背光引腳</p><p> 1602與單片機的I/O口電路連接如圖5-5所示:</p><p> 3.完整溫度測量設計圖:</p><p><b> 4.程序流程圖:</b>&l
16、t;/p><p><b> 四、源碼清單</b></p><p> #include "reg52.h"</p><p> #include "absacc.h"</p><p> unsigned char code tab[]={0X3F,0X06,0X5B,0X4F,0X
17、66,0X6D,0X7D,0X07,0X7F,0X6F,0X40};</p><p> sbit DQ=0xb7; </p><p> sbit P07=0x87; </p><p> sbit RED=0x97; </p><p> sbit GREEN=0x96; </p><p> sbit SET=
18、0x90; </p><p> sbit NEXT=0x91;</p><p> sbit REDUCE=0x92;</p><p> sbit ADD=0x93;</p><p> unsigned char tempL=0;</p><p> unsigned char tempH=0; </p&
19、gt;<p> float temperature;</p><p> float temperatureH=35,temperatureL=0; </p><p> int tH=1,tL=1;//報警狀態(tài),1為關閉</p><p> int m,k=1,l,keyon,keytype,out=0;</p><p>
20、 void delay(unsigned int time)</p><p><b> {</b></p><p> unsigned int n;</p><p><b> n=0;</b></p><p> while(n<time) n++;</p><p&g
21、t;<b> return;</b></p><p><b> }</b></p><p> void display(float k) </p><p><b> { </b></p><p> if(k>=0) </p><p>&
22、lt;b> {</b></p><p><b> P2=0xf7;</b></p><p> P0=tab[(int)(k/100)];</p><p> delay(250);</p><p><b> P0=0x00;</b></p><p>
23、<b> }</b></p><p><b> else </b></p><p><b> {</b></p><p><b> k=-k;</b></p><p><b> P2=0xf7;</b></p>
24、;<p><b> P0=0x40;</b></p><p> delay(250);</p><p><b> P0=0x00;</b></p><p><b> }</b></p><p> P2=0xfb; </p><p
25、> P0=tab[(int)(k/10)];</p><p> delay(250);</p><p><b> P0=0x00;</b></p><p><b> P2=0xfd;</b></p><p> P0=tab[((int)k)%10];</p><p
26、><b> P07=1;</b></p><p> delay(250);</p><p><b> P0=0x00;</b></p><p> P2=0xfe; </p><p> P0=tab[((int)(k*10))%10];</p><p>
27、 delay(250);</p><p><b> P0=0x00;</b></p><p><b> }</b></p><p> Init_DS18B20(void)</p><p><b> {</b></p><p> unsigned
28、 char x=0;</p><p><b> DQ=1;</b></p><p><b> delay(8);</b></p><p><b> DQ=0;</b></p><p> delay(85);</p><p><b>
29、DQ=1;</b></p><p> delay(14);</p><p><b> x=DQ;</b></p><p> delay(20);</p><p><b> }</b></p><p> ReadOneChar(void)</p>
30、;<p><b> {</b></p><p> unsigned char i=0;</p><p> unsigned char dat=0;</p><p> for (i=8;i>0;i--)</p><p><b> {</b></p><
31、;p><b> DQ=1;</b></p><p><b> delay(1);</b></p><p><b> DQ=0;</b></p><p><b> dat>>=1;</b></p><p><b> DQ
32、=1;</b></p><p> if(DQ) dat|=0x80;</p><p><b> delay(4);</b></p><p><b> }</b></p><p> return(dat);</p><p><b> }</
33、b></p><p> WriteOneChar(unsigned char dat)</p><p><b> {</b></p><p> unsigned char i=0;</p><p> for (i=8;i>0;i--)</p><p> {
34、 </p><p><b> DQ=0;</b></p><p> DQ=dat&0x01;</p><p><b> delay(5);</b></p><p><b> DQ=1;</b></p><p&
35、gt;<b> dat>>=1;</b></p><p><b> }</b></p><p><b> delay(4);</b></p><p><b> }</b></p><p> ReadTemperature(void)&
36、lt;/p><p><b> {</b></p><p> char ctempL,ctempH;</p><p> Init_DS18B20();</p><p> WriteOneChar(0xcc);</p><p> WriteOneChar(0x44);</p>&l
37、t;p> delay(125);</p><p> Init_DS18B20();</p><p> WriteOneChar(0xcc);</p><p> WriteOneChar(0xbe);</p><p> tempL=ReadOneChar(); </p><p> tempH=
38、ReadOneChar(); </p><p> if(tempH<0xf8)</p><p> temperature=((tempH*256)+tempL)* 0.0625;</p><p><b> else </b></p><p><b> {</b></p>
39、;<p> ctempL=tempL;</p><p> ctempH=tempH; </p><p> temperature=(((~ctempH)*256)+(~ctempL)+1)* 0.0625;</p><p> temperature=-temperature;</p><p><b> }
40、</b></p><p> delay(200);</p><p> return(temperature);</p><p><b> }</b></p><p> void Display2()</p><p><b> {</b></p>
41、;<p> if(m==0||m==1)</p><p><b> {</b></p><p><b> P2=0xf7;</b></p><p><b> P0=0x76;</b></p><p> delay(70);</p><
42、p><b> P0=0x00;</b></p><p> if(m==0&&k==-1) delay(70);</p><p><b> else </b></p><p><b> {</b></p><p><b> if(tH==
43、1)</b></p><p><b> {</b></p><p> P2=0xfb; </p><p><b> P0=0x71;</b></p><p> delay(70);</p><p><b> P0=0x00;</b&
44、gt;</p><p><b> }</b></p><p><b> else </b></p><p><b> {</b></p><p> P2=0xfb; </p><p><b> P0=0x3f;</b>
45、</p><p> delay(70);</p><p><b> P0=0x00;</b></p><p><b> }</b></p><p><b> }</b></p><p> if(m==1&&k==-1) dela
46、y(100);</p><p><b> else </b></p><p><b> {</b></p><p> if(temperatureH>=0)</p><p><b> {</b></p><p> P2=0xfd;
47、</p><p> P0=tab[(int)(temperatureH/10)];</p><p> delay(70);</p><p><b> P0=0x00;</b></p><p> P2=0xfe; </p><p> P0=tab[(int)(temperatureH
48、)%10];</p><p> delay(70);</p><p><b> P0=0x00;</b></p><p><b> }</b></p><p><b> else </b></p><p><b> {</b&g
49、t;</p><p> P2=0xfd; </p><p><b> P0=0x40; </b></p><p> delay(70);</p><p><b> P0=0x00;</b></p><p> P2=0xfe; </p>&l
50、t;p> P0=tab[(int)(-temperatureH)%10];</p><p> delay(70);</p><p><b> P0=0x00;</b></p><p><b> }</b></p><p><b> }</b></p>
51、<p><b> }</b></p><p> else if(m==2||m==3)</p><p><b> {</b></p><p><b> P2=0xf7;</b></p><p><b> P0=0x38;</b>&l
52、t;/p><p> delay(70);</p><p><b> P0=0x00;</b></p><p> if(m==2&&k==-1) delay(70);</p><p><b> else</b></p><p><b> {<
53、;/b></p><p><b> if(tL==1)</b></p><p><b> {</b></p><p> P2=0xfb; </p><p><b> P0=0x71;</b></p><p> delay(70);&
54、lt;/p><p><b> P0=0x00;</b></p><p><b> }</b></p><p><b> else </b></p><p><b> {</b></p><p> P2=0xfb; <
55、/p><p><b> P0=0x3f;</b></p><p> delay(70);</p><p><b> P0=0x00;</b></p><p><b> }</b></p><p><b> }</b></
56、p><p> if(m==3&&k==-1) delay(100);</p><p><b> else</b></p><p><b> {</b></p><p> if(temperatureL>=0)</p><p><b> {
57、</b></p><p> P2=0xfd; </p><p> P0=tab[(int)(temperatureL/10)];</p><p> delay(70);</p><p><b> P0=0x00; </b></p><p> P2=0xfe; &l
58、t;/p><p> P0=tab[(int)(temperatureL)%10];</p><p> delay(70);</p><p><b> P0=0x00;</b></p><p><b> }</b></p><p><b> else </
59、b></p><p><b> {</b></p><p> P2=0xfd; </p><p> P0=0x40; </p><p> delay(70);</p><p><b> P0=0x00;</b></p><p>
60、; P2=0xfe; </p><p> P0=tab[(int)(-temperatureL)%10];</p><p> delay(70);</p><p><b> P0=0x00;</b></p><p><b> }</b></p><p><
61、;b> }</b></p><p><b> }</b></p><p> if(l==200){k=-k;l=0;}</p><p><b> l++;</b></p><p><b> }</b></p><p> vo
62、id seting()</p><p><b> {</b></p><p> if(SET==1&&NEXT==1&&REDUCE==1&&ADD==1); </p><p><b> else </b></p><p><b&g
63、t; {</b></p><p><b> keyon=1;</b></p><p> if(SET==0)keytype=0;</p><p> if(NEXT==0)keytype=1;</p><p> if(REDUCE==0)keytype=2;</p><p>
64、 if(ADD==0)keytype=3;</p><p><b> }</b></p><p> if(keyon==1&&SET==1&&NEXT==1&&REDUCE==1&&ADD==1) </p><p><b> {</b></p&g
65、t;<p> if(keytype==1)</p><p><b> { </b></p><p> if(m>=3)m=0;</p><p><b> else m++;</b></p><p><b> }</b></p><
66、;p> if(keytype==2) </p><p><b> {</b></p><p> if(m==0)tH=-tH;</p><p><b> if(m==1)</b></p><p><b> {</b></p><p>
67、if(temperatureH>(temperatureL+1)) temperatureH--;</p><p> else temperatureH=99;</p><p><b> }</b></p><p> if(m==2)tL=-tL;</p><p><b> if(m==3)<
68、;/b></p><p><b> {</b></p><p> if(temperatureL>-9) temperatureL--;</p><p> else temperatureL=(temperatureH-1);</p><p><b> }</b></p&g
69、t;<p><b> }</b></p><p> if(keytype==3) </p><p><b> {</b></p><p> if(m==0)tH=-tH;</p><p><b> if(m==1)</b></p><
70、;p><b> {</b></p><p> if(temperatureH<99) temperatureH++;</p><p> else temperatureH=(temperatureL+1);</p><p><b> }</b></p><p> if(m==2
71、)tL=-tL;</p><p><b> if(m==3)</b></p><p><b> {</b></p><p> if(temperatureL<(temperatureH-1)) temperatureL++;</p><p> else temperatureL=-9;
72、</p><p><b> }</b></p><p><b> }</b></p><p> if(keytype==0) </p><p><b> {</b></p><p><b> keyon=0;</b>
73、</p><p> keytype=4;</p><p><b> out=1; </b></p><p><b> }</b></p><p><b> keyon=0;</b></p><p> keytype=4;</p>
74、<p><b> }</b></p><p><b> }</b></p><p> void main() </p><p><b> {</b></p><p><b> P1=0XFF;</b></p>&
75、lt;p><b> while(1)</b></p><p><b> {</b></p><p> ReadTemperature();</p><p> display(temperature);</p><p> if(SET==0)</p><p>&
76、lt;b> {</b></p><p><b> out=0;</b></p><p> delay(300);</p><p> while(SET==0);</p><p><b> m=0;</b></p><p><b> l=
77、0;</b></p><p><b> keyon=0;</b></p><p> keytype=4;</p><p><b> while(1)</b></p><p><b> {</b></p><p> Display2(
78、);</p><p><b> seting();</b></p><p> if (out==1)break;</p><p><b> }</b></p><p> delay(200);</p><p> while(SET==0);</p>&
79、lt;p><b> }</b></p><p> if(tH==-1&&temperature>=temperatureH) RED=0; </p><p> else RED=1;</p><p> if(tL==-1&&temperature<=temperatureL) GREEN
80、=0;</p><p> else GREEN=1;</p><p><b> }</b></p><p><b> }</b></p><p> 五、改進意見與收獲體會</p><p> 經(jīng)過將兩周的單片機課程設計,終于完成了我們的數(shù)字溫度計的設計,雖然沒有完全達
81、到設計要求,但從心底里說,還是高興的,畢竟這次設計把實物都做了出來,高興之余不得不深思呀! 在本次設計的過程中,我發(fā)現(xiàn)很多的問題,雖然以前還做過這樣的設計但這次設計真的讓我長進了很多,單片機課程設計重點就在于軟件算法的設計,需要有很巧妙的程序算法,雖然以前寫過幾次程序,但我覺的寫好一個程序并不是一件簡單的事,舉個例子,以前寫的那幾次,數(shù)據(jù)加減時,我用的都是BCD碼,這一次,我全部用的都是16進制的數(shù)直接加減,顯示處理時在用對不同
82、的位,求商或求余,感覺效果比較好。還有時序的問題,通過這次的設計我明白了時序才真正是數(shù)字芯片的靈魂,所有的程序我們都可以通過對其時序的理解來實現(xiàn)對其操作,同時體會到了單總線結構的魅力。 從這次的課程設計中,我真真正正的意識到,在以后的學習中,要理論聯(lián)系實際,把我們所學的理論知識用到實際當中,學習單機片機更是如此,程序只有在經(jīng)常的寫與讀的過程中才能提高,這就是我在這次課程設計中的最大收獲。</p><p>
83、 最重要的是本次設計是三個人一組,讓我們有種組隊做單片機開發(fā)項目的感覺,畢竟一個項目只靠一個人是很難完成的,今后我們做的項目肯定要多人協(xié)作。在這次設計過程中培養(yǎng)了我們的團隊協(xié)作精神,便于我們走到工作崗位后能很快適應工作環(huán)境。</p><p><b> 六、主要參考資料</b></p><p> [1]DS18b20數(shù)據(jù)手冊。</p><p&g
84、t; [2] 求是科技編著8051系列單片機C程序設計完全手冊北京: 人民郵電出版社, 2006</p><p> [3] 余發(fā)山,王福忠.單片機原理及應用技術.徐州:中國礦業(yè)大學出版社,2003</p><p><b> 組員分工:</b></p><p> 于覲嘉:原理圖設計與程序編寫</p><p> 吳
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機課程設計---單片機原理及應用
- 單片機課程設計-- 單片機原理及應用
- 單片機課程設計---基于單片機溫度測量系統(tǒng)設計
- 單片機原理及應用課程設計
- 單片機原理及應用課程設計
- 單片機測量溫度儀器設計課程設計報告
- 單片機課程設計報告單片機的多路溫度測量系統(tǒng)設計
- 單片機手機鍵盤-單片機原理及應用課程設計
- 單片機原理及應用課程設計--多功能數(shù)字溫度計設計
- 單片機溫度控制課程設計
- 《單片機原理及應用》課程設計 八路溫度巡回檢測系統(tǒng)
- 《單片機原理及應用》課程設計—單片機電子琴設計
- 單片機課程設計--基于msp430單片機的溫度測量及顯示系統(tǒng)
- 單片機原理及系統(tǒng)課程設計
- 單片機原理及系統(tǒng)課程設計
- 單片機課程設計--單片機轉(zhuǎn)速測量系統(tǒng)
- 單片機溫度檢測課程設計
- 單片機原理及應用課程設計---數(shù)字式溫度計的設計
- 單片機課程設計--多路數(shù)字溫度測量系統(tǒng)設計
- 《單片機原理及應用》課程設計 ---八路溫度巡回檢測系統(tǒng)
評論
0/150
提交評論