基于stc89c52單片機(jī)的數(shù)字電壓表
設(shè)計(jì)報(bào)告
一、設(shè)計(jì)題目
二、設(shè)計(jì)內(nèi)容與要求
三、設(shè)計(jì)目的意義
四、系統(tǒng)硬件電路圖
五、程序流程圖與源程序
六、系統(tǒng)功能分析與說明
七、設(shè)計(jì)體會(huì)
八、參考文獻(xiàn)
基于STC89C52的簡(jiǎn)易數(shù)字電壓表的設(shè)計(jì)
摘要:本課題是利用單片機(jī)設(shè)計(jì)一個(gè)數(shù)字電壓表,能夠測(cè)量0-5V之間的直流電壓值,四位數(shù)碼管顯示,使用的元器件數(shù)目較少。外界電壓模擬量輸入到A/D轉(zhuǎn)換部分的輸入端,通過ADC0809轉(zhuǎn)換變?yōu)?a target="_blank">數(shù)字信號(hào),輸送給單片機(jī)。然后由單片機(jī)給數(shù)碼管數(shù)字信號(hào),控制其發(fā)光,從而顯示數(shù)字。此外,本文還討論了設(shè)計(jì)過程中的所用的軟件硬件環(huán)境,調(diào)試所出現(xiàn)的問題等。
關(guān)鍵詞:?jiǎn)纹瑱C(jī); STC89C52;數(shù)字電壓表; ADC0809,四位數(shù)碼管
一、設(shè)計(jì)題目
基于STC89C52的簡(jiǎn)易數(shù)字電壓表的設(shè)計(jì)。
二、設(shè)計(jì)內(nèi)容與要求
用STC89C52單片機(jī)和ADC0809組成一個(gè)數(shù)字電壓表,要求能夠測(cè)量0~5V的直流電壓值,并用四位數(shù)碼管顯示,并要求所用元器件最少。
三、設(shè)計(jì)目的意義
1.通過親身的設(shè)計(jì)應(yīng)用電路,將所用的理論知識(shí)應(yīng)用到實(shí)踐中,增強(qiáng)實(shí)踐動(dòng)手能力,進(jìn)而促進(jìn)理論知識(shí)的強(qiáng)化。
2.通過數(shù)字電壓表的設(shè)計(jì)系統(tǒng)掌握51單片機(jī)的應(yīng)用。掌握A/D轉(zhuǎn)換的原理及軟件編程及硬件設(shè)計(jì)的方法,掌握根據(jù)課題的要求,提出選擇設(shè)計(jì)方案,查找所需元器,設(shè)計(jì)并搭建硬件電路,編程寫入EPROM并進(jìn)行調(diào)試等。
四、系統(tǒng)硬件電路圖
4.1 系統(tǒng)原理框圖
選擇STC89C52作為單片機(jī)芯片,選用四位8段共陽極LED數(shù)碼管實(shí)現(xiàn)電壓顯示,利用ADC0809作為數(shù)模轉(zhuǎn)換芯片。將數(shù)據(jù)采集接口電路輸入電壓傳入ADC0809數(shù)模轉(zhuǎn)換元件,經(jīng)轉(zhuǎn)換后通過D0至D7與單片機(jī)P1口連接,把轉(zhuǎn)換完的模擬信號(hào)以數(shù)字信號(hào)的信號(hào)的形式傳給單片機(jī),信號(hào)經(jīng)過單片機(jī)處理從LED數(shù)碼顯示管顯示。P2口接數(shù)碼管位選,P0接數(shù)碼管段選,實(shí)現(xiàn)數(shù)據(jù)的動(dòng)態(tài)顯示,如圖4.1所示。
? ? ? ? 4.2 STC89C52的結(jié)構(gòu)
在本次課題設(shè)計(jì)中我們選擇了STC89C52芯片。STC89C52是一種帶8K字節(jié)閃爍可編程可檫除只讀存儲(chǔ)器(FPEROM-Flash Programable and Erasable Read Only Memory )的低電壓,高性能COMOS8的微處理器,俗稱單片機(jī)。該器件采用ATMEL搞密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。
4.2.1 STC89C52內(nèi)部結(jié)構(gòu)概述
主要功能特性
兼容MCS51指令系統(tǒng)8K可反復(fù)擦寫Flash ROM
32個(gè)雙向I/O口256x8bit內(nèi)部RAM
3個(gè)16位可編程定時(shí)/計(jì)數(shù)器中斷時(shí)鐘頻率0-24MHz
2個(gè)串行中斷可編程UART串行通道
2個(gè)外部中斷源共6個(gè)中斷源
2個(gè)讀寫中斷口線3級(jí)加密位
低功耗空閑和掉電模式軟件設(shè)置睡眠和喚醒功能
4.2.2 CPU結(jié)構(gòu)
CPU 是單片機(jī)的核心部件。它由運(yùn)算器和控制器等部件組成。
1. 運(yùn)算器
運(yùn)算器以完成二進(jìn)制的算術(shù)/邏輯運(yùn)算部件ALU為核心。它可以對(duì)半字節(jié)(4)、單字節(jié)等數(shù)據(jù)進(jìn)行操作。例如,能完成加、減、乘、除、加1、減1、BCD碼十進(jìn)制調(diào)整、比較等算術(shù)運(yùn)算,完成與、或、異或、求反、循環(huán)等邏操作,操作結(jié)果的狀態(tài)信息送至狀態(tài)寄存器。
運(yùn)算器還包含有一個(gè)布爾處理器,用以處理位操作。它以進(jìn)位標(biāo)志位C為累加器,可執(zhí)行置位、復(fù)位、取反、位判斷轉(zhuǎn)移,可在進(jìn)位標(biāo)志位與其他可位尋址的位之間進(jìn)行位數(shù)據(jù)傳誦等操作,還可以完成進(jìn)位標(biāo)志位與其他可位尋址的位之間進(jìn)行邏輯與、或操作。
2.程序計(jì)數(shù)器PC
PC是一個(gè)16位的計(jì)數(shù)器,用于存放一條要執(zhí)行的指令地址,尋址范圍為64kB,PC有自動(dòng)加1功能,即完成了一條指令的執(zhí)行后,其內(nèi)容自動(dòng)加1。
3.指令寄存器
指令寄存器用于存放指令代碼。CPU執(zhí)行指令時(shí),由程序存儲(chǔ)器中讀取的指令代碼送如指令寄存器,經(jīng)指令譯碼器譯碼后由定時(shí)有控制電路發(fā)出相應(yīng)的控制信號(hào),完成指令功能。
4.2.3 存儲(chǔ)器和特殊功能寄存器
1. 存儲(chǔ)器(Memory)是計(jì)算機(jī)系統(tǒng)中的記憶設(shè)備,用來存放程序和數(shù)據(jù)。計(jì)算機(jī)中的全部信息,包括輸入的原始數(shù)據(jù)、計(jì)算機(jī)程序、中間運(yùn)行結(jié)果和最終運(yùn)行結(jié)果都保存在存儲(chǔ)器中。它根據(jù)控制器指定的位置存入和取出信息。
2.特殊功能寄存器
特殊功能寄存器(SFR)的地址范圍為80H~FFH。在MCS-51中,除程序計(jì)數(shù)器PC和四個(gè)工作寄存器區(qū)外,其余21個(gè)特殊功能寄存器都在這SFR塊中。其中5個(gè)是雙字節(jié)寄存器,它們共占用了26個(gè)字節(jié)。各特殊功能寄存器的符號(hào)和地址見附表2。其中帶*號(hào)的可位尋址。特殊功能寄存器反映了8051的狀態(tài),實(shí)際上是8051的狀態(tài)字及控制字寄存器。用于CPU PSW便是典型一例。這些特殊功能寄存器大體上分為兩類,一類與芯片的引腳有關(guān),另一類作片內(nèi)功能的控制用。與芯片引腳有關(guān)的特殊功能寄存器是P0~P3,它們實(shí)際上是4個(gè)八位鎖存器(每個(gè)I/O口一個(gè)),每個(gè)鎖存器附加有相應(yīng)的輸出驅(qū)動(dòng)器和輸入緩沖器就構(gòu)成了一個(gè)并行口。MCS-51共有P0~P3四個(gè)這樣的并行口,可提供32根I/O線,每根線都是雙向的,并且大都有第二功能。其余用于芯片控制的寄存器中,累加器A、標(biāo)志寄存器PSW、數(shù)據(jù)指針DPTR等的功能前已提及。
4.2.4 P0-P3口結(jié)構(gòu)
P0口功能 :P0口具有兩種功能:第一,P0口可以作為通用I/O接口使用,P0.7—P0.0用于傳送CPU的輸入/輸出數(shù)據(jù)。輸出數(shù)據(jù)時(shí)可以得到鎖存,不需外接專用鎖存器,輸入數(shù)據(jù)可以得到緩沖。第二,P0.7—P0.0在CPU訪問片外存儲(chǔ)器時(shí)用于傳送片外存儲(chǔ)器de低8位地址,然后傳送CPU對(duì)片外存儲(chǔ)器的讀寫
P1口 功能 :P1口的功能和P0口de第一功能相同,僅用于傳遞I/O輸入/輸出數(shù)據(jù)。
P2口的功能 :P2口的第一功能和上述兩組引腳的第一功能相同,即它可以作為通用I/O使用。它的第二功能和P0口引腳的第二功能相配合,作為地址總線用于輸出片外存儲(chǔ)器的高8位地址。
P3口功能 :P3口有兩個(gè)功能:第一功能與其余三個(gè)端口的第一功能相同;第二功能作控制用,每個(gè)引腳都不同。
表4.1 P3口第二功能
引腳名稱功能
P3.0RXD串行數(shù)據(jù)接收口
P3.1TXD串行數(shù)據(jù)發(fā)送口
P3.2INT0外中斷0輸入
P3.3INT1外中斷1輸入
P3.4T0計(jì)數(shù)器0計(jì)數(shù)輸入
P3.5T1計(jì)數(shù)器1計(jì)數(shù)輸入
P3.6WR外部RAM寫選通信號(hào)
P3.7RD外部RAM讀選通信號(hào)
4.2.5 時(shí)鐘電路和復(fù)位電路
1.時(shí)鐘電路
單片機(jī)的時(shí)鐘一般需要多相時(shí)鐘,所以時(shí)鐘電路由振蕩器和分頻器組成。
MCS-51內(nèi)部有一個(gè)用于構(gòu)成振蕩器的可控高增益反向放大器。兩個(gè)引腳XTAL1和XTAL2分別是該放大器的輸入端和輸出端。在片外跨接一晶振和兩個(gè)匹配電容C1、C2如圖2.5所示。就構(gòu)成一個(gè)自激振蕩器。振蕩頻率根據(jù)實(shí)際要求的工作速度,從幾百千赫至24MHz可適當(dāng)選取某一頻率。匹配電容C1、C2要根據(jù)石英晶體振蕩器的要求選取。
當(dāng)晶振頻率為12MHz時(shí),C1C2一般選30pF左右。圖2.5中PD是電源控制寄存器PCON.1的掉電方式位,正常工作方式PD=0。當(dāng)PD=1時(shí)單片機(jī)進(jìn)入掉電工作方式,是一種節(jié)能工作方式。上述電路是靠MCS-51單片機(jī)內(nèi)部電路產(chǎn)生振蕩的。也可以由外部振蕩器或時(shí)鐘直接驅(qū)動(dòng)MCS-51。
2.復(fù)位電路
復(fù)位是單片機(jī)的初始化操作。其功能主要是將程序計(jì)數(shù)器(PC)初始化為0000H,使單片機(jī)從0000H單元開始執(zhí)行程序,并將特殊功能寄存器賦一些特定值。復(fù)位是使單片機(jī)退出低功耗工作方式而進(jìn)入正常狀態(tài)一種操作。復(fù)位是上電的第一個(gè)操作,然后程序從0000H開始執(zhí)行。在運(yùn)行中,外界干擾等因素可能會(huì)使單片機(jī)的程序陷入死循環(huán)狀態(tài)或“跑飛”。要使其進(jìn)入正常狀態(tài),唯一辦法是將單片機(jī)復(fù)位,以重新啟動(dòng)。
復(fù)位后,程序計(jì)數(shù)器(PC)及各特殊功能寄存器(SFR)的值如表4.2所示。
表4.2 程序計(jì)數(shù)器及各特殊功能寄存器的復(fù)位值
寄存器復(fù)位狀態(tài)寄存器復(fù)位狀態(tài)
PC0000HTH100H
ACC00HP0~P3FFH
PSW00HIPxx000000B
SP07HIE0xx00000B
DPTR0000HTMOD00H
TCON00HSCON00H
TL000HSBUF不定
TH000HPCON0xxx0000B
TL100H
RST引腳是復(fù)位端,高電平有效。在該引腳輸入至少連續(xù)兩個(gè)機(jī)器周期以上的高電平,單片機(jī)復(fù)位。RST引腳內(nèi)部有一個(gè)斯密特ST觸發(fā)器(圖2.10)以對(duì)輸入信號(hào)整形,保證內(nèi)部復(fù)位電路的可靠,所以外部輸入信號(hào)不一定要求是數(shù)字波形。使用時(shí),一般在此引腳與VSS引腳之間接一個(gè)8.2kΩ的下拉電阻,與VCC引腳之間接一個(gè)約10μF的電解電容,即可保證上電自動(dòng)復(fù)位。
上電或手動(dòng)復(fù)位要求電源接通后,單片機(jī)自動(dòng)復(fù)位,并且在單片機(jī)運(yùn)行期間,用開關(guān)操作也能使單片機(jī)復(fù)位。上電后,由于電容C3的充電和反相門的作用,使RST持續(xù)一段時(shí)間的高電平。當(dāng)單片機(jī)已在運(yùn)行當(dāng)中時(shí),按下復(fù)位鍵K后松開,也能使RST為一段時(shí)間的高電平,從而實(shí)現(xiàn)上電或手動(dòng)復(fù)位的操作。
4.3器件的比較與選擇
4.3.1顯示器
本次設(shè)計(jì)中有顯示模塊,而常用的顯示器件比較多,有數(shù)碼管,LED點(diǎn)陣,1602液晶,12864液晶等。
1. 數(shù)碼管是最常用的一種顯示器件,它是由幾個(gè)發(fā)光二極管組成的8字段顯示器件,其特點(diǎn)是價(jià)格非常的便宜,使用也非常的方便,顯示效果非常的清楚。小電流下可以驅(qū)動(dòng)每光,發(fā)光響應(yīng)時(shí)間極短,體積小,重量輕,抗沖擊性能好,壽命長(zhǎng)。但數(shù)碼管只能是顯示0——9的數(shù)據(jù)。不能夠顯示字符。這也是數(shù)碼管的不足之處。
2. LED點(diǎn)陣顯示器件是由好多個(gè)發(fā)光二極管組成的。具有高亮度,功耗低,視角大,壽命長(zhǎng),耐濕,冷,熱等特點(diǎn),LED點(diǎn)陣顯示器件可以顯示數(shù)字,英文字符,中文字符等。
3. 1602液晶是工業(yè)字符型液晶,能夠同時(shí)顯示16*2即32個(gè)字符。1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,這些字這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號(hào)、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼。使用時(shí)直接編寫軟件程序按一定的時(shí)序驅(qū)動(dòng)即可。它的特點(diǎn)是顯示字跡清楚,價(jià)格相對(duì)便宜。
4. 12864液晶也是一種工業(yè)字符型液晶,它不僅能夠顯示1602液晶所可以顯示的字符,數(shù)字等信息,而且還可以顯示8*4個(gè)中文漢字和一些簡(jiǎn)單的圖片,顯示信息也非常的清楚。使用時(shí)也直接編寫軟件程序按一定的時(shí)序驅(qū)動(dòng)即可。不過它的價(jià)格比1602液晶貴了很多。
綜合上述,根據(jù)本設(shè)計(jì)的要求和價(jià)格的考慮,選擇數(shù)碼管顯示器。
單位數(shù)碼管如圖4.4所示,四位共陽極數(shù)碼管如圖4.5所示。
?
4.3.2模數(shù)(A/D)芯片
A/D轉(zhuǎn)換器是模擬量輸入通道中的一個(gè)環(huán)節(jié),單片機(jī)通過A/D轉(zhuǎn)換器把輸入模擬量變成數(shù)字量再處理。A/D轉(zhuǎn)換的常用方法有:①計(jì)數(shù)式A/D轉(zhuǎn)換,②逐次逼近型A/D轉(zhuǎn)換,③雙積分式A/D轉(zhuǎn)換,④ V/F變換型A/D轉(zhuǎn)換。在這些轉(zhuǎn)換方式中,記數(shù)式A/D轉(zhuǎn)換線路比較簡(jiǎn)單,但轉(zhuǎn)換速度較慢,所以現(xiàn)在很少應(yīng)用。雙積分式A/D轉(zhuǎn)換精度高,多用于數(shù)據(jù)采集及精度要求比較高的場(chǎng)合,如5G14433(31/2位),AD7555(41/2位或51/2位)等,但速度更慢。隨著大規(guī)模集成電路的發(fā)展,目前不同廠家已經(jīng)生產(chǎn)出了多種型號(hào)的A/D轉(zhuǎn)換器,以滿足不同應(yīng)用場(chǎng)合的需要。如果按照轉(zhuǎn)換原理劃分,主要有3種類型,即雙積分式A/D轉(zhuǎn)換器、逐次逼近式A/D轉(zhuǎn)換器和并行式A/D轉(zhuǎn)換器。目前最常用的是雙積分和逐次逼近式。
?。?)A/D芯片的比較
雙積分式A/D轉(zhuǎn)換器具有抗干擾能力強(qiáng)、轉(zhuǎn)換精度高、價(jià)格便宜等優(yōu)點(diǎn),比如ICL71XX系列等,它們通常帶有自動(dòng)較零、七段碼輸出等功能。與雙積分相比,逐次逼近式A/D轉(zhuǎn)換的轉(zhuǎn)換速度更快,而且精度更高,比如ADC0808、ADC0809等,它們通常具有8路模擬選通開關(guān)及地址譯碼、鎖存電路等,它們可以與單片機(jī)系統(tǒng)連接,將數(shù)字量送單片機(jī)進(jìn)行分析和顯示。
1. AD0809是8位逐次逼近型A/D轉(zhuǎn)換器,它是由一個(gè)8路的模擬開關(guān)、一個(gè)地址鎖存譯碼器、一個(gè)A/D 轉(zhuǎn)換器和一個(gè)三態(tài)輸出鎖存器組成。多路開關(guān)可選通8個(gè)模擬通道,允許8 路模擬量分時(shí)輸入,共用A/D 轉(zhuǎn)換器進(jìn)行轉(zhuǎn)換。些A/D轉(zhuǎn)換器是的特點(diǎn)是8位精度,屬于并行口,如果輸入的模擬量變化大快,必須在輸入之前增加采樣電路。
2. AD0832也是8位逐次逼近型A/D轉(zhuǎn)換器,可支持致命傷個(gè)單端輸入通道和一個(gè)差分輸入通道。它易于和微處理器接口或獨(dú)立使用;可滿量程工作;可用地址邏輯多路器選通各輸入通道。
3. TLC2543C是12位開關(guān)電容逐次逼近A/D轉(zhuǎn)換,每個(gè)器件有三個(gè)控制輸入端,片選,輸入/輸出時(shí)鐘以及地址輸入端。它可以從主機(jī)高速傳輸轉(zhuǎn)換數(shù)據(jù)。它有高速的轉(zhuǎn)換,通用的控制能力,具有簡(jiǎn)化比率轉(zhuǎn)換,刻度以及模擬電路與邏輯電路和電源噪聲隔離,耐高溫等特點(diǎn)。
綜合上述,逐次逼近型A/D轉(zhuǎn)換既照顧了轉(zhuǎn)換速度,有具有一定的精度,這里選用的是逐次逼近型的A/D轉(zhuǎn)換芯片ADC0809。
?。?)ADC0809 的工作原理
1.IN0-IN7:8 條模擬量輸入通道
ADC0809 對(duì)輸入模擬量要求:信號(hào)單極性,電壓范圍是0-5V,若信號(hào)太小,必須進(jìn)行放大;輸入的模擬量在轉(zhuǎn)換過程中應(yīng)該保持不變,如若模擬量變化太快,則需在輸入前增加采樣保持電路。
地址輸入和控制線:4條。ALE 為地址鎖存允許輸入線,高電平有效。當(dāng)ALE線為高電平時(shí),地址鎖存與譯碼器將A, B,C 三條地址線的地址信號(hào)進(jìn)行鎖存,經(jīng)譯碼后被選中的通道的模擬量進(jìn)轉(zhuǎn)換器進(jìn)行轉(zhuǎn)換。A,B 和C 為地址輸入線,用于選通IN0-IN7 上的一路模擬量輸入。通道選擇表如表4.3所示。
2.數(shù)字量輸出及控制線:11 條
ST 為轉(zhuǎn)換啟動(dòng)信號(hào)。當(dāng)ST 上跳沿時(shí),所有內(nèi)部寄存器清零;下跳沿時(shí),開始進(jìn)行A/D 轉(zhuǎn)換;在轉(zhuǎn)換期間,ST 應(yīng)保持低電平。EOC 為轉(zhuǎn)換結(jié)束信號(hào)。當(dāng)EOC 為高電平時(shí),表明轉(zhuǎn)換結(jié)束;否則,表明正在進(jìn)行A/D 轉(zhuǎn)換。OE為輸出允許信號(hào),用于控制三條輸出鎖存器向單片機(jī)輸出轉(zhuǎn)換得到的數(shù)據(jù)。OE=1,輸出轉(zhuǎn)換得到的數(shù)據(jù);OE=0,輸出數(shù)據(jù)線呈高阻狀態(tài)。D7-D0 為數(shù)字量輸出線。
CLK為時(shí)鐘輸入信號(hào)線。因ADC0809的內(nèi)部沒有時(shí)鐘電路,所需時(shí)鐘信號(hào)必須由外界提供,通常使用頻率為500KHZ,
VREF(+),VREF(-)為參考電壓輸入。
3. ADC0809 應(yīng)用說明
①ADC0809 內(nèi)部帶有輸出鎖存器,可以與AT89S51 單片機(jī)直接相連。
?、诔跏蓟瘯r(shí),使ST 和OE信號(hào)全為低電平。
?、鬯鸵D(zhuǎn)換的哪一通道的地址到A,B,C 端口上。
?、茉赟T 端給出一個(gè)至少有100ns 寬的正脈沖信號(hào)。
?、菔欠褶D(zhuǎn)換完畢,我們根據(jù)EOC 信號(hào)來判斷。
?、蕻?dāng)EOC變?yōu)楦唠娖綍r(shí),這時(shí)給OE 為高電平,轉(zhuǎn)換的數(shù)據(jù)就輸出給單片機(jī)了。
AD0809的啟動(dòng)方式為脈沖啟動(dòng)方式,啟動(dòng)信號(hào)START啟動(dòng)后開始轉(zhuǎn)換,EOC 信號(hào)在
START 的下降沿10us后才變?yōu)闊o效的低電平。這要求查詢程序待EOC無效后再開始查詢,
轉(zhuǎn)換完成后,EOC 輸出高電平,再由OE 變?yōu)楦唠娖絹磔敵鲛D(zhuǎn)換數(shù)據(jù)。我們?cè)谠O(shè)計(jì)程序時(shí)
可以利用EOC 信號(hào)來通知單片機(jī)(查詢法或中斷法)讀入已轉(zhuǎn)換的數(shù)據(jù),也可以在啟動(dòng)
AD0809 后經(jīng)適當(dāng)?shù)难訒r(shí)再讀入已轉(zhuǎn)換的數(shù)據(jù)。AT89S51的輸出頻為晶振頻的1/6(2MHZ),AT89S1 與SUN7474連接經(jīng)與7474的ST腳提供AD0809 的工作時(shí)鐘。AD0809 的工作頻范圍為10KHZ-1280KHZ,當(dāng)頻率范圍為500KHZ 時(shí),其轉(zhuǎn)換速度為128us。
4.4.2 系統(tǒng)原理圖
4.4.3 系統(tǒng)PCB圖
五、程序流程圖與源程序
5.1 程序流程圖
?
? ? ? ??
? ? ? ? ?
5.4 C語言程序清單
#include《reg51.h》
typedef unsigned char uchar;
typedef unsigned int uint;
code unsigned char SEGMENT[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
code unsigned char SELECT[4]={0xFD,0xF7,0xDF,0x7F};
uint X1;
sbit P2_1=P2^1;
sbit P2_3=P2^3;
sbit P2_5=P2^5;
sbit P2_7=P2^7;
sbit START=P2^2;
sbit OE=P2^6;
sbit EOC=P2^4;
sbit spk=P2^0;
void delay(uint i)
{
uint j;
for(j=0;j《=i;j++);
}
void Delayms(uint i)
{
uchar j,k;
for(j=0;j《=i;j++)
for(k=0;k《=114;k++);
}
void timer(void)
{
TMOD=0x01;
TH0=0xdc;
TL0=0x00;
EA=1;
ET0=1;
TR0=1;
}
uchar Scankey(void)
{
uchar key;
if((P3&0x0f)==0x0f) return(0xff);
Delayms(10);
if((P3&0x0f)==0x0f) return(0xff);
key=P3&0x0f;
while((P3&0x0f)!=0x0f);
return(key);
}
void display(unsigned int wen)
{
static unsigned char num=0;
P2_1=1;
P2_3=1;
P2_5=1;
P2_7=1;
P0=0xff;
switch(num)
{
case 0:P0=SEGMENT[wen%10];break;
case 1:P0=SEGMENT[wen/10%10];break;
case 2:P0=SEGMENT[wen/100%10];break;
case 3:P0=SEGMENT[wen/1000]&0x7f;break;
}
P2=SELECT[num];
num++;
num%=4;
}
void ADC0809()
{
uchar temp=2;
START=0;
delay(5);
START=1;
delay(5);
START=0;
delay(5);
while(!EOC);
OE=1;
P1=0xff;
temp=P1;
X1=(unsigned int)temp*19.53;
OE=0;
if(X1==0)
{
spk=0;
}
else
spk=1;
}
void timer_0(void) interrupt 1
{
static unsigned int num=0;
TH0=0xdc;
TL0=0x00;
num++;
if(num==50)
{
num=0;
ADC0809();
}
}
void main()
{
timer();
while(1)
{
display(X1);
delay(500);
}
}
六、系統(tǒng)功能分析與說明
6.1 數(shù)字電壓表的概述
數(shù)字電壓表(Digital Voltmeter)簡(jiǎn)稱DVM,它是采用數(shù)字化測(cè)量技術(shù),把連續(xù)的模擬量(直流輸入電壓)轉(zhuǎn)換成不連續(xù)、離散的數(shù)字形式并加以顯示的儀表。傳統(tǒng)的指針式電壓表功能單一、精度低,不能滿足數(shù)字化時(shí)代的需求,采用單片機(jī)的數(shù)字電壓表,由精度高、抗干擾能力強(qiáng),可擴(kuò)展性強(qiáng)、集成方便,還可與PC進(jìn)行實(shí)時(shí)通信。目前,由各種單片A/D 轉(zhuǎn)換器構(gòu)成的數(shù)字電壓表,已被廣泛用于電子及電工測(cè)量、工業(yè)自動(dòng)化儀表、自動(dòng)測(cè)試系統(tǒng)等智能化測(cè)量領(lǐng)域,示出強(qiáng)大的生命力。與此同時(shí),由DVM擴(kuò)展而成的各種通用及專用數(shù)字儀器儀表,也把電量及非電量測(cè)量技術(shù)提高到嶄新水平。本章重點(diǎn)介紹單片A/D 轉(zhuǎn)換器以及由它們構(gòu)成的基于單片機(jī)的數(shù)字電壓表的工作原理。
6.2 數(shù)字電壓表的介紹
模擬電壓表具有電路簡(jiǎn)單、成本低、測(cè)量方便等特點(diǎn),但測(cè)量精度較差,特別是受表頭精度的限制,即使采用0.5級(jí)的高靈敏度表頭,讀測(cè)時(shí)的分辨力也只能達(dá)到半格。再者,模擬式電壓表的輸入阻抗不高,測(cè)高內(nèi)阻源時(shí)精度明顯下降。數(shù)字電壓表作為數(shù)字技術(shù)的成功應(yīng)用,發(fā)展相當(dāng)快。數(shù)字電壓表(Digital VoIt Me-ter,DVM),以其功能齊全、精度高、靈敏度高、顯示直觀等突出優(yōu)點(diǎn)深受用戶歡迎。特別是以A/D轉(zhuǎn)換器為代表的集成電路為支柱,使DVM向著多功能化、小型化、智能化方向發(fā)展。DVM應(yīng)用單片機(jī)控制,組成智能儀表;與計(jì)算機(jī)接口,組成自動(dòng)測(cè)試系統(tǒng)。目前,DVM多組成多功能式的,因此又稱數(shù)字多用表(Digital Multi Meter,DMM)。
DVM是將模擬電壓變換為數(shù)字顯示的測(cè)量?jī)x器,這就要求將模擬量變成數(shù)字量。這實(shí)質(zhì)上是個(gè)量化過程,即將連續(xù)的無窮多個(gè)模擬量用有限個(gè)數(shù)字表示的過程,完成這種變換的核心部件是A/D轉(zhuǎn)換器,最后用電子計(jì)數(shù)器計(jì)數(shù)顯示,困此,DVM的基本組成是A/D轉(zhuǎn)換器和電子計(jì)數(shù)器。
DVM最基本功能是測(cè)直流電壓,考慮到儀器的多功能化,可將其他物理量,如電阻、電容、交流電壓、電流等,都變成直流電壓,因此,還應(yīng)有一個(gè)測(cè)量功能選擇變換器,它包含在輸入電路中。DVM對(duì)直流電壓直接測(cè)量時(shí)的測(cè)量精度最高,其他物理量在變換成直流電壓時(shí),受功能選擇變換器精度的限制,測(cè)量精度有所下降。
6.3 數(shù)字電壓表工作原理
數(shù)字電壓表的系統(tǒng)工作原理:首先,被測(cè)電壓信號(hào)進(jìn)入A/D轉(zhuǎn)換器,單片機(jī)中控制信號(hào)線發(fā)出控制信號(hào),啟動(dòng)A/D轉(zhuǎn)換器進(jìn)行轉(zhuǎn)換,其采樣得到的數(shù)字信號(hào)數(shù)據(jù)在相應(yīng)的碼制轉(zhuǎn)換模塊中轉(zhuǎn)換為顯示代碼。最后發(fā)出顯示控制與驅(qū)動(dòng)信號(hào),驅(qū)動(dòng)外部的數(shù)碼管顯示相應(yīng)的數(shù)據(jù)。圖2.1所示為DVM的基本組成框圖,需指出的是,圖中將DVM分成模擬和數(shù)字兩大部分,從框圖上看,A/D轉(zhuǎn)換器包含在模擬部分,這樣劃分并不嚴(yán)格,因?yàn)锳/D轉(zhuǎn)換器本身具有數(shù)字電路的性質(zhì),特別是大規(guī)模集成化A/D轉(zhuǎn)換器是模擬與數(shù)字兩系統(tǒng)相互結(jié)合的,就連邏輯控制也集成在其中。
6.4 數(shù)字電壓表發(fā)展及未來
回顧一下DVM的發(fā)展過程,大致可以分為以下三個(gè)階段。
1.數(shù)字化階段
20世紀(jì)50年代到60年代中期,DVM的特點(diǎn)是運(yùn)用各種原理實(shí)現(xiàn)模/數(shù)(A/D)轉(zhuǎn)換,即將模擬量轉(zhuǎn)化成數(shù)字量,從而實(shí)現(xiàn)測(cè)量?jī)x表的數(shù)字化。1952年,第一臺(tái)問世的數(shù)字電壓表是采用電子管的伺服比較式;1956年出現(xiàn)諧波式V/T(電壓/時(shí)間變換型);1961年出現(xiàn)全晶體管化的逐次逼近比較式;1963年出現(xiàn)電壓/頻率(V/F)變換型(單積分式);1966年出現(xiàn)雙積分式(雙斜式)等。這一時(shí)期的顯示位數(shù)是3.5-5.5位
2.高精度階段
由于精密電測(cè)量的需要,DVM開始向高準(zhǔn)確、高位數(shù)方向發(fā)展,出現(xiàn)了所謂復(fù)合型原理的儀表。如1971年日本研制的TR-6567(三次采樣積分式);1973年英國(guó)研制的SM-215(兩次采樣電感分壓比較型);1972年日本研制的TR-6501型DVM已達(dá)到了8位數(shù)。與此同時(shí)對(duì)積分方案進(jìn)行了改進(jìn)和提高,出現(xiàn)了如Dana公司的6900型(7位)、Solartron公司生產(chǎn)的7075型(8位),其準(zhǔn)確度可達(dá)到百萬分之幾。
3.智能化階段
由于電子技術(shù)、大規(guī)模集成電路(LSI)及計(jì)算機(jī)技術(shù)的發(fā)展,是人們不久就研制出微處理器(P)數(shù)字電壓表,實(shí)現(xiàn)了DVM數(shù)據(jù)處理自動(dòng)化和可編程序,因?yàn)閹в写鎯?chǔ)器并使用軟件支持,所以可以進(jìn)行信息處理,可通過標(biāo)準(zhǔn)接口組成自動(dòng)測(cè)試系統(tǒng)(ATS)例如,F(xiàn)luke公司的8506型、Solartron公司的7065型和7081型、Datron公司的1071和1281型,以及Fluke公司的最新產(chǎn)品8508A型等。它們除了完成原有DVM的各種功能外,還能夠自校、自檢,保證了自動(dòng)測(cè)量的高準(zhǔn)確度,實(shí)現(xiàn)了儀器、儀表的智能化。當(dāng)前,智能式儀表發(fā)展十分迅速,而微處理式DVM在智能儀表中占的比重最大。智能化的DVM為實(shí)現(xiàn)各種物理量的動(dòng)態(tài)測(cè)量提供了可能。
6.5 軟硬件調(diào)試
軟件調(diào)試的任務(wù)是利用開發(fā)工具進(jìn)行調(diào)試,發(fā)現(xiàn)和糾正程序的錯(cuò)誤,同時(shí)也能發(fā)現(xiàn)硬件的故障。軟件調(diào)試是一個(gè)模塊接一個(gè)模塊進(jìn)行的。首先單獨(dú)調(diào)試各子程序是否能夠按照預(yù)期的功能,接口電路的控制是否正常。最后調(diào)試整個(gè)程序。尤其注意的是各模塊間能否正確的傳遞參數(shù)。
1. 檢查數(shù)碼管顯示模塊程序。觀察數(shù)碼管上是否能夠顯示相應(yīng)的字符。
2. 檢查A/D轉(zhuǎn)換模塊程序。可以在硬件電路的輸入端輸入已知的幾個(gè)電壓,分別觀察數(shù)碼管上是否顯示相應(yīng)的電壓值。
3. 檢查數(shù)據(jù)的轉(zhuǎn)換模塊程序。
程序可分為數(shù)據(jù)采集系統(tǒng)、數(shù)據(jù)轉(zhuǎn)換系統(tǒng)、顯示系統(tǒng),這三部分先獨(dú)立測(cè)試,然后整體調(diào)試。
?、贁?shù)據(jù)采集系統(tǒng):因?yàn)锳DC0809本身并沒有內(nèi)部時(shí)鐘,需要外部時(shí)鐘來提供工作的時(shí)鐘頻率。如果利用單片機(jī)ALE端腳提供的頻率為6MHZ,而ADC0809工作的頻率在10KHZ-1MHZ。因此,需要增加含觸發(fā)器功能的器件,從面增加了系統(tǒng)的復(fù)雜程度。后來,經(jīng)過小組不斷的討論與思考,最終用軟件編程來提供ADC0809工作的時(shí)鐘頻率,從而解決了這個(gè)問題。
?、陲@示系統(tǒng)的調(diào)試:要顯示的數(shù)據(jù)存放在71H、72H、73H、74H單元中,先在30H~39H分單元中存放0~9的數(shù),運(yùn)行顯示程序,進(jìn)行查表指令,察看顯示的結(jié)果是否與存放值一樣。在測(cè)試的過程中發(fā)現(xiàn)小數(shù)點(diǎn)沒有顯示,通過下面幾條指令,把小數(shù)點(diǎn)顯示出來。
MOVC A,@A+DPTR
CJNE R2,#0FEH,NOT_ONE ;不是左邊第一個(gè)數(shù)碼管,則轉(zhuǎn)移
ORL A,#80H ;左邊第一個(gè)數(shù)碼管顯示小數(shù)點(diǎn)
NOT_ONE: MOV P0,A ;數(shù)碼管段選
另外,發(fā)現(xiàn)四位數(shù)碼管顯示的亮度不一樣,有時(shí)還存在閃爍的情況,后來經(jīng)過調(diào)整各位數(shù)碼管顯示的間隔,調(diào)用延時(shí)函數(shù)解決了亮度不一的問題。
③整體測(cè)試:把三部分進(jìn)行程序聯(lián)調(diào),編譯程序,看是否存在錯(cuò)誤。經(jīng)過多次的嘗試與查找相資料,最后做出并完善了整體的方案。
4.系統(tǒng)進(jìn)一步改進(jìn)方案
進(jìn)一步提高測(cè)量精度,把精確到小數(shù)點(diǎn)后一位改為精確到小數(shù)點(diǎn)后三位。
6.5系統(tǒng)功能分析
本課題是利用單片機(jī)設(shè)計(jì)一個(gè)數(shù)字電壓表,能夠測(cè)量0-5V之間的直流電壓值,四位數(shù)碼顯示,使用的元器件數(shù)目較少。外界電壓模擬量輸入到A/D轉(zhuǎn)換部分的輸入端,通過A/D轉(zhuǎn)換變?yōu)閿?shù)字信號(hào),輸送給單片機(jī)。然后由單片機(jī)給數(shù)碼管數(shù)字信號(hào),控制其發(fā)光,從而顯示數(shù)字。
七、設(shè)計(jì)體會(huì)
經(jīng)過近二周的單片機(jī)課程設(shè)計(jì),終于完成了我的數(shù)字電壓表的設(shè)計(jì),基本達(dá)到設(shè)計(jì)要求。
對(duì)于此次課程設(shè)計(jì),有許多的感觸與體會(huì),遇到的難題多,學(xué)習(xí)到的知識(shí)也就更多。
第一,硬件電路遇到了ADC0809無內(nèi)部時(shí)鐘,需外接外部時(shí)鐘,如何解決這個(gè)問題,我們小組進(jìn)行了多次討論,最終確定了在程序中提供時(shí)鐘信號(hào),大大降低了硬件電路的復(fù)雜度。
第二,則是解決程序設(shè)計(jì)的問題,而程序設(shè)計(jì)是一個(gè)很靈活的東西,它反映了你解決問題的邏輯思維和創(chuàng)新能力,它才是一個(gè)設(shè)計(jì)的靈魂所在。因此在整個(gè)設(shè)計(jì)過程中大部分時(shí)間是用在程序上面的。其中,我遇到了很多的問題,雖然以前還做過這樣的設(shè)計(jì),但是以前的都是用C語言進(jìn)行編程。而此次運(yùn)用匯編語言編程,著實(shí)讓我當(dāng)頭一棒,因?yàn)槌?a target="_blank">微機(jī)原理實(shí)驗(yàn)進(jìn)行過相關(guān)編程,匯編語言的編程能力還停留在理論階段。在此次編程中,首先,我是先用C語言編程,進(jìn)行調(diào)試后,成功的達(dá)到了課程設(shè)計(jì)的要求。其次,查找匯編語言的相關(guān)資料,經(jīng)過不懈的努力與調(diào)試,終于將匯編語言版的成功編程出來。
第三,在一個(gè)課題中,要設(shè)計(jì)一個(gè)成功的電路,必須要有耐心,要有堅(jiān)持的毅力。在整個(gè)電路的設(shè)計(jì)過程中,重要的是各個(gè)單元電路的連接及電路的細(xì)節(jié)設(shè)計(jì)上,如在多種方案的選擇中,我們仔細(xì)比較分析其原理以及可行的原因。這就要求我們對(duì)硬件系統(tǒng)中各組件部分有充分透徹的理解和研究,并能對(duì)之靈活應(yīng)用。完成這次設(shè)計(jì)后,我在書本理論知識(shí)的基礎(chǔ)上又有了更深層次的理解。
第四,在本次設(shè)計(jì)的過程中,我還學(xué)會(huì)了高效率的查閱資料、運(yùn)用工具書、利用網(wǎng)絡(luò)查找資料。我發(fā)現(xiàn),在我們所使用的書籍上有一些知識(shí)在實(shí)際應(yīng)用中其實(shí)并不是十分理想,各種參數(shù)都需要自己去調(diào)整,這就要求我們應(yīng)更加注重實(shí)踐環(huán)節(jié)。
最后,還要在此感謝課程設(shè)計(jì)的指導(dǎo)老師們和我的組員們,他們?cè)谡麄€(gè)過程中都給予了我充分的幫助與支持。
八、參考文獻(xiàn)
?。?] 李華.MCS-51系列單片機(jī)實(shí)用接口技術(shù)[M].1989.
?。?] 周立功。單片機(jī)實(shí)驗(yàn)與實(shí)踐。北京:北京航空航天大學(xué)出版社。
?。?] 吳國(guó)經(jīng)。單片機(jī)應(yīng)用技術(shù)。北京:中國(guó)電力出版社,2003.
[4] 徐惠民 安德寧 丁玉珍。單片微型計(jì)算機(jī)原理、接口及應(yīng)用。北京:北京郵電大學(xué)出版社,2007年。
?。?] 徐愛鈞?!吨悄芑瘻y(cè)量控制儀表原理與設(shè)計(jì)》(第二版)[M]。北京:北京航空航天大學(xué)出版社,2004.
評(píng)論