|
|
微計算機應(yīng)用綜合實訓(xùn)報告
課程名稱: 微計算機應(yīng)用綜合實訓(xùn)
院 (系):
專業(yè)班級:
學(xué)生姓名:
學(xué) 號:
實踐地點:
指導(dǎo)教師:
設(shè)計起止時間
基于51單片機的18B20溫度檢測
摘 要
隨著時代的進(jìn)步和發(fā)展,單片機技術(shù)已經(jīng)普及到我們的生活、工作、科研各個領(lǐng)域,已經(jīng)成為了一種比較成熟的技術(shù),本文將介紹一種基于51單片機控制的溫度檢測儀。本設(shè)計使用簡便,功能豐富。可以實現(xiàn)溫度采集,溫度報警,重設(shè)上下限度值等功能。
在現(xiàn)代化的工業(yè)生產(chǎn)中,需要對周圍環(huán)境進(jìn)行檢測和控制。該系統(tǒng)使用STC89C51單片機,同時運用單線數(shù)字溫度傳感器DS18B20,四位共陽極數(shù)碼管顯示,按鍵控制等模塊可實現(xiàn)溫度的檢測與設(shè)置。課題經(jīng)過實驗驗證達(dá)到設(shè)計要求,具有一定的使用價值和推廣價值。本作品使用四位共陽極數(shù)碼管顯示,可以清晰地顯示當(dāng)前的溫度,快速準(zhǔn)確,實用性很高。
目 錄
1 緒論...4
1.1 實訓(xùn)內(nèi)容.5
1.2 系統(tǒng)總體設(shè)計..5
2 protel學(xué)習(xí)..5
2.1 學(xué)習(xí)簡介..5
2.2 原理圖.6
2.3 PCB圖.6
3 硬件電路.7
3.1 最小系統(tǒng)電路.7
3.2 數(shù)碼管顯示電路9
3.3 溫度采集電路10
3.4 電路焊接10
4 軟件設(shè)計.11
4.1 總體設(shè)計.11
4.2 溫度采集子程序11
4.3 數(shù)碼顯示子程序12
4.4 protues仿真.13
4.5 硬件調(diào)試.13
參考文獻(xiàn)13
附錄..14
1緒 論
2009年6月14日隨著時代的進(jìn)步和發(fā)展,單片機技術(shù)已經(jīng)普及到我們生活、工作、科研、各個領(lǐng)域,已經(jīng)成為一種比較成熟的技術(shù)。
本文主要介紹了一個基于89S51單片機的測溫系統(tǒng),詳細(xì)描述了利用液晶顯示器件傳感器DS18B20開發(fā)測溫系統(tǒng)的過程,重點對傳感器在單片機下的硬件連接,軟件編程以及各模塊系統(tǒng)流程進(jìn)行了詳盡分析,特別是數(shù)字溫度傳感DS18B20的數(shù)據(jù)采集過程。對各部分的電路也一一進(jìn)行了介紹,該系統(tǒng)可以方便的實現(xiàn)實現(xiàn)溫度采集和顯示,并可根據(jù)需要任意設(shè)定上下限報警溫度,它使用起來相當(dāng)方便,具有精度高、量程寬、靈敏度高、體積小、功耗低等優(yōu)點,適合于我們?nèi)粘I詈凸ぁ⑥r(nóng)業(yè)生產(chǎn)中的溫度測量,也可以當(dāng)作溫度處理模塊嵌入其它系統(tǒng)中,作為其他主系統(tǒng)的輔助擴(kuò)展。DS18B20與AT89C51結(jié)合實現(xiàn)最簡溫度檢測系統(tǒng),該系統(tǒng)結(jié)構(gòu)簡單,抗干擾能力強,適合于惡劣環(huán)境下進(jìn)行現(xiàn)場溫度測量,有廣泛的應(yīng)用前景。
1.1 實訓(xùn)內(nèi)容
通過基于C51系列單片機AT89C51和DS18B20溫度傳感器檢測溫度,熟悉芯片的使用,溫度傳感器的功能,數(shù)碼顯示管的使用,匯編語言的設(shè)計;并且把我們這大學(xué)所學(xué)的數(shù)字和模擬電子技術(shù)、檢測技術(shù)、單片機應(yīng)用等知識,通過理論聯(lián)系實際,從題目分析、電路設(shè)計調(diào)試、程序編制調(diào)試到傳感器的選定等這一完整的實驗過程,培養(yǎng)了學(xué)生正確的設(shè)計思想,使學(xué)生充分發(fā)揮主觀能動性,熟練掌握protues、protel、keil等軟件,繪制PCB板,去獨立解決實際問題,以達(dá)到提升學(xué)生的綜合能力、動手能力、文獻(xiàn)資料查閱能力的作用,為畢業(yè)設(shè)計和以后工作打下一個良好的基礎(chǔ)。
1.2 系統(tǒng)總體設(shè)計
采用AT89C51單片機作為控制核心對溫度傳感器DS18B20控制,讀取溫度信號并進(jìn)行計算處理,并送到數(shù)碼管顯示器MSA10564顯示。按照系統(tǒng)設(shè)計功能的要求,確定系統(tǒng)由3個模塊組成:主控制器、測溫電路和顯示電路。數(shù)字溫度計總體電路結(jié)構(gòu)框圖如圖下所示。
2 protel學(xué)習(xí)
2.1 學(xué)習(xí)簡介
(1)原理圖設(shè)計步驟
查找所需原理圖庫文件并加載;
繪制所需原件;
繪制原理圖;
注釋原理圖
(2)網(wǎng)絡(luò)表的生成
網(wǎng)絡(luò)報表由電路原理圖生成,它包含原理圖中元件的封裝信息,是電路原理圖設(shè)計和印制板設(shè)計之間的橋梁和紐帶。
(3)PCB設(shè)計步驟
設(shè)置PCB模板,放置安裝孔;
檢查網(wǎng)絡(luò)表,并導(dǎo)入;
對所有元件進(jìn)行布局;
按照元件的電氣連接進(jìn)行布線;
敷銅;
對整個PCB檢錯;
導(dǎo)出PCB文件,準(zhǔn)備制作
2.2 原理圖
2.3 PCB圖
3 硬件設(shè)計
3.1 最小系統(tǒng)電路
單片機最小系統(tǒng)板是散件由我們自己焊接的,如下圖:
a、單片機控制模塊
該模塊由AT89C51單片機組成在設(shè)計方面,AT89C51的EA接高電平,其外圍電路提供能使之工作的晶振脈沖、復(fù)位按鍵,四個I/O分別接8路的單列IP座方便與外圍設(shè)備連接。 當(dāng)AT89C51芯片接到來自溫度傳感器的信號時,其內(nèi)部程序?qū)⒏鶕?jù)信號的類型進(jìn)行處理,并且將處理的結(jié)果送到顯示模塊,發(fā)送控制信號控制各模塊。
b、溫度傳感器模塊
DS18B20相關(guān)資料
DS18B20原理與分析
DS18B20是美國DALLAS半導(dǎo)體公司繼DS1820之后最新推出的一種改進(jìn)型智能溫度傳感器。與傳統(tǒng)的熱敏電阻相比,它能夠直接讀出被測溫度并且可根據(jù)實際要求通過簡單的編程實現(xiàn)9~12位的數(shù)字值讀數(shù)方式。可以分別在93.75 ms和750ms內(nèi)完成9位和12位的數(shù)字量,并且從DS18B20讀出的信息或?qū)懭隓S18B20的信息僅需要一根口線(單線接口)讀寫,溫度變換功率來源于數(shù)據(jù)總線,總線本身也可以向所掛接的DS18B20供電,而無需額外電源。因而使用DS18B20可使系統(tǒng)結(jié)構(gòu)更趨簡單,可靠性更高。他在測溫精度、轉(zhuǎn)換時間、傳輸距離、分辨率等方面較DS1820有了很大的改進(jìn),給用戶帶來了更方便的使用和更令人滿意的效果。 以下是DS18B20的特點:
(1)獨特的單線接口方式:DS18B20與微處理器連接時僅需要一條口線即可實現(xiàn)微處理器與DS18B20的雙向通訊。
(2)在使用中不需要任何外圍元件。
(3)可用數(shù)據(jù)線供電,電壓范圍:+3.0~ +5.5 V。
(4)測溫范圍:-55 - +125 ℃。固有測溫分辨率為0.5 ℃。
(5)通過編程可實現(xiàn)9-12位的數(shù)字讀數(shù)方式。
(6)用戶可自設(shè)定非易失性的報警上下限值。
(7)支持多點組網(wǎng)功能,多個DS18B20可以并聯(lián)在惟一的三線上,實現(xiàn)多點測溫。
(8)負(fù)壓特性,電源極性接反時,溫度計不會因發(fā)熱而燒毀,但不能正常工作。
3.2 數(shù)碼管顯示電路
市面上的四位一體數(shù)碼管一般都沒有固定的段碼表,所以掌握它們管腳的分布是很重要的一個環(huán)節(jié)。
四位一體數(shù)碼管,其內(nèi)部段已連接好,數(shù)碼管的使用中還需注意以下幾個問題:
(1)數(shù)碼管使用時的電流與電壓。
①電流:靜態(tài)時,推薦使用10~15mA;動態(tài)時,16/1動態(tài)掃描時,平均電流為.4—5mA,峰值電流為50~60mA。
②電壓:查引腳排布圖,看一下每段的芯片數(shù)量是多少?當(dāng)紅色時,使用1.9V乘以每段的芯片串聯(lián)的個數(shù);當(dāng)綠色時,使用2.1V乘以每段的芯片串聯(lián)的個數(shù)。
(2)顯示效果。
由于發(fā)光二極管基本上屬于電流敏感器件,其正向壓降的分散性很大,并且還與溫度有關(guān),為了保證數(shù)碼管具有良好的亮度均勻度,就需要使其具有恒定的工作電流,且不能受溫度及其他因素的影響。另外,當(dāng)溫度變化時驅(qū)動芯片還要能夠自動調(diào)節(jié)輸出電流的大小以實現(xiàn)色差平衡溫度補償。
3.3 溫度采集電路
DS18B20有三個引腳,VCC、DQ、GND。分別接高電平、輸出引腳和接地。
3.4 電路焊接
電路焊接尤其要注意數(shù)碼管的引腳,還有三極管以及DS18B20的接法。
4 軟件設(shè)計
4.1 總體設(shè)計
系統(tǒng)程序主要包括主程序、讀出溫度子程序、溫度轉(zhuǎn)換子程序、計算溫度子程序、顯示等等。
4.2 溫度采集子程序
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
dsdelay(5);
DQ = 1;
dat>>=1;
}
dsdelay(4);}//讀取溫度
void ReadTemperature(void)
{
Init_DS18B20();
WriteOneChar(0xCC); // 跳過讀序號列號的操作
WriteOneChar(0x44); // 啟動溫度轉(zhuǎn)換
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度
TMPL=ReadOneChar();
TMPH=ReadOneChar();
temp= ((TMPL>>4 | TMPH<<4)) +((TMPL&0x0F)*0.0625);}
4.3 數(shù)碼顯示子程序
{ ReadTemperature();
A1=temp%100/10;
A2=temp%10;
LED=0xff;
LED=table[A2];
led3=0;
led4=1;
delay_nms(5);
LED=0xff;
LED=table[A1];
led3=1;
led4=0;
delay_nms(5); }
4.4 PROTUES仿真
4.5 硬件調(diào)試
硬件調(diào)試是件很艱辛的過程,遇到的問題很多。比如焊接過程中DS18B20組件被高溫燙壞,導(dǎo)致調(diào)試是檢測不到信號數(shù)碼管數(shù)字不變,更換后由于沒注意區(qū)分DS18B20的引腳導(dǎo)致引腳接錯,直接導(dǎo)致組件功能異常。調(diào)試過程中數(shù)碼管示數(shù)變化緩慢,后來更改延時程序得以解決。
參考文獻(xiàn)
【1】梁森,歐陽三泰,王侃夫. 自動檢測技術(shù)及應(yīng)用【M】.北京:機械工業(yè)出版社.
【2】萬隆.單片機原理及應(yīng)用技術(shù)教程 清華大學(xué)出版社.
【3】李朝青.單片機原理及接口技術(shù)(簡明修訂版).杭州:北京航空航天大學(xué)出版社,
【4】李廣弟.單片機基礎(chǔ)[M].北京:北京航空航天大學(xué)出版社.
【5】 康華光.數(shù)字電子技術(shù)基礎(chǔ)(第四版). 北京:高等教育出版社.
附錄
總程序
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define LED P2
sbit DQ=P1^3;
sbit led1=P3^0;
sbit led2=P3^1;
sbit led3=P3^2;
sbit led4=P3^3;
ucharcode table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned charTMPH,TMPL,temp; //溫度值
uchar A1,A2;
//延時函數(shù)
void dsdelay(unsigned int i)
{
while(i--);
}
void delay_nms(uchar n)
{
uchar i,j,k;
for(k=0;k<n;k++)
{
for(j=0;j<15;j++)
{
for(i=0;i<21;i++)
{;}
}
}
}
//初始化函數(shù)
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ復(fù)位
dsdelay(8); //稍做延時
DQ = 0; //單片機將DQ拉低
dsdelay(80); //精確延時 大于 480us
DQ = 1; //拉高總線
dsdelay(14);
x=DQ; //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗
dsdelay(20);
}
//讀一個字節(jié)
unsigned charReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 給脈沖信號
dat>>=1;
DQ = 1; // 給脈沖信號
if(DQ)
dat|=0x80;
dsdelay(4);
}
return(dat);
}
//寫一個字節(jié)
void WriteOneChar(unsignedchar dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
dsdelay(5);
DQ = 1;
dat>>=1;
}
dsdelay(4);
}
//讀取溫度
void ReadTemperature(void)
{
Init_DS18B20();
WriteOneChar(0xCC); // 跳過讀序號列號的操作
WriteOneChar(0x44); // 啟動溫度轉(zhuǎn)換
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器)前兩個就是溫度
TMPL=ReadOneChar();
TMPH=ReadOneChar();
temp= ((TMPL>>4 | TMPH<<4)) + ((TMPL&0x0F)*0.0625);
}
void main()
{
led1=0;
led2=0;
led3=0;
led4=0;
while(1)
{
ReadTemperature();
A1=temp%100/10;
A2=temp%10;
LED=0xff;
LED=table[A2];
led3=0;
led4=1;
delay_nms(5);
LED=0xff;
LED=table[A1];
led3=1;
led4=0;
delay_nms(5);
}
}
|
|