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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

16、換命令子程序  溫度轉(zhuǎn)換命令子程序主要是發(fā)溫度轉(zhuǎn)換開(kāi)始命令。當(dāng)采用12位分辨率時(shí),轉(zhuǎn)換時(shí)間約為750ms。在本程序設(shè)計(jì)中,采用1s顯示程序延時(shí)法等待轉(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; /溫度變量uchar flag1; /接收

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

18、位,初始化函數(shù)void dsreset(void) uint i; DS=0; /數(shù)據(jù)線拉到低電平0 i=103; /延時(shí)850us(該時(shí)間范圍可以在480960us) while(i>0) i-; DS=1; /數(shù)據(jù)線拉到高電平1 i=4; /延時(shí)等待(如果初始化成功則在1560ms內(nèi)產(chǎn)生一個(gè)由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+ 起延時(shí)作用 DS=1; i+;i+; dat=DS; i=8;

19、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ù)最低位在最前面,這樣剛好一個(gè)字節(jié)在DAT里 return(dat);/*/向DS18B20寫一個(gè)字節(jié)數(shù)據(jù)函數(shù)void tmpwritebyte(uchar dat) uint i; uchar j; bit testb; for(j=1;j<=8;j+) testb=dat&

20、;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 開(kāi)始獲取數(shù)據(jù)并轉(zhuǎn)換 dsreset(); delay_nms(1); tmpwritebyte(0xcc); /寫跳過(guò)讀ROM指令 tmpwritebyte(0x44); /寫溫度轉(zhuǎn)換指令 void tmp() /讀取寄存器中存儲(chǔ)的溫度數(shù)據(jù) float tt; uchar a,b

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

22、1602作為顯示部分實(shí)物圖如下: LCD1602的介紹:1602液晶也叫1602字符型液晶,它是一種專門用來(lái)顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶模塊。它由若干個(gè)5X7或者5X11等點(diǎn)陣字符位組成,每個(gè)點(diǎn)陣字符位都可以顯示一個(gè)字符,每位之間有一個(gè)點(diǎn)距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因?yàn)槿绱怂运荒芎芎玫仫@示圖形。1602LCD是指顯示的內(nèi)容為16X2,即可以顯示兩行,每行16個(gè)字符液晶模塊(顯示字符和數(shù)字)。市面上字符液晶大多數(shù)是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780寫的控制程序可以很方便地應(yīng)用于市面上大部分的字符型液晶。根據(jù)電路的要

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

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

25、h"#define uchar unsigned char#define uint unsigned int/*/液晶位定義sbit LCD_EN = P26;sbit RS = P27;/*/一毫秒延時(shí)函數(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; /選擇寫命令模式 (RS為寄存器選擇,高電平時(shí)選

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

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

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

29、在電壓上就是呈現(xiàn)出高電平或低電平,所以通過(guò)電平的高低狀態(tài)的檢測(cè),便可確認(rèn)按鍵按下與否。      2.判斷是哪個(gè)鍵按下。一.編程掃描方式:當(dāng)單片機(jī)空閑時(shí),才調(diào)用鍵盤掃描子程序,反復(fù)的掃描鍵盤,等待用戶從鍵盤上輸入命令或數(shù)據(jù),來(lái)響應(yīng)鍵盤的輸入請(qǐng)求。二.定時(shí)掃描工作方式:?jiǎn)纹瑱C(jī)對(duì)鍵盤的掃描也可用定時(shí)掃描方式,即每隔一定的時(shí)間對(duì)鍵盤掃描一次。三.中斷工作方式:只有在鍵盤有鍵按下時(shí),才執(zhí)行鍵盤掃描程序并執(zhí)行該按鍵功能程序,如果無(wú)鍵按下,單片機(jī)將不理睬鍵盤      3.完成鍵處理任務(wù)。(二)從電路或軟件

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

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

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

33、(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)品 一個(gè)8位單片機(jī),232在單片機(jī)上用作下載程序和電平轉(zhuǎn)換,STC89C52RC就是控制器相當(dāng)于人的大腦。串口硬件電路圖:串口的

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

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

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

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

38、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#defineSET_KEY_CO

39、DE 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-); /延時(shí)微秒/*void

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

41、 (i=8;i>0;i-)DS = 0; / 給脈沖信號(hào),讀起始dat>>=1; /低位開(kāi)始接收DS = 1; / 給脈沖信號(hào)if(DS) /若讀出1dat|=0x80;ds18b20_delay(4);return(dat);/*void Writechar(unsigned char dat) /寫一個(gè)字節(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 readtemp(void) /讀取

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

43、lue|a;tt_value=t_value*0.0625; /讀取真實(shí)值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);lcd1602_en=0;vo

44、id 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);/指針加減與移動(dòng) write_lcd1602_com(0x0c);/光標(biāo) write_lcd1602_com(0x38);/液晶初始化

45、命令 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_lcd1602_com(row

溫馨提示

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

評(píng)論

0/150

提交評(píng)論