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