基于STC89C52和DS18B20的溫度檢測裝置_第1頁
基于STC89C52和DS18B20的溫度檢測裝置_第2頁
基于STC89C52和DS18B20的溫度檢測裝置_第3頁
基于STC89C52和DS18B20的溫度檢測裝置_第4頁
基于STC89C52和DS18B20的溫度檢測裝置_第5頁
已閱讀5頁,還剩49頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、課程設(shè)計總結(jié)報告課程名稱 單片機應用系統(tǒng)設(shè)計 設(shè)計題目 基于STC89C52和DS18B20的溫度 檢測裝置專 業(yè) 電子信息工程 班 級 姓 名 學 號 指導教師 報告成績 信息與工程學院二一三年六月十九日13 / 54文檔可自由編輯打印單片機應用系統(tǒng)設(shè)計課程設(shè)計任務書一、課題名稱基于STC89C52和DS18B20的溫度檢測裝置二、設(shè)計任務1、.功能要求基本任務:(1) 采用STC89C52單片機(可選用其他89C51系列的單片機)和DS18B20溫度傳感器,1602字符液晶設(shè)計;(2) 根據(jù)數(shù)據(jù)手冊編程讀取DS18B20,用1602字符液晶顯示溫度(3) 通過4個鍵實現(xiàn)溫度上限和下限設(shè)置。

2、發(fā)揮任務:實現(xiàn)一個時鐘,顯示時,分秒,并可以設(shè)置時間。2. 、設(shè)計要求(1) 熟悉STC89C52單片機及其開發(fā)環(huán)境;熟悉匯編語言或C51程序設(shè)計;(2) 掌握STC89C52單片機最小系統(tǒng)、按鍵電路、字符液晶顯示電路的設(shè)計;掌握DS18B20編程方法,學會看數(shù)據(jù)手冊;掌握1602字符液晶編程方法;掌握單片機時鐘中斷的編程方法;熟悉項目設(shè)計流程;(3) 熟悉硬件軟件調(diào)試的方法;(4) 設(shè)計報告中詳細寫出硬件電路設(shè)計方案、畫出軟件流程圖并總結(jié)調(diào)試中遇到的問題及解決方法。三、設(shè)計報告撰寫規(guī)范單片微機應用系統(tǒng)設(shè)計總結(jié)報告正文,主要含以下內(nèi)容(硬件、軟件各部分內(nèi)容也可組合起來進行撰寫說明):1. 系統(tǒng)

3、總體設(shè)計方案(畫出系統(tǒng)原理框圖、方案的論證與比較等內(nèi)容);2. 硬件系統(tǒng)分析與設(shè)計(各模塊或單元電路的設(shè)計、工作原理闡述、參數(shù)計算、元器件選擇、完整的系統(tǒng)電路圖、系統(tǒng)所需的元器件清單。等內(nèi)容);3. 軟件系統(tǒng)分析與設(shè)計(各功能模塊的程序設(shè)計流程圖與說明、軟件系統(tǒng)設(shè)計、軟件抗干擾措施、完整的程序等內(nèi)容);4. 系統(tǒng)仿真調(diào)試與參數(shù)測量(使用儀器儀表、故障排除、電路硬件和軟件調(diào)試的方法和技巧、指標測試的參數(shù)和波形、測量誤差分析);5. 總結(jié)(本課題核心內(nèi)容及使用價值、電路設(shè)計、軟件設(shè)計的特點和選擇方案的優(yōu)缺點、改進方向和意見等);6. 按統(tǒng)一格式列出主要參考文獻?;赟TC89C52和DS18B20

4、的溫度檢測裝置課程設(shè)計總結(jié)報告一、系統(tǒng)總體方案 1.系統(tǒng)原理框圖 2. 方案工作過程的論述本設(shè)計是一款簡單實用的小型數(shù)字溫度計,所采用的主要元件有傳感器DS18B20,單片機STC89C52,LED1602字符液晶一個,電容電阻若干。傳感器采用美國DALLAS半導體公司生產(chǎn)的智能溫度傳感器DS18B20,支持“一線總線”接口,測量溫度范圍-55°C+125°C。在-10+85°C范圍內(nèi),精度為±0.5°C。最高分辯率可達0.0625?,F(xiàn)場溫度直接以“一線總線”的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場溫度測量,如:環(huán)境控制、

5、設(shè)備或過程控制、測溫類消費電子產(chǎn)品等。主控制器即單片機部分,用于存儲程序和控制電路;LED顯示部分是用1602字符液晶顯示溫度;傳感器部分,即溫度傳感器,用來采集溫度,進行溫度轉(zhuǎn)換;復位部分,即復位電路。測量的總過程是,傳感器采集到外部環(huán)境的溫度,并進行轉(zhuǎn)換后傳到單片機,經(jīng)過單片機處理判斷后將溫度傳遞到數(shù)碼管顯示。本設(shè)計能完成的溫度測量范圍是-55°C+128°C,精度為0.1°C,支持溫度正負提示,軟件預設(shè)上限溫度30°C,下限溫度20°C,并支持硬件手動配置溫度上下限,通過4個鍵實現(xiàn)溫度上限和下限設(shè)置,超過此上下限即實現(xiàn)報警功能。附加功能:

6、實現(xiàn)一個時鐘,顯示時、分、秒,并可以設(shè)置時間。3.整體設(shè)計電路圖 4.單片機的造型二、單片機概述根據(jù)老師提供的元器件清單,選擇采用STC89C52單片機進行使用。STC89C52介紹:STC89C52是STC公司生產(chǎn)的一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flash存儲器。STC89C52使用經(jīng)典的MCS-51內(nèi)核,但做了很多的改進使得芯片具有傳統(tǒng)51單片機不具備的功能。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應用系統(tǒng)提供高靈活、超有效的解決方案。 具有以下標準功能: 8k字節(jié)Flash,512字節(jié)RAM, 3

7、2 位I/O 口線,看門狗定時器,內(nèi)置4KB EEPROM,MAX810復位電路,3個16 位定時器/計數(shù)器,4個外部中斷,一個7向量4級中斷結(jié)構(gòu)(兼容傳統(tǒng)51的5向量2級中斷結(jié)構(gòu)),全雙工串行口。另外 STC89C52 可降至0Hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式。空閑模式下,CPU 停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機一切工作停止,直到下一個中斷或硬件復位為止。最高運作頻率35MHz,6T/12T可選。主要特點:1.8K字節(jié)程序存儲空間;2.512字節(jié)數(shù)據(jù)存儲空間;3.內(nèi)帶2K字節(jié)EEPROM存儲空間;4

8、.可直接使用串口下載;主要參數(shù):1. 增強型8051單片機,6 時鐘/機器周期和12 時鐘/機器周期可以任意 選擇,指令代碼完全兼容傳統(tǒng)8051.22. 工作電壓:5.5V3.3V(5V單片機)/3.8V2.0V(3V 單片機)3.工作頻率范圍:040MHz,相當于普通8051 的080MHz,實際工作 頻率可達48MHz4. 用戶應用程序空間為8K字節(jié)5. 片上集成512 字節(jié)RAM6. 通用I/O 口(32 個),復位后為:P0/P1/P2/P3 是準雙向口/弱上拉, P0 口是漏極開路輸出,作為總線擴展用時,不用加上拉電阻,作為 I/O 口用時,需加上拉電阻。7. ISP(在系統(tǒng)可編程)

9、/IAP(在應用可編程),無需專用編程器,無 需專用仿真器,可通過串口(RxD/P3.0,TxD/P3.1)直接下載用戶程 序,數(shù)秒即可完成一片8. 具有EEPROM 功能9. 共3 個16 位定時器/計數(shù)器。即定時器T0、T1、T210.外部中斷4 路,下降沿中斷或低電平觸發(fā)電路,Power Down 模式可 由外部中斷低電平觸發(fā)中斷方式喚醒11. 通用異步串行口(UART),還可用定時器軟件實現(xiàn)多個UART12. 工作溫度范圍:-40+85(工業(yè)級)/075(商業(yè)級)13. PDIP封裝P1口各個引腳的第二功能介紹: P3口的第二功能介紹:單片機的最小系統(tǒng)中還包含了復位電路和晶振電路。晶振

10、電路: 復位電路: 設(shè)計過程的注意點:1.考慮對速度的要求。單片機的運行速度首先看時鐘頻率,指令集,幾個時鐘為一個機器周期。在選用單片機時,要根據(jù)需要選擇速度,不要片面追求高速,單片機的穩(wěn)定性、抗干擾性的參數(shù)基本上跟速度成反比,另外速度越快功效也越大。2.考慮定時器/計數(shù)器的功能。大部分單片機提供了23個定時器/計數(shù)器,有些定時計數(shù)器還具有輸入捕獲、輸出比較和PWM(脈沖寬度調(diào)制)功能,利用這些模塊不僅可以簡化軟件設(shè)計,而且能少占用CPU的資源。現(xiàn)在還有不少單片機提供了看門狗定時器(WDT),當單片機“死機”后可以自動復位。選用時可根據(jù)自己的需要和編程要求進行選擇。3.考慮I/O口的驅(qū)動能力。

11、IO口的數(shù)量和功能是選用單片機時首先要考慮的問題之一,根據(jù)實際需要確定數(shù)量,IO多余不僅芯片的體積增大,也增加了成本。驅(qū)動電流大的單片機可以簡化外圍電路。51系列的單片機下拉(輸出低電平)時驅(qū)動電流大,但上拉(輸出高電平)時驅(qū)動電流很小。4.考慮工作電壓與功耗的要求。單片機的工作電壓最低可以達到1.8V,最高為6V,常見的是3V和5V。單片機的功耗參數(shù)主要是指正常模式、空閑模式、掉電模式下的工作電流,用電池供電的系統(tǒng)要選用電流小的產(chǎn)品,同時要考慮是否要用到單片機的掉電模式,如果要用的話必須選擇有相應功能的單片機。5.單片機的串行接口。單片機常見的串行接口有:標準UART接口、TWI通訊接口、增

12、強型UART接口、I2C總線接口、CAN總線接口、SPI接口、USB接口等。大部分單片機都提供了UART接口,也有部分單片機沒有串行接口。三、溫度檢測電路根據(jù)所提供的材料以及對電路的分析,決定采用DS18B20作為溫度檢測部分特點: DS18B20是DALLAS公司最新推出的單線數(shù)字溫度傳感器,新的“一線器件”體積更小、適用電壓更寬、更經(jīng)濟。 Dallas 半導體公司的數(shù)字化溫度傳感器DS1820是世界上第一片支持 “一線總線”接口的溫度傳感器。一線總線獨特而且經(jīng)濟的特點,使用戶可輕松地組建傳感器網(wǎng)絡(luò),為測量系統(tǒng)的構(gòu)建引入全新概念。DS18B20、 DS1822 “一線總線”數(shù)字化溫度傳感器,

13、測量溫度范圍為-55°C+125°C,在-10+85°C范圍內(nèi),精度為±0.5°C。DS1822的精度較差為± 2°C ?,F(xiàn)場溫度直接以“一線總線”的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場溫度測量,如:環(huán)境控制、設(shè)備或過程控制、測溫類消費電子產(chǎn)品等。與前一代產(chǎn)品不同,新的產(chǎn)品支持3V5.5V的電壓范圍,使系統(tǒng)設(shè)計更靈活、方便。而且新一代產(chǎn)品更便宜,體積更小。 DS18B20、 DS1822 的特性 DS18B20可以程序設(shè)定912位的分辨率,精度為±0.5°C??蛇x更小的封裝方式,更

14、寬的電壓適用范圍。分辨率設(shè)定,及用戶設(shè)定的報警溫度存儲在EEPROM中,掉電后依然保存。DS18B20的性能是新一代產(chǎn)品中最好的! 1). 只要求一個端口即可實現(xiàn)通信; 2). 在DS18B20中的每個器件上都有獨一無二的序列號; 3). 實際應用中不需要外部任何元器件即可實現(xiàn)測溫; 4). 測量溫度范圍在55。C到125。C之間; 5). 數(shù)字溫度計的分辨率用戶可以從9位到12位選擇; 6). 內(nèi)部有溫度上、下限告警設(shè)置; 溫度測量電路的框圖及其原理:低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號送給計數(shù)器1。高溫度系數(shù)晶振隨溫度變化其振蕩率明顯改變,所產(chǎn)生的信號作為計數(shù)

15、器沖輸入。計數(shù)器1和溫度寄存器被預置在5所對應的一個基數(shù)值。計數(shù)器1對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進行減法計數(shù),當計數(shù)器1的預置值減到0時,溫度寄存器的值將加1,計數(shù)器1的預置將重新被裝入,計數(shù)器1重新開始對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進行計數(shù),如此循環(huán)直到計數(shù)器2計數(shù)到0時,停止溫度寄存器值的累加,此時溫度寄存器中的數(shù)值即為所測溫度。圖中的斜率累加器用于補償和修正測溫過程中的非線性,其輸出用于修正計數(shù)器1的預置值。溫度采集讀寫時序圖: DS18B20電路圖: 讀出溫度子程序  讀出溫度子程序的主要功能是讀出RAM中的9字節(jié)。在讀出時須進行CRC校驗,校驗有錯時不進行溫度數(shù)

16、據(jù)的改寫。流程圖如下: 溫度轉(zhuǎn)換命令子程序  溫度轉(zhuǎn)換命令子程序主要是發(fā)溫度轉(zhuǎn)換開始命令。當采用12位分辨率時,轉(zhuǎn)換時間約為750ms。在本程序設(shè)計中,采用1s顯示程序延時法等待轉(zhuǎn)換的完成。 流程圖如下: DS18B20溫度采集、轉(zhuǎn)換程序:#include <reg52.h>#include "intrins.h"#include"DS18B20.H"#define uchar unsigned char#define uint unsigned intsbit DS=P10; /定義接口uint temp; /溫度變量u

17、char flag1; /接收標志位extern delay_nms(uint nms);/*/功能:串行口初始化,波特率9600,方式1void Init_Com(void) TMOD = 0x20; /設(shè)定T1定時器的工作方式2 PCON = 0x00; /波特率不加倍 TH1 = 0xFd; /T1定時器裝初值 TL1 = 0xFd; TR1 = 1; /啟動T1定時器 REN=1; /允許接受串行口 SM0=0; /設(shè)定串口工作方式1 即8位異步通訊 SM1=1; tmpchange(); /讀一次溫度,防止運行程序時讀出85攝氏度 delay_nms(400); /85度不顯示(用延

18、時跳過)/*/DS18B20復位,初始化函數(shù)void dsreset(void) uint i; DS=0; /數(shù)據(jù)線拉到低電平0 i=103; /延時850us(該時間范圍可以在480960us) while(i>0) i-; DS=1; /數(shù)據(jù)線拉到高電平1 i=4; /延時等待(如果初始化成功則在1560ms內(nèi)產(chǎn)生一個由DS18B20返回的低電平0,據(jù)該狀態(tài)可以確定它的存在) while(i>0) i-; /*/讀1位數(shù)據(jù)函數(shù)bit tmpreadbit(void) uint i; bit dat; /設(shè)置一位數(shù)據(jù) DS=0; i+; /i+ 起延時作用 DS=1; i+;i

19、+; dat=DS; i=8;while(i>0)i-; return (dat);/*/讀1字節(jié)函數(shù)uchar tmpread(void) uchar i,j,dat; dat=0; for(i=1;i<=8;i+) j=tmpreadbit(); dat=(j<<7)|(dat>>1); /讀出的數(shù)據(jù)最低位在最前面,這樣剛好一個字節(jié)在DAT里 return(dat);/*/向DS18B20寫一個字節(jié)數(shù)據(jù)函數(shù)void tmpwritebyte(uchar dat) uint i; uchar j; bit testb; for(j=1;j<=8;j+

20、) testb=dat&0x01; dat=dat>>1; if(testb) /寫 1 DS=0; i+;i+; DS=1; i=8;while(i>0)i-; else DS=0; /寫 0 i=8;while(i>0)i-; DS=1; i+;i+; void tmpchange(void) /DS18B20 開始獲取數(shù)據(jù)并轉(zhuǎn)換 dsreset(); delay_nms(1); tmpwritebyte(0xcc); /寫跳過讀ROM指令 tmpwritebyte(0x44); /寫溫度轉(zhuǎn)換指令 void tmp() /讀取寄存器中存儲的溫度數(shù)據(jù) floa

21、t tt; uchar a,b; dsreset(); delay_nms(1); tmpwritebyte(0xcc); tmpwritebyte(0xbe); a=tmpread(); /讀低8位 b=tmpread(); /讀高8位 temp=b; temp<<=8; /兩個字節(jié)組合為1個字 temp=temp|a; tt=temp*0.0625; /溫度在寄存器中是12位,分辨率是0.0625 temp=tt*10+0.5; /乘以10表示小數(shù)點后只取1位,加0.5是四折五入四顯示電路一般顯示電路概述、用到的電路圖、硬件電路注意的問題、程序流程、編程注意點根據(jù)所提供的材料以

22、及對電路的分析,決定采用LCD1602作為顯示部分實物圖如下: LCD1602的介紹:1602液晶也叫1602字符型液晶,它是一種專門用來顯示字母、數(shù)字、符號等的點陣型液晶模塊。它由若干個5X7或者5X11等點陣字符位組成,每個點陣字符位都可以顯示一個字符,每位之間有一個點距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因為如此所以它不能很好地顯示圖形。1602LCD是指顯示的內(nèi)容為16X2,即可以顯示兩行,每行16個字符液晶模塊(顯示字符和數(shù)字)。市面上字符液晶大多數(shù)是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780寫的控制程序可以很方便地應用于市面上大

23、部分的字符型液晶。根據(jù)電路的要求,分析之后各個引腳的所接位置:第1腳:VSS為電源地第2腳:VCC接5V電源正極第3腳:V0為液晶顯示器對比度調(diào)整端,使用時可以通過一個103電位器調(diào)整對比度。第4腳:RS為寄存器選擇,高電平1時選擇數(shù)據(jù)寄存器、低電平0時選擇指令寄存器。在電路中接P26。第5腳:RW為讀寫信號線,高電平(1)時進行讀操作,低電平(0)時進行寫操作。根據(jù)電路程序的分析,直接接地。第6腳:E(或EN)端為使能(enable)端,高電平(1)時讀取信息,負跳變時執(zhí)行指令。此處接到P25。第714腳:D0D7為8位雙向數(shù)據(jù)端。從P00到P07接口。第1516腳:空腳或背燈電源。15腳背

24、光正極,16腳背光負極。相應所得到的電路圖: 在顯示電路焊接過程中,硬件需要注意的問題:在硬件焊接一開始,首先要考慮好元器件的安放位置,使得整體的布局盡可能的達到美觀,由于lcd1602有16個引腳,必須要了解各個引腳的具體功能,記住各個引腳所接的對應單片機的位置。尤其是4,5,6這三個位置的引腳,對于lcd1602具有較為重要的作用,因而必須仔細焊接,避免焊接錯誤,或者是看錯。另外,在焊接的時候也要注意小心焊接,避免燒壞顯示,導致顯示出現(xiàn)問題。程序流程圖: 編寫程序:#include "reg52.h"#include "intrins.h"#incl

25、ude "1602.h"#define uchar unsigned char#define uint unsigned int/*/液晶位定義sbit LCD_EN = P26;sbit RS = P27;/*/一毫秒延時函數(shù)void delay_nms(uint nms) uint i,j; for(i = nms;i>0;i-) for(j = 90;j>0;j-) _nop_ (); _nop_ (); _nop_ (); /*/函數(shù)功能:向1602寫入指令(選擇位置)void write_com(uchar com) RS = 0; /選擇寫命令模式

26、(RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。) P0 = com; /將要寫的命令字送到數(shù)據(jù)總線上 LCD_EN = 0; /E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令 delay_nms(1); /稍作延時以待數(shù)據(jù)穩(wěn)定 LCD_EN = 1; /使能端給一個高脈沖 delay_nms(1); /稍作延時 LCD_EN = 0; /將使能端置0以完成高脈沖/*/函數(shù)功能:向1602寫入數(shù)據(jù)void write_date(uchar date) RS = 1; /選擇寫命令模式 (高電平時選擇數(shù)據(jù)寄存器) LCD_EN = 0; P0 = date; d

27、elay_nms(1); LCD_EN = 1; delay_nms(1); LCD_EN = 0;/*/定行定列顯示數(shù)組void write_stringtable(uchar h,uchar l,uchar *s) if(h = 0) /確定第幾行 h = 0x80; /第一行的第一個地址 else h = 0xc0; /第二行的第一個地址 h = h+l; /行(列)加? write_com(h); /寫一個字符地址 while(*s) /顯示字符串 write_date(*s); s+; /*/1602初始化void LCD_Initial() write_com(0x38); /設(shè)置

28、16*2顯示,5*7點陣,8位數(shù)據(jù)接口delay_nms(1);write_com(0x0c); /設(shè)置開顯示,不顯示光標delay_nms(1);write_com(0x06); /寫一個字符地址指針自動加1delay_nms(1);write_com(0x01); /顯示清0,數(shù)據(jù)指針清0delay_nms(1); 5、 鍵盤電路鍵盤掃描概述:首先,確定鍵盤編碼方案:采用編碼鍵盤或非編碼鍵盤。隨后,確定鍵盤工作方式:采用中斷或查詢方式輸入鍵操作信息。然后,設(shè)計硬件電路。非編碼鍵盤系統(tǒng)中,鍵閉合和鍵釋放的信息的獲取,鍵抖動的消除,鍵值查找及一些保護措施的實施等任務,均由軟件來完成。 1.監(jiān)測

29、有無鍵按下;鍵的閉合與否,反映在電壓上就是呈現(xiàn)出高電平或低電平,所以通過電平的高低狀態(tài)的檢測,便可確認按鍵按下與否。      2.判斷是哪個鍵按下。一.編程掃描方式:當單片機空閑時,才調(diào)用鍵盤掃描子程序,反復的掃描鍵盤,等待用戶從鍵盤上輸入命令或數(shù)據(jù),來響應鍵盤的輸入請求。二.定時掃描工作方式:單片機對鍵盤的掃描也可用定時掃描方式,即每隔一定的時間對鍵盤掃描一次。三.中斷工作方式:只有在鍵盤有鍵按下時,才執(zhí)行鍵盤掃描程序并執(zhí)行該按鍵功能程序,如果無鍵按下,單片機將不理睬鍵盤      3.完成

30、鍵處理任務。(二)從電路或軟件的角度應解決的問題1.消除抖動影響。鍵盤按鍵所用開關(guān)為機械彈性開關(guān),利用了機械觸點的合、斷作用。由于機械觸點的的彈性作用,一個按鍵開關(guān)在閉合和斷開的瞬間均有一連串的抖動、抖動時間的長短由按鍵的機械特性決定,一般為510ms,這是一個很重要的參數(shù)。抖動過程引起電平信號的波動,有可能令CPU誤解為多次按鍵操作,從而引起誤處理。為了確保CPU對一次按鍵動作只確認一次按鍵,必須消除抖動的影響。按鍵的消抖,通常有軟件,硬件兩種消除方法。      這種方法只適用于鍵的數(shù)目較少的情況。軟件消抖:如果按鍵較多,硬件消抖將無法勝任

31、,常采用軟件消抖。通常采用軟件延時的方法:在第一次檢測到有鍵按下時,執(zhí)行一段延時10ms的子程序后,再確認電平是否仍保持閉合狀態(tài)電平,如果保持閉合狀態(tài)電平,則確認真正有鍵按下,進行相應處理工作,消除了抖動的影響。(這種消除抖動影響的軟件措施是切實可行的。)2.采取串鍵保護措施。串鍵:是指同時有一個以上的鍵按下,串鍵會引起CPU錯誤響應。通常采取的策略:單鍵按下有效,多鍵同時按下無效。      3.處理連擊。連擊:是一次按鍵產(chǎn)生多次擊鍵的效果。要有對按鍵釋放的處理,為了消除連擊,使得一次按鍵只產(chǎn)生一次鍵功能的執(zhí)行(不管一次按鍵持續(xù)的時間多長,僅

32、采樣一個數(shù)據(jù))。否則的話,鍵功能程序的執(zhí)行次數(shù)將是不可預知,由按鍵時間決定。連擊是可以利用的。連擊對于用計數(shù)法設(shè)計的多功能鍵特別有效。 按鍵電路圖: 程序流程圖: 六、串口電路MAX232電平轉(zhuǎn)換、串口的硬件電路圖和串口的程序下載功能MAX232電平轉(zhuǎn)換:MAX232芯片是美信公司專門為電腦的RS-232標準串口設(shè)計的接口電路,使用+5v單電源供電。內(nèi)部結(jié)構(gòu)基本可分三個部分:第一部分是電荷泵電路。由1、2、3、4、5、6腳和4只電容構(gòu)成。功能是產(chǎn)生+12v和-12v兩個電源,提供給RS-232串口電平的需要。第二部分是數(shù)據(jù)轉(zhuǎn)換通道。由7、8、9、10、11、12、13、14腳構(gòu)成兩個數(shù)據(jù)通道。

33、其中13腳(R1IN)、12腳(R1OUT)、11腳(T1IN)、14腳(T1OUT)為第一數(shù)據(jù)通道。8腳(R2IN)、9腳(R2OUT)、10腳(T2IN)、7腳(T2OUT)為第二數(shù)據(jù)通道。TTL/CMOS數(shù)據(jù)從T1IN、T2IN輸入轉(zhuǎn)換成RS-232數(shù)據(jù)從T1OUT、T2OUT送到電腦DP9插頭;DP9插頭的RS-232數(shù)據(jù)從R1IN、R2IN輸入轉(zhuǎn)換成TTL/CMOS數(shù)據(jù)后從R1OUT、R2OUT輸出。第三部分是供電。15腳DNG、16腳VCC(+5v)。STC89C52RC是宏晶公司的產(chǎn)品 一個8位單片機,232在單片機上用作下載程序和電平轉(zhuǎn)換,STC89C52RC就是控制器相當于人

34、的大腦。串口硬件電路圖:串口的程序下載功能: 先等待ISP提示MCU上電,然后再開啟單片機電源,這時可能也不能連上,然后再關(guān)閉開啟一次電源,這時就可以讀出晶振頻率,如果還是不能連上,再重復以上步驟,亦或是改變波特率(11.0592用19200成功率較大)。七、系統(tǒng)調(diào)試硬件調(diào)試比較簡單,首先采用PROTELSE99軟件繪制原理圖,并進行了仿真,確認無誤的情況下將圖紙打印出來,以便電路的排布。由于前期對電路的分析不夠徹底,導致電路圖排版存在缺陷,最后導致焊接過程中出現(xiàn)很多差錯,也貽誤了許多的時間。焊接完畢,開始調(diào)試硬件,先按要求接入正5伏的電壓,發(fā)現(xiàn)蜂鳴器會響,但是燈沒有亮,先檢查了下線路,發(fā)現(xiàn)無

35、誤,后檢查了三極管,也沒有發(fā)現(xiàn)燒壞,最后通過理論的計算,發(fā)現(xiàn)是與燈串聯(lián)的電阻阻值不夠,換了一個較大的電阻之后,燈泡亮了。然后是對串口電路進行檢查,第一次發(fā)現(xiàn)程序始終無法寫入單片機,經(jīng)過仔細檢查,發(fā)現(xiàn)是串口線路接錯,重新修改之后,程序順利寫入。軟件調(diào)試在編寫顯示程序并進行硬件的正確性檢驗之后進行,分別進行主程序、讀出溫度子程序、溫度轉(zhuǎn)換命令子程序、計算溫度子程序和顯示子程序等的編程及調(diào)試。由于DS18B20與單片機采用串行數(shù)據(jù)傳送,因此,對DS18B20進行讀/寫編程時必須嚴格地保證讀/寫時序;否則將無法讀取測量結(jié)果。本程序采用單片機c語言編寫用Keil編譯器編程調(diào)試。軟件調(diào)試到能顯示溫度值,并

36、且在有溫度變化時顯示溫度能改變,溫度的上下限可以設(shè)置,同時添加了附加功能,手動調(diào)整時間值,就基本完成。 8、 總結(jié)本次的設(shè)計使我們進一步鞏固了書本上的知識,做到了學以致用。這是我們第二次自己動手設(shè)計的電路,通過電路圖繪制軟件protel,系統(tǒng)仿真軟件protues和編譯軟件keil,使我們進一步了解了單片機的設(shè)計制作過程,其中最為困難的是軟件部分,即編程部分,我們上網(wǎng)找了好多資料,最終借助同學的幫助,經(jīng)過自己的修改,基本上完成了功能,但還是有部分功能不能實現(xiàn),最主要的溫度顯示始終存在問題。另外,對于程序中關(guān)于溫度轉(zhuǎn)換部分不清楚,在老師提問時沒有辦法進行回答解釋。而在焊接硬件時也遇到了

37、不少麻煩,如液晶顯示引腳的對應焊接,max232的焊接,三極管的的極性識讀等。總結(jié)經(jīng)驗的時候我們得出這樣的結(jié)論,學習應該學以致用,有目的的去學習,如果學了不用等于沒學。其次,要學以致用,理論聯(lián)系實際,這樣才會取得事半功倍的效果。 主要參考文獻:1 周立功.ARM&WinCE實踐與實驗:基于S3C2410M北京:北京航空航天大學出版社,2007.2 李朝青.PC機及單片機數(shù)據(jù)通信技術(shù)M.北京:北京航空航天大學出版社,20003 馬春華,于莉莉.SMS方式遠程監(jiān)控軟件的設(shè)計與實現(xiàn)J.廣東通信技術(shù),2003,23 .附錄:/頭文件#include <AT89X51.h>#incl

38、ude <string.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit beep=P24;uchar keep=0;uint disdata18;uint t_value,tflag;uchar code str1="temperature: "#defineNONE_KEY_CODE 0X0f#defineMODE_KEY_CODE 0X0e#defineINC_KEY_CODE 0X0d#defineDEC_KEY_CODE 0X0b#d

39、efineSET_KEY_CODE 0X07uint keyvalue2;uchar basetime,mode,flag,SET_mode,SET_flag; char timebuf5;uint funcode,key_timing,time;uchar TH=30,TL=20;/*#define lcd1602_Bus P0 /lcd1602定義sbit lcd1602_en=P25;sbit lcd1602_rs=P26; /*sbitDS= P2 0; /ds18B20定義/*ds18b20*void ds18b20_delay(unsigned int nus) while(nus

40、-); /延時微秒/*void DS18B20_initial(void) /初始化ds1820unsigned char x=0;DS = 1; /DQ復位ds18b20_delay(8); /稍做延時DS = 0; /單片機將DQ拉低ds18b20_delay(80); /精確延時 大于 480usDS = 1; /拉高總線ds18b20_delay(14);x=DS; /稍做延時后 如果x=0則初始化成功 x=1則初始化失敗ds18b20_delay(20);/*unsigned char Readchar(void) /讀一個字節(jié)unsigned char i=0;unsigned c

41、har dat = 0;for (i=8;i>0;i-)DS = 0; / 給脈沖信號,讀起始dat>>=1; /低位開始接收DS = 1; / 給脈沖信號if(DS) /若讀出1dat|=0x80;ds18b20_delay(4);return(dat);/*void Writechar(unsigned char dat) /寫一個字節(jié)unsigned char i=0;for (i=8; i>0; i-)DS = 0;DS = dat&0x01;ds18b20_delay(5);DS = 1;dat>>=1;/*unsigned int rea

42、dtemp(void) /讀取溫度 unsigned char a=0;unsigned char b=0;unsigned int t_value=0;float tt_value=0;DS18B20_initial();Writechar(0xCC); / 跳過讀序號列號的操作Writechar(0x44); / 啟動溫度轉(zhuǎn)換DS18B20_initial();Writechar(0xCC); /跳過讀序號列號的操作Writechar(0xBE); /讀取溫度寄存器a=Readchar(); /讀低8位b=Readchar(); /讀高8位t_value=b;t_value<<

43、=8;t_value=t_value|a;tt_value=t_value*0.0625; /讀取真實值t_value= tt_value*10+0.5; /放大10倍輸出并四舍五入return(t_value);/*/*lcd1602*void delayms(uint xms)uint i,j;for(i=xms;i>0;i-)for(j=110;j>0;j-);/* void write_lcd1602_com(uchar com) /寫地址 lcd1602_Bus=com;delayms(5); lcd1602_rs=0; lcd1602_en=1; delayms(5);

44、lcd1602_en=0;void write_lcd1602_dat(uchar dat) /寫數(shù)據(jù) lcd1602_Bus=dat;delayms(5); lcd1602_rs=1; lcd1602_en=1;delayms(5); lcd1602_en=0;/*void lcd1602_initial(void)/液晶初始化 /lcd1602_wr=0; lcd1602_en=0; write_lcd1602_com(0x01);/清屏 write_lcd1602_com(0x06);/指針加減與移動 write_lcd1602_com(0x0c);/光標 write_lcd1602_c

45、om(0x38);/液晶初始化命令 write_lcd1602_com(0x01);/清屏/*/*名稱:lcd_string(uchar row,uchar cloum,uchar *p)功能:從第row行 ,第cloum列,把一串字符寫入lcd輸入:row cloum p*/void lcd1602_string(uchar row,uchar cloum, uchar *p) uchar row_flag; if(row=1) row_flag=0x80; if(row=2) row_flag=0xc0; row_flag=row_flag+cloum; write_lcd1602_com(row_flag); while(1) if(*p='0') break; write_lcd1602_dat(*p); p+; /*名稱:lcd_char(uchar row ,uchar cloum,uchar dat)*功能:在lcd的第row行,第cloum列,寫入數(shù)據(jù)dat*輸入:row cloum dat*/ void lcd1602_char(uchar row ,uchar cloum,uchar dat) uchar row_flag; if(row=1) row_flag=0x80; write_lcd16

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論