系統調試及結果 
六、總結 通過本次課設,了解了好多知識,首先,對于思路上來說,首先要確定方案,這次課設從起初選擇DS18B20不能夠精確地測量人體體溫,聽從老師的建議后,改用熱敏電阻,經過查資料后,選擇了幾種方案,一個是利用橋式電路測輸出電壓,還有就是用串聯分壓進行測量。因為橋式電路沒有很好的測量出,所以本系統使用串聯分壓式。其次,做課設要靠自己的努力去完成,不能靠其他人,或者走捷徑。本人就是通過查找資料自己確定一個方向,通過同學的指導,完成了軟件部分的編程。最后,經過自己的努力以及別人的幫助,我成功地做出了數字體溫計的實物,并用它測出了人體指尖的溫度,誤差也在允許的范圍之內。 總之,這次的單片機課程的設計,在一次一次地查找資料過程中讓我再一次了解單片機的工作原理,增加了自己的知識面,對今后的學習生活有很大的幫助。 附錄一: 電路圖 
附錄二 實物圖  引言
隨著以知識經濟為特征的信息化時代的到來人們對儀器儀表的認識更加深入,溫度作為一個重要的物理量,是工業生產過程中最普遍,最重要的工藝參數之一。隨著工業的不斷發展,對溫度的測量的要求也越來越高,而且測量的范圍也越來越廣,對溫度的檢測技術的要求也越來越高,因此,溫度測量及其測量技術的研究也是一個很重要的課題。
目錄
方案的選擇1
1.1方案一1
1.2方案二1
硬件電路簡介2
2.1AT89C51簡介2
ADC0809簡介5
2.3 LCD1602簡介8
軟件設計11
3.1 主程序流程圖11
3.2 部分程序11
四、硬件電路圖12
4.1 溫度檢測原理12
4.2 A/D轉換部分硬件電路圖13
4.3 顯示部分硬件電路圖14
五、系統調試及結果14
六、總結15
附錄一16
附錄二17
附錄三17
一、方案的選擇
1.1方案一
本方案主要是在溫度檢測部分利用了一款新型的溫度檢測芯片DS18B20,這個芯片大大簡化了溫度檢測模塊的設計,它無需A/D轉換,可直接將測得的溫度值以二進制形式輸出。該方案的原理框圖如圖1.1和所示:
圖1.1 方案(一)系統結構框圖
DS18B20是美國達拉斯半導體公司生產的新型溫度檢測器件,它是單片結構,無需外加A/D即可輸出數字量,通訊采用單線制,同時該通訊線還可兼作電源線,即具有寄生電源模式。它具有體積小、精度易保證、無需標定等特點,特別適合與單片機合用構成智能溫度檢測及控制系統。
1.2 方案二
溫度檢測部分采用傳統的熱敏電阻,熱敏電阻的阻值隨環境溫度變化而變化,經A/D轉換器ADC0809將其轉換為單片機可識別得二進制數字量,單片機主要控制LCD顯示器顯示正確的溫度值,LCD顯示器實現顯示功能。原理框圖如圖1.2所示
圖1.2 方案二系統結構圖
方案(二)與方案(一)相比,它最大的特點就是它能檢測的溫度范圍很大,熱敏電阻的性能決定了整個設計的所能檢測的溫度范圍。方案(一)的溫度檢測范圍已經由系統中的DS18B20的特性所決定,它能檢測的溫度范圍為-55℃到120℃,且誤差在0.5℃,其溫度檢測范圍很寬,已能足夠滿足一般測量需要,從整體上來看方案(二)比方案(一)更具有實際的鍛煉意義,因為我們方案(一)是利用現有的智能溫度傳感芯片DS18B20,他無需A/D轉換,直接輸出數字量,所以本設計中所使用的溫度測量電路是方案(二)的電路。
2.2 ADC0809介紹 ADC0809是8位逐次逼近式ADC轉換器,它能分時地對8路模擬量信號進行AD轉換,結果為8位二進制數據。 ADC0809的主要功能如下: - 分辨率為8位
- 總的不可調誤差在±1/2LSB和1LSB范圍內
- 典型轉換時間為100μs
- 具有鎖存控制的8路多路開關
- 具有三態緩沖輸出控制
- 單一+5V供電,此時輸入范圍為0~+5V
- 輸出與TTL兼容
- 工作溫度范圍-40~85℃
ADC0809的引腳功能: 引腳圖如圖2.2 (1)8路模擬電壓輸入線(共8根):IN7~IN0:用于輸入被轉換的模擬電壓。 (2)地址輸入和控制線(共4根):C、B、A:3根地址線,與ALE配合使用可控制8路模擬開關工作,達到選擇模擬量輸入通道的作用。 ALE:地址鎖存允許輸入線,高電平有效。當ALE線為高電平時,C、B、A這三條地址線上的地址信號得以鎖存。 (3)數字量輸出及控制線(共11根):START:“啟動脈沖”輸入線,該線上的正脈沖由CPU送來,寬度應大于100ns,上升沿清零SAR,下降沿啟動ADC工作。 EOC:轉換結束輸出線,該線上的高電平表示AD轉換已經結束,數字量已鎖入“三態輸出鎖存器”。 D7~D0:數字量輸出線,共8根。D7為最高位。 OE:“輸出允許”線,高電平時能使用D7~D0引腳上輸出轉換后的數字量。 (4)電源線及其他(5根):CLOCK:時鐘輸入線,用于為ADC0809提供逐次比較所需640kHz時鐘脈沖序列。 Vcc:+5V正電源電壓輸入線。 GND:地線。
圖2.2 ADC0809引腳圖 ADC0809真值表如表1: 表1 ADC0809真值表 2.3 LCD1602簡介 LCD1602是一種專門用來顯示字母、數字、符號等的點陣型液晶模塊,每行顯示16個字符,一共可顯示兩行。它的溫度范圍很窄,通常為0~+55℃,存儲范圍為-22~+60℃。引腳圖如圖2.3 
圖2.3 LCD1602引腳圖 顯示容量:16×2個字符。 工作電壓:4.5~5.5V。 模塊最佳工作電壓:5.0V。 字符尺寸:2.95㎜×4.35㎜(W×H)。 (2)引腳功能 1腳:Vss,電源地。 2腳:Vᴅᴅ,電源正極。 3腳:Vᴇᴇ,液晶顯示器對比度調整端,接正電源時,對比度最弱,接地時對比度最高。對比度過高會會產生“鬼影”,使用時,可通過一個10kΩ的電位器調整度。 4腳:RS,數據/命令選擇端,高電平時選擇數據寄存器,低電平時,選擇指令寄存器。 5腳:R/ ,讀寫信號線。高電平時進行讀操作,低電平時進行寫操作。4、5腳合作完成的功能如表2: 表2 4、5引腳合作功能表 | R/ (5) | | | | | | | | | | | | | |
6腳:E,使能端。當E端為下降沿(高電平變成低電平)時,液晶模塊寫指令或寫數據;當E為高電平時,為讀狀態或讀數據。4~6腳共同合作實現的功能如表3: 表3 4~6引腳合作功能表 | R/ (5) | | | | | | | | | | | | | | | | | | |
7~14腳:DB0~DB7,8位雙向數據線。 15腳:背光源正極。 16腳:背光源負極。 (3)RAM和ROM以及地址映射 DDRAM就是顯示數據RAM,用來寄存待顯示的字符代碼,共80個字節,這80個字節的地址為00H~27H和40H~67H,每一個地址內可以裝載一個待顯示的字符代碼。 DDRAM中80個字節地址與屏幕的對應關系如下: DDRAM字節地址與1602液晶屏幕的對應關系如下: 三、軟件設計 3.1 主程序流程圖
四、硬件電路圖 4.1 溫度檢測原理 
本系統溫度部分硬件電路部分采用串聯分壓式電路,由圖可知所需測得溫度為25℃至45℃,在溫度為25℃時,熱敏電阻的阻值是100k,串聯一個50k的普通電阻進行分壓,可知 
由上式可知,當溫度變化時,阻值減小,輸出電壓Vo也會變化,所以A/D轉換后的值也會有所不同,利用查表法進行顯示,顯示出準確的溫度值。 可以根據熱敏電阻阻值和溫度的關系以及Vo和阻值的關系,事先制作一張Vo(V)~t(℃)的關系表,存入單片機內部ROM中,以便通過查表的方式根據電壓值得到溫度值。 
4.3顯示部分硬件電路圖 
單片機源程序如下:
- ;********************************************************************
- ; 基于AT89C51的數字體溫計
- ;********************************************************************
- SHIWEI EQU 32H;
- GEWEI EQU 33H;
- HUANCUN EQU 36H;
- CLOCK BIT P2.4;
- ST BIT P3.2;
- EOC BIT P3.1;
- D_A BIT P2.3;
- D_B BIT P2.2;
- D_C BIT P2.1;
- E BIT P2.7;
- RW BIT P2.5;
- RS BIT P2.6;
- ORG 0000H;
- LJMP START;
- ORG 000BH;
- LJMP INT_T0;
- ORG 0100H;
- ;***********主程序開始******************************************************
- START: LCALL LCDINIT;調用液晶顯示屏初始化程序
- LCALL TISHI1;
- LCALL TISHI2;
- ;*********************************************************************************
- ; 溫度部分
- ;*******************************************************************************
- BEGIN: MOV TMOD,#02H;
- MOV TH0,#236; 定時鐘頻位50khz
- MOV TL0,#236;
- MOV IE,#82H; 開T0中斷
- SETB TR0; 啟動定時器
- CLR D_A; AD0809選擇IN0通道
- CLR D_B;
- CLR D_C;
- WEN:
- CLR ST;
- SETB ST;
- CLR ST;啟動AD轉換
- JNB EOC,$; 等待轉換結束
- LCALL DELAY1S;
- ;*********查表法得到轉換值*********************************
- MOV HUANCUN,P1;
- MOV DPTR,#TAB1
- MOV A,HUANCUN
- MOVC A,@A+DPTR
- ;*********將查表得到的值轉換成BCD碼**********************
- MOV B,#10
- DIV AB
- MOV SHIWEI,A
- MOV GEWEI,B
- ;*********顯示整數部分的溫度值**************************
- XIANSHI: MOV A,#0C5H;
- LCALL WRC;
- NOP
- MOV R0,#32H; 顯示溫度的十位、個位
- WDA1: MOV A,@R0
- ADD A,#30H; 轉換成ASCII碼
- LCALL WRD; 寫數據
- INC R0;
- CJNE R0,#34H,WDA1; 判斷溫度是否顯示完
- ;*********顯示小數點***********************************************************
- DIAN: MOV A,#0C7H; 顯示小數點
- LCALL WRC;
- MOV A,#2EH;
- LCALL WRD;
- ;*********查表得小數部分得溫度值********************************************
- MOV DPTR,#TAB2
- MOV A,HUANCUN
- MOVC A,@A+DPTR
- ;*********將小數部分的值轉換成BCD碼**********************************************************************
- MOV B,#10
- DIV AB
- MOV SHIWEI,A
- MOV GEWEI,B
- ;**********顯示小數子程序********************
- XIANSHI1: MOV A,#0C8H;
- LCALL WRC;
- MOV R0,#32H; 顯示溫度的十位、個位
- WDA12: MOV A,@R0
- ADD A,#30H; 轉換成ASCII碼
- LCALL WRD; 寫數據
- INC R0;
- CJNE R0,#34H,WDA12; 判斷溫度是否顯示完
- ;*********顯示溫度符號*************************************************************************
- MOV A,#0CAH; 顯示溫度符號,設定顯示位置
- LCALL WRC; 寫入命令
- MOV A,#0DFH; “。”的 ASCII碼
- LCALL WRD; 寫數據
- MOV A,#43H; “C"的ASCII碼
- LCALL WRD; 寫數據
-
- LCALL DELAY1S;
- LCALL DELAY1S;
- LCALL DELAY1S;
- LCALL DELAY1S
- AJMP WEN
-
-
- ;*********溫度提示字符顯示**************************************************************
- TISHI2: MOV DPTR,#M_2; 指針指到顯示消息
- LINE12: MOV A,#0C0H; 設置LCD的第一行地址
- LCALL WRC; 寫入命令
- FILL12: CLR A; 輸入字符
- MOVC A,@A+DPTR; 由消息區取出字符
- CJNE A,#0,LC12; 判斷是否為結束碼
- JMP RET_END2 ;子程序返回
- LC12: LCALL WRD; 寫入數據
- INC DPTR; 指針加1
- JMP FILL1; 繼續填入字符
- RET_END2: RET
-
- TISHI1: MOV DPTR,#M_1; 指針指到顯示消息
- LINE11: MOV A,#80H; 設置LCD的第一行地址
- LCALL WRC; 寫入命令
- FILL1: CLR A; 輸入字符
- MOVC A,@A+DPTR; 由消息區取出字符
- CJNE A,#0,LC11; 判斷是否為結束碼
- JMP RET_END1 ;子程序返回
- LC11: LCALL WRD; 寫入數據
- INC DPTR; 指針加1
- JMP FILL1; 繼續填入字符
- RET_END1: RET
- M_2: DB "Temp:",0;
- M_1: DB "He Xing (^_^)",0;
- ;********液晶初始化子程序***************************
- LCDINIT: MOV A,#01H; 清屏
- LCALL WRC; 調用寫入命令子程序
- MOV A,#38H; 8位數據,2行,5*8點陣
- LCALL WRC;
- MOV A,#0CH; 開顯示和光標,字符不閃爍
- LCALL WRC;
- MOV A,#06H; 字符不動,光標自動右移1格
- LCALL WRC;
- RET;
- ;********忙檢查子程序************************
- CBUSY: PUSH ACC; 將A的值暫存于堆棧
- PUSH DPH; 將DPH的值暫存于堆棧
- PUSH DPL; 將DPL的值暫存于堆棧
- PUSH PSW; 將PSW的值暫存于堆棧
- WEIT:
- CLR RS; RS=0,選擇指令寄存器
- SETB RW; RW=1,選擇讀模式
- CLR E; E=0,禁止讀/寫LCD
- SETB E; E=1,允許讀/寫LCD
- NOP
- MOV A,P0; 讀操作
- CLR E; E=0,禁止讀/寫LCD
- JB ACC.7,WEIT; 忙碌循環等待
- POP PSW; 從堆棧中取回PSW的值
- POP DPL; 從堆棧中取回DPL的值
- POP DPH; 從堆棧中取回DPH的值
- POP ACC; 從堆棧中取回ACC的值
- LCALL DELAY; 延時
- RET;
- ;********寫子程序**************************
- WRC: LCALL CBUSY; 寫入命令子程序
- CLR E; E=0,禁止讀/寫LCD
- CLR RS; RS=0,選擇指令寄存器
- CLR RW; RW=0,選擇寫模
- SETB E; E=1,允許讀/寫LCD
- MOV P0,A; 寫操作
- CLR E; E=0,禁止讀/寫LCD
- LCALL DELAY; 延時
- RET
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載(word格式完整設計報告與源程序):
http://www.zg4o1577.cn/bbs/dpj-104106-1.html
|