版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 單片機(jī)原理及系統(tǒng)課程設(shè)計</p><p> 專 業(yè): 自動控制 </p><p> 班 級: </p><p> 姓 名: </p><p> 學(xué) 號: </p>&
2、lt;p> 指導(dǎo)教師: </p><p> 2014 年 1 月 15日</p><p> 基于單片機(jī)的數(shù)字溫度計設(shè)計</p><p><b> 1設(shè)計目的</b></p><p> 隨著人們生活水平的不斷提高,單片機(jī)控制無疑是人們追求的目標(biāo)之一,它所給人帶來的方便是不可否
3、定的,各種數(shù)字系統(tǒng)的應(yīng)用也使人們的生活更加舒適。數(shù)字化控制、智能控制為現(xiàn)代人的工作、生活、科研等方面帶來方便。其中數(shù)字溫度計就是一個典型的例子。數(shù)字溫度計與傳統(tǒng)的溫度計相比,具有讀數(shù)方便、測溫范圍廣、測溫精確、功能多樣話等優(yōu)點(diǎn)。其主要用于對測溫要求準(zhǔn)確度比較高的場所,或科研實驗室使用。</p><p> 本設(shè)計主要介紹了一個基于AT89C51單片機(jī)的測溫系統(tǒng),詳細(xì)描述了利用數(shù)字溫度傳感器DS18B20開發(fā)測溫系
4、統(tǒng)的過程,重點(diǎn)對傳感器在單片機(jī)下的硬件連接,軟件編程以及各模塊系統(tǒng)流程進(jìn)行了詳盡分析,特別是數(shù)字溫度傳感器DS18B20的數(shù)據(jù)采集過程。對各部分的電路也一一進(jìn)行了介紹,該系統(tǒng)可以方便的實現(xiàn)溫度采集和顯示,并可根據(jù)需要任意設(shè)定上下限報警溫度。 </p><p><b> 2設(shè)計方案及原理</b></p><p> 2.1系統(tǒng)總體設(shè)計方案</p><
5、;p> 數(shù)字溫度計具有精度高、量程寬、靈敏度高、體積小、功耗低等優(yōu)點(diǎn),在生活中廣泛應(yīng)用。本設(shè)計中用單片機(jī)AT89C51、溫度傳感器DS18B20和數(shù)碼管組成數(shù)字溫度計,實現(xiàn)了對溫度的測量和報警的功能,結(jié)構(gòu)簡單,便于操作。</p><p> 2.2溫度計設(shè)計原理</p><p> 溫度計原理圖如圖1所示。系統(tǒng)工作時,溫度傳感器將采集到的信號傳送給單片機(jī),單片機(jī)通過軟件處理把數(shù)據(jù)傳
6、送到顯示模塊和報警模塊,實現(xiàn)溫度的顯示和報警作用。</p><p><b> 圖1 溫度計原理圖</b></p><p><b> 3硬件設(shè)計</b></p><p> 3.1系統(tǒng)原理電路圖</p><p> 本課題是以AT89C51單片機(jī)為核心的一種數(shù)字溫度控制系統(tǒng),系統(tǒng)整體硬件電路包括,
7、傳感器數(shù)據(jù)采集電路,上下限報警調(diào)整電路,溫度顯示電路,單片機(jī)主板電路等組成。</p><p> 圖2 系統(tǒng)原理電路圖</p><p><b> 3.2晶體振蕩電路</b></p><p> AT89C51芯片內(nèi)部有一個高增益反相放大器,用于構(gòu)成振蕩器。引線 XTAL1和XTAL2分別為反向放大器的輸入和輸出,兩端跨接石英晶體及兩個電容就可
8、構(gòu)成穩(wěn)定的自激振蕩器。</p><p> 這里,選用51單片機(jī)12MHZ的內(nèi)部振蕩方式,電容器C1、C2起穩(wěn)定振蕩頻率,并對振蕩頻率有微調(diào)作用,C1和C2可在20~100pF之間取值,這里取22pF。</p><p> 晶振電路圖如圖3所示。</p><p><b> 圖3 晶振電路圖</b></p><p>&l
9、t;b> 3.3報警電路</b></p><p> 在報警電路中,我們可以在I/O口上直接接LED燈和蜂鳴器,由P1.4連接紅色LED燈作為高溫報警燈,P1.5連接黃色LED燈作低溫報警燈;P3.7連接蜂鳴器。當(dāng)系統(tǒng)溫度高于某值時,P1.4便會輸出低電平,紅燈閃爍;當(dāng)系統(tǒng)溫度低于某值時,P1.5便會輸出低電平,黃燈閃爍;在這兩種情況下P3.7都會輸出高電平,是蜂鳴器報警。在報警時,只要將按鈕
10、開關(guān)斷開,就會解除蜂鳴器報警,當(dāng)溫度變化到某范圍時,LED燈才會停止閃爍。</p><p> 報警電路圖如圖5所示。</p><p><b> 圖4 報警電路圖</b></p><p><b> 3.4溫度顯示電路</b></p><p> 顯示電路既可以選用液晶顯示器,也可以選用數(shù)碼管顯示
11、。我們采用的是數(shù)碼管顯示電路。用8位共陰數(shù)碼管顯示,LED是七段式顯示器,內(nèi)部有7個條形發(fā)光二極管和1個小圓點(diǎn)發(fā)光二極管組成,根據(jù)各管的亮暗組合成字符。</p><p> 在用數(shù)碼管顯示時,我們有靜態(tài)和動態(tài)兩種選擇,靜態(tài)顯示程序簡單,顯示穩(wěn)定,但是占用端口比較多;動態(tài)顯示所需端口比較少,可以節(jié)省單片機(jī)的I/O口。</p><p> 74LS245是常用的芯片,用來驅(qū)動LED或者其他的設(shè)
12、備,它是8路雙向總線收發(fā)器,可雙向傳輸數(shù)據(jù)。74LS245還具有雙向三態(tài)功能,既可以輸出,也可以輸入數(shù)據(jù)。當(dāng)AT89C51單片機(jī)的P0口總線負(fù)載達(dá)到或超過P0口最大負(fù)載能力時,必須接入74LS245等總線驅(qū)動器。</p><p> 顯示電路圖如圖6所示。</p><p><b> 圖5 顯示電路圖</b></p><p> 3.5 DS1
13、8B20溫度傳感器</p><p> 數(shù)字溫度傳感器DS18B20是一種新型的“一線器件”,溫度測量范圍為-55~+125攝氏度,可編程為9位~12位轉(zhuǎn)換精度,測溫分辨率可達(dá)0.0625攝氏度,分辨率設(shè)定參數(shù)以及用戶設(shè)定的報警溫度存儲在EEPROM中,掉電后依然保存。被測溫度用符號擴(kuò)展的16位數(shù)字量方式串行輸出;其工作電源既可以在遠(yuǎn)端引入,也可以采用寄生電源方式產(chǎn)生;多個DS18B20可以并聯(lián)到3根或2根線上,
14、CPU只需一根端口線就能與諸多DS18B20通信。</p><p> DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器。</p><p> 由于DS18B20單線通信功能是分時完成的,有嚴(yán)格的時隙概念,因此讀寫時序很重要。系統(tǒng)對DS18B20的各種操作必須按協(xié)議進(jìn)行。操作協(xié)議為:初始化DS18B20(發(fā)復(fù)位脈沖)→發(fā)RO
15、M功能命令→發(fā)存儲器操作命令→處理數(shù)據(jù)。</p><p> 圖6 DS18B20電路圖</p><p><b> 4軟件設(shè)計</b></p><p><b> 4.1程序流程圖</b></p><p> 本系統(tǒng)的軟件部分主要可分為顯示程序、定時計數(shù)中斷程序、報警程序、延時程序。利用Keil軟
16、件對程序調(diào)試,程序運(yùn)行無誤后生成了hex文件。</p><p><b> 流程圖如圖7所示。</b></p><p><b> 圖7 程序流程圖</b></p><p><b> 4.2主程序</b></p><p><b> 程序見附錄。</b>
17、</p><p><b> 5系統(tǒng)仿真及總結(jié)</b></p><p><b> 5.1仿真結(jié)果</b></p><p> 本次課程設(shè)計中的系統(tǒng)仿真利用Proteus軟件進(jìn)行硬件電路連接,通過放置元器件,合理布線,確認(rèn)電路連接后,將Keil軟件已經(jīng)生成的hex文件裝入AT89C51單片機(jī)中進(jìn)行仿真,最后仿真成功。<
18、;/p><p> 系統(tǒng)仿真結(jié)果圖如圖7所示。</p><p> 圖8 系統(tǒng)仿真結(jié)果圖</p><p><b> 5.2總結(jié)</b></p><p> 通過本次課程設(shè)計,使我深刻地認(rèn)識到自己掌握的單片機(jī)方面的知識還很少,對學(xué)過的課本知識理解不透徹,而且不能熟練運(yùn)用匯編和C語言編寫程序,從而導(dǎo)致在設(shè)計方案初期出現(xiàn)了一些錯
19、誤。通過老師答疑和查閱書籍慢慢地理清了設(shè)計方案的思路和程序的編寫,以及對仿真軟件PROTEUS和KEIL的熟練運(yùn)用。</p><p> 本次課程設(shè)計使我加深了對單片機(jī)課程的全面認(rèn)識,復(fù)習(xí)和掌握,在大學(xué)課堂學(xué)習(xí)了大量的專業(yè)知識,但沒有太多的實踐來檢驗自己的掌握程度,只有理論和實踐相結(jié)合,才能更好地學(xué)好專業(yè)知識,這次的數(shù)字溫度計的設(shè)計給我奠定了一個實踐基礎(chǔ),我會在以后的學(xué)習(xí)生活中更好地將理論轉(zhuǎn)化為實踐,使自己的各方
20、面能得到提高,同時在查找資料的過程中我也學(xué)到了許多新的知識,在和同學(xué)的互相討論中,提高了自己的單片機(jī)知識水平。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 王思明,茍軍年.單片機(jī)原理及應(yīng)用系統(tǒng)設(shè)計[M].北京:科學(xué)出版社,2012:176-189.</p><p> [2] 譚浩強(qiáng).C程序設(shè)計(第四版) [M].
21、北京:清華大學(xué)出版社,2010:36-60.</p><p> [3] 賀敬凱.單片機(jī)系統(tǒng)設(shè)計[M].西安:電子科技大學(xué)出版社,2011:86-102.</p><p><b> 附錄:</b></p><p> #include<reg51.h></p><p> #include<intri
22、ns.h></p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> sbit DQ=P3^6;</p><p> sbit BEEP=P3^7;</p><p> sbit HI_LED=P1^4;
23、</p><p> sbit LO_LED=P1^5;</p><p> //共陰極數(shù)碼管及空白顯示</p><p> uchar code DSY_CODE[]=</p><p> { 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};</p><p&
24、gt; //溫度小數(shù)位對照表</p><p> uchar code df_Table[]={ 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};</p><p> // 報警溫度上下限</p><p> char Alarm_Temp_HL[2]={70,-20};</p><p> uchar CurrentT=
25、0; // 當(dāng)前讀取的溫度整數(shù)部分</p><p> uchar Temp_Value[]={0x00,0x00};//從DS18B20讀取的溫度值</p><p> uchar Display_Digit[]={0,0,0,0}; //待顯示的各溫度數(shù)位</p><p> bit HI_Alarm=0,LO_Alarm=0; //高低溫報
26、警標(biāo)志</p><p> bit DS18B20_IS_OK=1; //傳感器正常標(biāo)志</p><p> uint Time0_Count=0 ; //定時器延時累加</p><p><b> // 延時</b></p><p> void Delay(uint x)</p>&l
27、t;p><b> {</b></p><p> while(--x);</p><p><b> }</b></p><p> //初始化DS18B20</p><p> uchar Init_DS18B20()</p><p><b> {<
28、;/b></p><p> uchar status;</p><p> DQ=1;Delay(8);</p><p> DQ=0;Delay(90);</p><p> DQ=1;Delay(8);</p><p> status=DQ;</p><p> Delay(100
29、);</p><p><b> DQ=1;</b></p><p> return status; //初始化成功時返回0</p><p><b> }</b></p><p><b> //讀一字節(jié)</b></p><p> u
30、char ReadOneByte()</p><p><b> {</b></p><p> uchar i, dat=0;</p><p> DQ=1;_nop_();</p><p> for (i=0;i<8;i++)</p><p><b> {</b>
31、;</p><p> DQ=0;dat>>=1;DQ=1;_nop_();_nop_();</p><p> if(DQ)dat |=0x80;Delay(30);DQ=1;</p><p><b> }</b></p><p> return dat;</p><p><
32、;b> }</b></p><p><b> //寫一字節(jié)</b></p><p> void WriteOneByte(uchar dat)</p><p><b> {</b></p><p><b> uchar i;</b></p>
33、;<p> for (i=0;i<8;i++)</p><p><b> {</b></p><p> DQ=0;DQ=dat&0x01;Delay(5);DQ=1;dat>>=1;</p><p><b> }</b></p><p><b&g
34、t; }</b></p><p><b> //讀取溫度值</b></p><p> void Read_Temperature()</p><p><b> {</b></p><p> if(Init_DS18B20()==1) //DS18B20故障</p>
35、;<p> DS18B20_IS_OK=0;</p><p><b> else</b></p><p><b> {</b></p><p> WriteOneByte(0xCC); //跳過序列號</p><p> WriteOneByte(0x44); //啟
36、動溫度轉(zhuǎn)換</p><p> Init_DS18B20();</p><p> WriteOneByte(0xCC);//跳過序列號</p><p> WriteOneByte(0xBE);//讀取溫度寄存器</p><p> Temp_Value[0]=ReadOneByte(); //溫度低八位</p>
37、<p> Temp_Value[1]=ReadOneByte(); //溫度高八位</p><p> Alarm_Temp_HL[0]=ReadOneByte(); //報警溫度TH</p><p> Alarm_Temp_HL[1]=ReadOneByte(); //報警溫度TL</p><p> DS18B20_IS_OK=1;</
38、p><p><b> }</b></p><p><b> }</b></p><p> //設(shè)置DS18B20溫度報警值</p><p> void Set_Alarm_Temp_Value()</p><p><b> {</b></p&
39、gt;<p> Init_DS18B20();</p><p> WriteOneByte(0xCC); //跳過序列號</p><p> WriteOneByte(0x4E); //將設(shè)定的溫度報警值寫入DS18B20</p><p> WriteOneByte(Alarm_Temp_HL[0]); //寫TH<
40、/p><p> WriteOneByte(Alarm_Temp_HL[1]);//寫TL</p><p> WriteOneByte(0x7F); //12位精度</p><p> Init_DS18B20();</p><p> WriteOneByte(0xCC);// 跳過序列號</p><p
41、> WriteOneByte(0x48);//溫度報警值存入DS18B20</p><p><b> }</b></p><p> //在數(shù)碼管上顯示溫度</p><p> void Display_Temperature()</p><p><b> {</b></p
42、><p><b> uchar i;</b></p><p> uchar t=150; //延時值</p><p> uchar ng=0,np=0; //負(fù)數(shù)標(biāo)識及負(fù)號顯示位置</p><p> char Signed_Current_Temp;</p><p>
43、if((Temp_Value[1]&0xF8)==0xF8)</p><p><b> {</b></p><p> Temp_Value[1]=~Temp_Value[1];</p><p> Temp_Value[0]=~Temp_Value[0]+1;</p><p> if(Temp_Value[
44、0]==0x00) Temp_Value[1]++;</p><p> ng=1;np=0xFD;</p><p><b> }</b></p><p> Display_Digit[0]=df_Table[Temp_Value[0]&0x0F];</p><p> CurrentT=((Temp_Val
45、ue[0]&0xF0)>>4)|((Temp_Value[1]&0x07)<<4);</p><p> Signed_Current_Temp=ng?-CurrentT:CurrentT;</p><p> HI_Alarm=Signed_Current_Temp>=Alarm_Temp_HL[0]?1:0;</p><
46、p> LO_Alarm=Signed_Current_Temp<=Alarm_Temp_HL[1]?1:0;</p><p> Display_Digit[3]=CurrentT/100;</p><p> Display_Digit[2]=CurrentT%100/10;</p><p> Display_Digit[1]=CurrentT%1
47、0;</p><p> if(Display_Digit[3]==0)</p><p><b> {</b></p><p> Display_Digit[3]=10;</p><p><b> np=0xFB;</b></p><p> if(Display_Di
48、git[2]==0)</p><p><b> {</b></p><p> Display_Digit[2]=10;</p><p><b> np=0xF7;</b></p><p><b> }</b></p><p><b>
49、 }</b></p><p> //刷新顯示若干時間</p><p> for(i=0;i<30;i++)</p><p><b> {</b></p><p> P0=0x39;P2=0x7F;Delay(t);P2=0xFF;</p><p> P0=0x63;P2
50、=0xBF;Delay(t);P2=0xFF;</p><p> P0=DSY_CODE[Display_Digit[0]]; //小數(shù)位</p><p> P2=0xDF;Delay(t);P2=0xFF;</p><p> P0=( DSY_CODE[Display_Digit[1]]) | 0x80;</p><p>
51、; P2=0xEF;Delay(t);P2=0xFF;</p><p> P0=DSY_CODE[Display_Digit[2]];</p><p> P2=0xF7;Delay(t);P2=0xFF;</p><p> P0=DSY_CODE[Display_Digit[3]]; </p><p> P2=0xFB;D
52、elay(t);P2=0xFF;</p><p> if(ng) //如果為負(fù)則在調(diào)整后的位置顯示"-"</p><p><b> {</b></p><p> P0=0x40;P2=np;Delay(t);P2=0xFF;</p><p><b> }</b>
53、</p><p><b> }</b></p><p><b> }</b></p><p> void T0_INT() interrupt 1</p><p><b> {</b></p><p> TH0=-1000/256;</p
54、><p> TL0=-1000%256;</p><p> BEEP=!BEEP;</p><p> if(++Time0_Count==400)</p><p><b> {</b></p><p> Time0_Count=0;</p><p> if(HI_A
55、larm)HI_LED=~HI_LED;else HI_LED=1;</p><p> if(LO_Alarm)LO_LED=~LO_LED;else LO_LED=1;</p><p><b> }</b></p><p><b> }</b></p><p><b> // 主
56、程序</b></p><p> void main(void)</p><p><b> {</b></p><p><b> IE=0x82;</b></p><p> TMOD=0x01;</p><p> TH0=-1000/256;</p&
57、gt;<p> TL0=-1000%256;</p><p><b> TR0=0;</b></p><p><b> HI_LED=1;</b></p><p><b> LO_LED=1;</b></p><p> Set_Alarm_Temp_Va
58、lue();</p><p> Read_Temperature();</p><p> Delay(50000);</p><p> Delay(50000);</p><p><b> while(1)</b></p><p><b> {</b></p&
59、gt;<p> Read_Temperature();</p><p> if(DS18B20_IS_OK)</p><p><b> {</b></p><p> if(HI_Alarm==1||LO_Alarm==1) TR0=1;</p><p> else TR0=0;</p>
60、<p> Display_Temperature();</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> P0= P2=0x00;</p><p&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)課程設(shè)計-- 基于單片機(jī)的數(shù)字溫度計設(shè)計
- 單片機(jī)課程設(shè)計報告--基于單片機(jī)的數(shù)字溫度計設(shè)計
- 單片機(jī)課程設(shè)計---基于單片機(jī)的數(shù)字溫度計設(shè)計
- 單片機(jī)課程設(shè)計---單片機(jī)數(shù)字顯示溫度計
- 單片機(jī)課程設(shè)計--基于單片機(jī)的數(shù)字溫度計的設(shè)計
- 單片機(jī)課程設(shè)計--單片機(jī)控制的數(shù)字溫度計
- 單片機(jī)課程設(shè)計報告--數(shù)字溫度計
- 單片機(jī)課程設(shè)計報告數(shù)字溫度計
- 單片機(jī)課程設(shè)計報告--數(shù)字溫度計
- 單片機(jī)課程設(shè)計--數(shù)字溫度計
- 單片機(jī)課程設(shè)計--數(shù)字溫度計
- 單片機(jī)課程設(shè)計-數(shù)字溫度計
- 單片機(jī)課程設(shè)計—數(shù)字溫度計
- 單片機(jī)數(shù)字溫度計課程設(shè)計
- 單片機(jī)課程設(shè)計---數(shù)字溫度計
- 單片機(jī)課程設(shè)計-數(shù)字溫度計
- 單片機(jī)課程設(shè)計—數(shù)字溫度計
- 單片機(jī)課程設(shè)計——數(shù)字溫度計
- 單片機(jī)課程設(shè)計—數(shù)字溫度計
- 基于單片機(jī)數(shù)字溫度計課程設(shè)計
評論
0/150
提交評論