目錄 目錄 第一章 課設(shè)題目分析 1.1 數(shù)字電壓表簡介 1.2 數(shù)字電壓表基本工作原理 1.3 設(shè)計要求 1.4 設(shè)計思路 1.5 設(shè)計方案 第二章 硬件電路分析 2.1 單片機系統(tǒng)設(shè)計 2.1.1 STC89C51簡介 2.1.2 單片機最小系統(tǒng) 2.2 A/D轉(zhuǎn)換模塊設(shè)計 2.2.1 逐次逼近式A/D轉(zhuǎn)換工作原理 2.2.2 ADC0809簡介 2.3 LED顯示系統(tǒng)設(shè)計 2.3.1 LED基本結(jié)構(gòu) 2.3.2 LED顯示方式 2.3.3 LED顯示器與單片機接口設(shè)計 2.4 電壓采集電路 2.5 總體電路設(shè)計 第三章 軟件系統(tǒng)設(shè)計 3.1 程序設(shè)計總方案 3.2 系統(tǒng)子程序設(shè)計 3.2.1 AD轉(zhuǎn)換子程序 3.2.2 顯示子程序 3.3 編程軟件KEIL簡介 3.4 PROTUES仿真軟件簡介 第四章 仿真與實物調(diào)試 4.1 軟件仿真 4.2 實物調(diào)試 4.3 誤差分析 參考文獻 附錄1 仿真電路圖 附錄2 實物連接圖 附錄3 顯示示數(shù)圖 附錄4 源程序
第一章 課設(shè)題目分析 第一章 課設(shè)題目分析1.1 數(shù)字電壓表簡介在電量的測量中,電壓、電流和頻率是最基本的三個被測量,其中電壓量的測量最為經(jīng)常。而且隨著電子技術(shù)的發(fā)展,更是經(jīng)常需要測量高精度的電壓,所以數(shù)字電壓表就成為一種必不可少的測量儀器。數(shù)字電壓表(Digital Voltmeter)簡稱DVM,它是采用數(shù)字化測量技術(shù),把連續(xù)的模擬量(直流輸入電壓)轉(zhuǎn)換成不連續(xù)、離散的數(shù)字形式并加以顯示的儀表。與此同時,由DVM擴展而成的各種通用及專用數(shù)字儀器儀表,也把電量及非電量測量技術(shù)提高到嶄新水平。本文重點介紹單片A/D 轉(zhuǎn)換器以及由它們構(gòu)成的基于單片機的數(shù)字電壓表的工作原理。目前,由各種單片A/D 轉(zhuǎn)換器構(gòu)成的數(shù)字電壓表,已被廣泛用于電子及電工測量、工業(yè)自動化儀表、自動測試系統(tǒng)等智能化測量領(lǐng)域,示出強大的生命力理。 目前,數(shù)字電壓表的內(nèi)部核心部件是A/D轉(zhuǎn)換器,轉(zhuǎn)換的精度很大程度上影響著數(shù)字電壓表的準(zhǔn)確度,因而,以后數(shù)字電壓表的發(fā)展就著眼在高精度和低成本這兩個方面。A/D轉(zhuǎn)換器分成四種:計數(shù)式A/D轉(zhuǎn)換器、雙積分式A/D轉(zhuǎn)換器、逐次逼近式A/D轉(zhuǎn)換器和并行式A/D轉(zhuǎn)換器。 目前最常用的是雙積分式A/D轉(zhuǎn)換器和逐次逼近式A/D轉(zhuǎn)換器,其中雙積分式A/D轉(zhuǎn)換器的主要優(yōu)點是轉(zhuǎn)換精度高,抗干擾性能好,價格便宜。但是其轉(zhuǎn)換速度慢,因此這種轉(zhuǎn)換器這種轉(zhuǎn)換器主要用于速度要求不高的場合。而逐次逼近式A/D轉(zhuǎn)換器轉(zhuǎn)換速度快,但精度相對較差。因此未來的A/D轉(zhuǎn)換器將兼顧精度和速度,成本也會隨著集成電路的發(fā)展而降低。 1.2 數(shù)字電壓表基本工作原理本文介紹了一種基于單片機的簡易數(shù)字電壓表的設(shè)計。該設(shè)計主要由三個模塊組成:A/D轉(zhuǎn)換模塊,數(shù)據(jù)處理模塊及顯示模塊。A/D轉(zhuǎn)換主由芯片ADC0809來完成,它負(fù)責(zé)把采集到的模擬量轉(zhuǎn)換為相應(yīng)的數(shù)字量在傳送到數(shù)據(jù)處理模塊。數(shù)據(jù)處理則由芯片STC89C51來完成,其負(fù)責(zé)把ADC0809傳送來的數(shù)字量經(jīng)過一定的數(shù)據(jù)處理,產(chǎn)生相應(yīng)的顯示碼送到顯示模塊進行顯示;此外,它還控制著ADC0809芯片工作。 該系統(tǒng)的數(shù)字電壓表電路簡單,所用的元件較少,成本低,且測量精度和可靠性較高。此數(shù)字電壓表可以測量0-10V的1路模擬直流輸入電壓并通過一個四位一體的7段數(shù)碼管顯示出來。 1.3 設(shè)計要求⑴以MCS-51系列單片機為核心器件,組成一個簡單的直流數(shù)字電壓表 ⑵采用1路模擬量輸入,能夠測量0-10V之間的直流電壓值 1.4 設(shè)計思路電路盡量采用中、大規(guī)模集成電路。其中,A/D轉(zhuǎn)換器將輸入的模擬量轉(zhuǎn)換成數(shù)字量,按規(guī)定的時序?qū)/D轉(zhuǎn)換器中各組模擬開關(guān)接通或斷開,保證A/D轉(zhuǎn)換正常進行。A/D轉(zhuǎn)換結(jié)果通過單片機輸出,最后顯示在數(shù)碼管上。 ⑴ 根據(jù)設(shè)計要求,選擇STC89C51單片機為核心控制器件。 ⑵ A/D轉(zhuǎn)換采用ADC0809實現(xiàn)。 ⑶ 電壓顯示采用四位一體的LED數(shù)碼管。 ⑷ LED數(shù)碼的段碼輸入,由并行端口P0產(chǎn)生:位碼輸入,用并行端口P2 低4位產(chǎn)生。 1.5 設(shè)計方案硬件電路設(shè)計由6個部分組成; A/D轉(zhuǎn)換電路,STC89C51單片機、LED顯示系統(tǒng)、時鐘電路、復(fù)位電路以及測量電壓輸入電路。硬件電路設(shè)計框圖如圖1.1所示。 
圖1.1 數(shù)字電壓表總體設(shè)計方框圖
第二章 硬件電路分析 第二章 硬件電路分析2.1 單片機系統(tǒng)設(shè)計2.1.1 STC89C51簡介STC89C51是一種低功耗、高性能CMOS 8位微控制器,具有4K 在系統(tǒng)可編程Flash 存儲器。使用Atmel 公司高密度非易失性存儲器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得STC89C51在眾多嵌入式控制應(yīng)用系統(tǒng)中得到廣泛應(yīng)用。 其各引腳功能如下: VCC:電源電壓 GND:地 P0口:P0口是一組8位漏極開路型雙向I/O口,也即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口用時,每位能吸收電流的方式驅(qū)動8個TTL邏輯門電路,對端口P0寫“1”時可作為高阻抗輸入端用。 在訪問外部數(shù)據(jù)存儲器或程序存儲器時,這組口線分時轉(zhuǎn)換地址(低8位)和數(shù)據(jù)總線復(fù)位,在訪問期間激活內(nèi)部上拉電阻。 P1口:P1是一個帶內(nèi)部上拉電阻的8位雙向I/O口,P1的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTE邏輯門電路。對端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時可作輸入口。作輸入口使用時,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(ILL)。 表2-1 P1口特殊功能【1】 | | | T2(定時/計數(shù)器2外部計數(shù)脈沖輸入),時鐘輸出 | | T2EX(定時/計數(shù)2捕獲/重裝載出發(fā)和方向控制) |
P2口:P2是一個帶有內(nèi)部上拉電阻的8位雙向I/O口,P2的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯門電路。對端口P2寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時可作輸入口,作輸入口使用時,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(ILL)。 在訪問外部程序存儲器或16位地址的外部數(shù)據(jù)存儲器(例如執(zhí)行MOVX @DPTR指令)時,P2口送出高8位地址數(shù)據(jù)。在訪問8位地址的外部數(shù)據(jù)存儲器(如執(zhí)行MOVX @RI指令)時,P2口輸出P2鎖存器的內(nèi)容。 P3口:P3口是一組帶有內(nèi)部上拉電阻的8位雙向I/O口。P3口輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯門電路。對P3口寫入“1”時,它們被內(nèi)部上拉電阻拉高并可作為輸入端口。此時,被外部拉低的P3口將用上拉電阻輸出電流(ILL)。 P3口除了作為一般的I/O口線外,更重要的用途是它的第二功能,如表2-2所示。 表2-2 P3端口第二功能【1】

RST:復(fù)位輸入。當(dāng)振蕩器工作時,RST引腳出現(xiàn)兩個機器周期以上高電平將使單片機復(fù)位。 圖2.1 單片機引腳圖 EA/VPP:外部訪問允許。欲使CPU僅訪問外部程序存儲器(地址為0000H-FFFFH ) 。 EA端必須保持低電平(接地)。需注意的是:如果加密位LB1被編程,復(fù)位時內(nèi)部會鎖存EA端狀態(tài)。 如EA端為高電平(接VCC端),CPU則執(zhí)行內(nèi)部程序存儲器中的指令。 Flash存儲器編程時,該引腳加上+12V的編程允許電源VPP,當(dāng)然這必須是該器件是使用12V編程電壓VCC 。 XTAL1:振蕩器反相放大器的及內(nèi)部時鐘發(fā)生器的輸入端。 XTAL2:振蕩器反相放大器的輸出端。 數(shù)據(jù)存儲器:89C51有256個字節(jié)的內(nèi)部RAM,80H-FFH高128個字節(jié)與特殊功能寄存器(SFR)地址是重疊的,也就是高128。 字節(jié)的RAM和特殊功能寄存器的地址是相同的,但在物理上它們是分開的。 當(dāng)一條指令訪問7FH以上的內(nèi)部地址單元時,指令中使用的尋址方式是不同的,也即尋址方式?jīng)Q定是訪問高128字節(jié)。RAM還是訪問特殊功能寄存器。如果指令是直接尋址方式則為訪問特殊功能寄存器。 中斷:89C51共有6個中斷向量:兩個外中斷(INT0和INT1),3個定時器中斷(定時器0, 1, 2)和串行口中斷。 2.1.2 單片機最小系統(tǒng)單片機最小系統(tǒng),也叫做單片機最小應(yīng)用系統(tǒng),是指用最少的原件組成單片機可以工作的系統(tǒng)。單片機最小系統(tǒng)包括電源、晶振、復(fù)位電路、時鐘電路。  
圖2.2 最小系統(tǒng) 圖2.3 復(fù)位電路
復(fù)位電路:單片機在啟動運行時都需要復(fù)位,使CPU和系統(tǒng)中的其他部件都處于一個確定的初始狀態(tài),并從這個狀態(tài)開始工作。MCS-51單片機有一個復(fù)位引腳RST,采用施密特觸發(fā)輸入。當(dāng)震蕩器起振后,只要該引腳上出現(xiàn)2個機器周期以上的高電平即可確保時器件復(fù)位[1]。復(fù)位完成后,如果RST端繼續(xù)保持高電平,MCS-51就一直處于復(fù)位狀態(tài),只要RST恢復(fù)低電平后,單片機才能進入其他工作狀態(tài)。單片機的復(fù)位方式有上電自動復(fù)位和手動復(fù)位兩種,圖2.3是51系列單片機統(tǒng)常用的復(fù)位電路,只要Vcc上升時間不超過1ms,它們都能很好的工作。 時鐘電路:單片機中CPU每執(zhí)行一條指令,都必須在統(tǒng)一的時鐘脈沖的控制下嚴(yán)格按時間節(jié)拍進行,而這個時鐘脈沖是單片機控制中的時序電路發(fā)出的。CPU執(zhí)行一條指令的各個微操作所對應(yīng)時間順序稱為單片機的時序。MCS-51單片機芯片內(nèi)部有一個高增益反相放大器,用于構(gòu)成震蕩器,XTAL1為該放大器的輸入端,XTAL2為該放大器輸出端,但形成時鐘電路還需附加其他電路[1]。 本設(shè)計系統(tǒng)采用內(nèi)部時鐘方式,利用單片機內(nèi)部的高增益反相放大器,外部電路簡,只需要一個晶振和 2個電容即可,如圖2.4所示。電路中的器件選擇可以通過計 
算和實驗確定,也可以參考一些典型電路的參數(shù),電路中,電容器C1和C2對震蕩頻率有微調(diào)作用,通常的取值范圍是30±10pF,在這個系統(tǒng)中選擇了30pF;石英晶振選擇 圖2.4 時鐘電路 范圍最高可選24MHz,它決定了單片機電路產(chǎn)生的時鐘信號震蕩頻率,在本系統(tǒng)中選擇的是12MHz,因而時鐘信號的震蕩頻率為12MHz。 2.2 A/D轉(zhuǎn)換模塊設(shè)計現(xiàn)實世界的物理量都是模擬量,能把模擬量轉(zhuǎn)化成數(shù)字量的器件稱為模/數(shù)轉(zhuǎn)換器(A/D轉(zhuǎn)換器),A/D轉(zhuǎn)換器是單片機數(shù)據(jù)采集系統(tǒng)的關(guān)鍵接口電路,按照各種A/D芯片的轉(zhuǎn)化原理可分為逐次逼近型,雙重積分型等等。雙積分式A/D轉(zhuǎn)換器具有抗干擾能力強、轉(zhuǎn)換精度高、價格便宜等優(yōu)點。與雙積分相比,逐次逼近式A/D轉(zhuǎn)換的轉(zhuǎn)換速度更快,而且精度更高,比如ADC0809、ADC0808等,它們通常具有8路模擬選通開關(guān)及地址譯碼、鎖存電路等,它們可以與單片機系統(tǒng)連接,將數(shù)字量送到單片機進行分析和顯示。一個n位的逐次逼近型A/D轉(zhuǎn)換器只需要比較n次,轉(zhuǎn)換時間只取決于位數(shù)和時鐘周期,逐次逼近型A/D轉(zhuǎn)換器轉(zhuǎn)換速度快,因而在實際中廣泛使用。 2.2.1 逐次逼近式A/D轉(zhuǎn)換工作原理逐次逼近型A/D轉(zhuǎn)換器是由一個比較器、A/D轉(zhuǎn)換器、存儲器及控制電路組成。它利用內(nèi)部的寄存器從高位到低位一次開始逐位試探比較。 轉(zhuǎn)換過程如下: 
開始時,寄存器各位清零,轉(zhuǎn)換時,先將最高位置1,把數(shù)據(jù)送入A/D轉(zhuǎn)換器轉(zhuǎn)換,轉(zhuǎn)換結(jié)果與輸入的模擬量比較,如果轉(zhuǎn)換的模擬量比輸入的模擬量小,則1保留,如果 圖2.5 AD轉(zhuǎn)換原理框圖 轉(zhuǎn)換的模擬量比輸入的模擬量大,則1不保留,然后從第二位依次重復(fù)上述過程直至最低位,最后寄存器中的內(nèi)容就是輸入模擬量對應(yīng)的二進制數(shù)字量。其原理框圖如圖2.5所示。 2.2.2 ADC0809簡介ADC0809是CMOS單片型逐次逼近式A/D轉(zhuǎn)換器,帶有使能控制端,與微機直接接口,片內(nèi)帶有鎖存功能的8路模擬多路開關(guān),可以對8路0-5V輸入模擬電壓信號分時進行轉(zhuǎn)換,由于ADC0809設(shè)計時考慮到若干種模/數(shù)變換技術(shù)的長處,所以該芯片非常適應(yīng)于過程控制,微控制器輸入通道的接口電路,智能儀器和機床控制等領(lǐng)域。 ADC0809主要特性:8路8位A/D轉(zhuǎn)換器,即分辨率8位;具有鎖存控制的8路模擬開關(guān);易與各種微控制器接口;可鎖存三態(tài)輸出,輸出與TTL兼容;轉(zhuǎn)換時間:128μs;轉(zhuǎn)換精度:0.2%;單個+5V電源供電;模擬輸入電壓范圍0- +5V,無需外部零點和滿度調(diào)整;低功耗,約15mW。 ADC0809是8位AD轉(zhuǎn)換器,輸入信號等于參考電壓時,輸出為255,1.25V為1/4滿量程,輸出為255/4,轉(zhuǎn)為整數(shù)64,也就是40H。 ADC0809的電源電壓范圍是4.75v - 5.25v。一般都直接用5V;鶞(zhǔn)電壓一般接5V,這樣輸入電壓為5V時,轉(zhuǎn)換的數(shù)字量為255.基準(zhǔn)電壓是有用的,在特定條件下可以提高轉(zhuǎn)換精度。如;輸入電壓范圍為0-2.5V,基準(zhǔn)電源用5V,轉(zhuǎn)換成數(shù)字量的值為0-128.如果把基準(zhǔn)電壓定為2.5V,那么此時轉(zhuǎn)換成的數(shù)字量就為0-255. 
圖2.6 ADC0809引腳圖
模數(shù)轉(zhuǎn)換器的分辨率表示能夠改變數(shù)字輸出值的最小輸入電壓值。分辨率由 A/D 的位數(shù)決定, 位數(shù)越多,電壓分辨率越高。如:當(dāng)前的模擬輸入電壓是 1.00V,對應(yīng)的輸出數(shù)值是 2EH,當(dāng)輸入電壓改變?yōu)?1.01V時,輸出數(shù)值是2FH,分辨率就是 10mV 。ADC0809是8位逐次逼近型模數(shù)轉(zhuǎn)換器,輸出數(shù)值范圍是 0 ~ 2^8 -1(0 ~ 255),滿量程 是 5V ,分辨率就是最低有效位(LSB) 的對應(yīng)輸入電壓值,分辨率 = 5000/255 = 19.6mV。分辨率高是精度高的前提,但是分辨率高未必精度一定高,如基準(zhǔn)電壓( Vref) 的穩(wěn)定度、芯片抗干擾能力、電路噪聲等指標(biāo)都會影響測量精度。所以n位的A/D芯片,分辨率直接用滿量程電壓除以 2^n 計算即可。分辨率 = 5000/256 = 19.5mV。 ADC0809芯片有28條引腳,采用雙列直插式封裝,其引腳圖如圖2.6所示。 下面說明各個引腳功能: IN0-IN7(8條):8路模擬量輸入線,用于輸入和控制被轉(zhuǎn)換的模擬電壓。 地址輸入控制(4條): ALE:地址鎖存允許輸入線,高電平有效,當(dāng)ALE為高電平時,為地址輸入線,用于選擇IN0-IN7上那一條模擬電壓送給比較器進行A/D轉(zhuǎn)換。 ADDA,ADDB,ADDC:3位地址輸入線,用于選擇8路模擬輸入中的一路,其對應(yīng)關(guān)系如表2-3所示: 表2-3 ADC0809通道選擇表
START:START為“啟動脈沖”輸入法,該線上正脈沖由CPU送來,寬度應(yīng)大于100ns,上升沿清零SAR,下降沿啟動ADC工作。 EOC:EOC為轉(zhuǎn)換結(jié)束輸出線,該線上高電平表示A/D轉(zhuǎn)換已結(jié)束,數(shù)字量已鎖入三態(tài)輸出鎖存器。 D1-D8:數(shù)字量輸出端,D1為高位。 OE:OE為輸出允許端,高電平能使D1-D8引腳上輸出轉(zhuǎn)換后的數(shù)字量。 REF+、REF-:參考電壓輸入量,給電阻階梯網(wǎng)絡(luò)供給標(biāo)準(zhǔn)電壓。 Vcc、GND:Vcc為主電源輸入端,GND為接地端,一般REF+與Vcc連接在一起,REF-與GND連接在一起. CLK:時鐘輸入端。 
ADC0809由8路模擬通道選擇開關(guān),地址鎖存與譯碼器,比較器,8位開關(guān)樹型A/D轉(zhuǎn)換器,逐次逼近型寄存器,定時和控制電路和三態(tài)輸出鎖存器等組成,其內(nèi)部結(jié)構(gòu)如圖2.7所示。 圖2.7 ADC0809內(nèi)部結(jié)構(gòu)圖 其中: (1)8路模擬通道選擇開關(guān)實現(xiàn)從8路輸入模擬量中選擇一路送給后面的比較器進行比較。 (2)地址鎖存與譯碼器用于當(dāng)ALE信號有效時,鎖存從ADDA、ADDB、ADDC 3根地址線上送來的3位地址,譯碼后產(chǎn)生通道選擇信號,從8路模擬通道中選擇當(dāng)前模擬通道。 (3)比較器,8位開關(guān)樹型A/D轉(zhuǎn)換器,逐次逼近型寄存器,定時和控制電路組成8位A/D轉(zhuǎn)換器,當(dāng)START信號有效時,就開始對當(dāng)前通道的模擬信號進行轉(zhuǎn)換,轉(zhuǎn)換完成后,把轉(zhuǎn)換得到的數(shù)字量送到8位三態(tài)鎖存器,同時通過引腳送出轉(zhuǎn)換結(jié)束信號。 (4)三態(tài)輸出鎖存器保存當(dāng)前模擬通道轉(zhuǎn)換得到的數(shù)字量,當(dāng)OE信號有效時,把轉(zhuǎn)換的結(jié)果送出。 ADC0809的工作流程為: (1)輸入3位地址,并使ALE=1,將地址存入地址鎖存器中,經(jīng)地址譯碼器從8路模擬通道中選通1路模擬量送給比較器。 (2)送START一高脈沖,START的上升沿使逐次寄存器復(fù)位,下降沿啟動A/D轉(zhuǎn)換,并使EOC信號為低電平。 (3)當(dāng)轉(zhuǎn)換結(jié)束時,轉(zhuǎn)換的結(jié)果送入到輸出三態(tài)鎖存器中,并使EOC信號回到高電平,通知CPU已轉(zhuǎn)換結(jié)束。 (4)當(dāng)CPU執(zhí)行一讀數(shù)據(jù)指令時,使OE為高電平,則從輸出端D0-D7讀出數(shù)據(jù)。 2.3 LED顯示系統(tǒng)設(shè)計2.3.1 LED基本結(jié)構(gòu)LED是發(fā)光二極管顯示器的縮寫。LED由于結(jié)構(gòu)簡單、價格便宜、與單片機接口方便等優(yōu)點而得到廣泛應(yīng)用。LED顯示器是由若干個發(fā)光二極管組成顯示字段的顯示器件。在單片機中使用最多的是七段數(shù)碼顯示器。LED七段數(shù)碼顯示器由8個發(fā)光二極管組成顯示字段,其中7個長條形的發(fā)光二極管排列成“日”字形,另一個圓點形的發(fā)光二極管在顯示器的右下角作為顯示小數(shù)點用,其通過不同的組合可用來顯示各種數(shù)字。LED引腳排列如下圖2.8所示:  
圖2.8 數(shù)碼管引腳圖 圖2.9 四位一體數(shù)碼管實物圖
led數(shù)碼管(LED Segment Displays)是由多個發(fā)光二極管封裝在一起組成“8”字型的器件,引線已在內(nèi)部連接完成,只需引出它們的各個筆劃,公共電極。led數(shù)碼管常用段數(shù)一般為7段有的另加一個小數(shù)點,還有一種是類似于3位“+1”型。位數(shù)有半位、1、2、3、4、5、6、8、10位等等....,led數(shù)碼管根據(jù)LED的接法不同分為共陰和共陽兩類,了解LED的這些特性,對編程是很重要的,因為不同類型的數(shù)碼管,除了它們的硬件電路有差異外,編程方法也是不同的。 2.3.2 LED顯示方式LED數(shù)碼管要正常顯示,就要用驅(qū)動電路來驅(qū)動數(shù)碼管的各個段碼,從而顯示出我們要的數(shù)位,因此根據(jù)LED數(shù)碼管的驅(qū)動方式的不同,可以分為靜態(tài)式和動態(tài)式兩類。 A、靜態(tài)顯示驅(qū)動: 靜態(tài)驅(qū)動也稱直流驅(qū)動。靜態(tài)驅(qū)動是指每個數(shù)碼管的每一個段碼都由一個單片機的I/O埠進行驅(qū)動,或者使用如BCD碼二-十進位*器*進行驅(qū)動。靜態(tài)驅(qū)動的優(yōu)點是編程簡單,顯示亮度高,缺點是占用I/O埠多,如驅(qū)動5個數(shù)碼管靜態(tài)顯示則需要5×8=40根I/O埠來驅(qū)動,要知道一個89S51單片機可用的I/O埠才32個呢。故實際應(yīng)用時必須增加*驅(qū)動器進行驅(qū)動,增加了硬體電路的復(fù)雜性。 B、動態(tài)顯示驅(qū)動: 數(shù)碼管動態(tài)顯示介面是單片機中應(yīng)用最為廣泛的一種顯示方式之一,動態(tài)驅(qū)動是將所有數(shù)碼管的8個顯示筆劃"a,b,c,d,e,f,g,dp "的同名端連在一起,另外為每個數(shù)碼管的公共極COM增加位元選通控制電路,位元選通由各自獨立的I/O線控制,當(dāng)單片機輸出字形碼時,所有數(shù)碼管都接收到相同的字形碼,但究竟是那個數(shù)碼管會顯示出字形,取決于單片機對位元選通COM端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開,該位元就顯示出字形,沒有選通的數(shù)碼管就不會亮。 透過分時輪流控制各個LED數(shù)碼管的COM端,就使各個數(shù)碼管輪流受控顯示,這就是動態(tài)驅(qū)動。在輪流顯示過程中,每位元數(shù)碼管的點亮?xí)r間為1~2ms,由于人的視覺暫留現(xiàn)象及發(fā)光二極體的余輝效應(yīng),盡管實際上各位數(shù)碼管并非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示資料,不會有閃爍感,動態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的I/O埠,而且功耗更低。 2.3.3 LED顯示器與單片機接口設(shè)計由于單片機的并行口不能直接驅(qū)動LED顯示器,所以,在一般情況下,必須采用專用的驅(qū)動電路芯片,使之產(chǎn)生足夠大的電流,顯示器才能正常工作[1]。如果驅(qū)動電路能力差,即負(fù)載能力不夠時,顯示器亮度就低,而且驅(qū)動電路長期在超負(fù)荷下運行容易損壞,因此,LED顯示器的驅(qū)動電路設(shè)計是一個非常重要的問題。 
圖2.10 數(shù)碼管與單片機連接圖
為了簡化數(shù)字式直流電壓表的電路設(shè)計,在LED驅(qū)動電路的設(shè)計上,可以利用單片機P0口上外接的上拉電阻來實現(xiàn),即將LED的A-G段顯示引腳和DP小數(shù)點顯示引腳并聯(lián)接到P0口與上拉電阻之間,這樣,就可以加大P0口作為輸出口的驅(qū)動能力,使得LED能按照正常的亮度顯示出數(shù)字,同時,四個數(shù)碼管的位選端分別接到P2口的低四位,如圖2.10所示。 2.4 電壓采集電路
由于使用的是5V基準(zhǔn)電壓,所以需要使用電阻分壓來實現(xiàn)電壓的采集,仿真時可以通過調(diào)節(jié)可變電阻來改變輸入電壓的大小,使輸入電壓在基準(zhǔn)電壓范圍內(nèi)改變,采集電路如下圖所示。 圖2.11 電壓采集電路 2.5 總體電路設(shè)計經(jīng)過以上的設(shè)計過程,可設(shè)計出基于單片機的簡易數(shù)字直流電壓表硬件電路原理圖(見附錄1)。此電路的工作原理是:+10V模擬電壓信號被信號采集電路采集后,由ADC08009的IN0通道進入(由于使用的IN0通道,所以ADDA,ADDB,ADDC均接低電平),經(jīng)過模/數(shù)轉(zhuǎn)換后,產(chǎn)生相應(yīng)的數(shù)字量經(jīng)過其輸出通道D0-D7傳送給STC89C51芯片的P1口,STC89C51負(fù)責(zé)把接收到的數(shù)字量經(jīng)過數(shù)據(jù)處理,控制P0口的電位變化從而驅(qū)動LED,同時它還通過其四位I/O口P2.0、P2.1、P2.2、P2.3產(chǎn)生位選信號控制數(shù)碼管的亮滅以及小數(shù)點位。此外,STC89C51還控制ADC0809的工作。其中,單片機STC89C51通過從ALE引腳輸出方波,接到ADC0809的CLOCK,P3.2發(fā)正脈沖啟動A/D轉(zhuǎn)換,P3.0置高從P1口讀取轉(zhuǎn)換結(jié)果送給LED顯示出來。 簡易數(shù)字直流電壓表的硬件電路已經(jīng)設(shè)計完成,就可以選取相應(yīng)的芯片和元器件,利用Proteus軟件繪制出硬件的原理,并仔細(xì)地檢查修改,直至形成完善的硬件原理圖。
1
第三章 軟件系統(tǒng)設(shè)計 第三章 軟件系統(tǒng)設(shè)計3.1 程序設(shè)計總方案
根據(jù)模塊的劃分原則,將該程序劃分初始化模塊,A/D轉(zhuǎn)換子程序和顯示子程序,這三個程序模塊構(gòu)成了整個系統(tǒng)軟件的主程序,如圖3.1所示。 圖3.1 系統(tǒng)程序流程圖 所謂初始化,是對將要用到的MCS_51系列單片機內(nèi)部部件或擴展芯片進行初始工作狀態(tài)設(shè)定,初始化子程序的主要工作是設(shè)置定時器的工作模式,初值預(yù)置,開中斷和打開定時器等[2]。 3.2 系統(tǒng)子程序設(shè)計3.2.1 AD轉(zhuǎn)換子程序A/D轉(zhuǎn)換子程序用來控制對輸入的模塊電壓信號的采集測量,并將對應(yīng)的數(shù)值存入相應(yīng)的內(nèi)存單元,其轉(zhuǎn)換流程圖如圖3.2所示。 
圖3.2 AD轉(zhuǎn)換流程圖
下面是部分A/D轉(zhuǎn)換程序:  
圖3.2 A/D轉(zhuǎn)換子程序 圖3.3 數(shù)據(jù)處理
圖3.2是執(zhí)行A/D轉(zhuǎn)換的初始程序,“ST”是啟動AD轉(zhuǎn)換,清楚單片機對ADC0809的控制;然后“EOC”等待轉(zhuǎn)換結(jié)束;“OE”允許輸出;最后將轉(zhuǎn)換結(jié)果存入P1口。 圖3.3是數(shù)據(jù)處理程序的一部分,將AD轉(zhuǎn)換結(jié)果轉(zhuǎn)變成BCD碼,028H是16進制數(shù),換算成十進制是40,ADC0809在基準(zhǔn)電壓為5V時的分辨率為19.6mV,此次課設(shè)需要的量程為10V,通過采壓電路的分壓與數(shù)據(jù)換算得出40,然后A、B兩個寄存器數(shù)據(jù)相乘。 3.2.2 顯示子程序顯示子程序采用動態(tài)掃描實現(xiàn)四位數(shù)碼管的數(shù)值顯示,在采用動態(tài)掃描顯示方式時,要使得LED顯示的比較均勻,又有足夠的亮度,需要設(shè)置適當(dāng)?shù)膾呙桀l率,當(dāng)掃描頻率在70HZ左右時,能夠產(chǎn)生比較好的顯示效果,一般可以采用間隔10ms對LED進行動態(tài)掃描一次,每一位LED的顯示時間為1ms。 3.3 編程軟件KEIL簡介Keil C51軟件提供豐富的庫函數(shù)和功能強大的集成開發(fā)調(diào)試工具,全Windows界面。另外重要的一點,只要看一下編譯后生成的匯編代碼,就能體會到Keil C51生成的目標(biāo)代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。下面詳細(xì)介紹Keil C51開發(fā)系統(tǒng)各部分功能和使用。 C51工具包的整體結(jié)構(gòu),uVision與Ishell分別是C51 for Windows和for Dos的集成開發(fā)環(huán)境(IDE),可以完成編輯、編譯、連接、調(diào)試、仿真等整個開發(fā)流程。開發(fā)人員可用IDE本身或其它編輯器編輯C或匯編源文件。然后分別由C51及C51編譯器編譯生成目標(biāo)文件(.OBJ)。目標(biāo)文件可由LIB51創(chuàng)建生成庫文件,也可以與庫文件一起經(jīng)L51連接定位生成絕對目標(biāo)文件(.ABS)。ABS文件由OH51轉(zhuǎn)換成標(biāo)準(zhǔn)的Hex文件,以供調(diào)試器dScope51或tScope51使用進行源代碼級調(diào)試,也可由仿真器使用直接對目標(biāo)板進行調(diào)試,也可以直接寫入程序存貯器如EPROM中。 Keil C51生成的目標(biāo)代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護性上有明顯的優(yōu)勢,因而易學(xué)易用。用過匯編語言后再使用C來開發(fā),體會更加深刻。 Keil C51軟件提供豐富的庫函數(shù)和功能強大的集成開發(fā)調(diào)試工具,全Windows界面。 3.4 PROTUES仿真軟件簡介Protues軟件是英國Labcenter electronics公司出版的EDA工具軟件。它不僅具有其它EDA工具軟件的仿真功能,還能仿真單片機及外圍器件。它是目前最好的仿真單片機及外圍器件的工具。雖然目前國內(nèi)推廣剛起步,但已受到單片機愛好者、從事單片機教學(xué)的教師、致力于單片機開發(fā)應(yīng)用的科技工作者的青睞。Proteus是世界上著名的EDA工具(仿真軟件),從原理圖布圖、代碼調(diào)試到單片機與外圍電路協(xié)同仿真,一鍵切換到PCB設(shè)計,真正實現(xiàn)了從概念到產(chǎn)品的完整設(shè)計。是目前世界上唯一將電路仿真軟件、PCB設(shè)計軟件和虛擬模型仿真軟件三合一的設(shè)計平臺,其處理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即將增加Cortex和DSP系列處理器,并持續(xù)增加其他系列處理器模型。在編譯方面,它也支持IAR、KEIL和MPLAB等多種編譯。 Protues軟件具有其它EDA工具軟件(例:multisim)的功能。這些功能是:原理布圖 、PCB自動或人工布線 、SPICE電路仿真。其革命性的特點:(1)互動的電路仿真。用戶甚至可以實時采用諸如RAM,ROM,鍵盤,馬達,LED,LCD,AD/DA,部分SPI器件,部分IIC器件。(2)仿真處理器及其外圍電路?梢苑抡51系列、AVR、PIC、ARM、等常用主流單片機。還可以直接在基于原理圖的虛擬原型上編程,再配合顯示及輸出,能看到運行后輸入輸出的效果。配合系統(tǒng)配置的虛擬邏輯分析儀、示波器等,Protues建立了完備的電子設(shè)計開發(fā)環(huán)境。 在PROTUES繪制好原理圖后,調(diào)入已編譯好的目標(biāo)代碼文件:*.HEX,可以在PROTUES的原理圖中看到模擬的實物運行狀態(tài)和過程。PROTUES 是單片機課堂教學(xué)的先進助手。PROTUES不僅可將許多單片機實例功能形象化,也可將許多單片機實例運行過程形象化。前者可在相當(dāng)程度上得到實物演示實驗的效果,后者則是實物演示實驗難以達到的效果。它的元器件、連接線路等卻和傳統(tǒng)的單片機實驗硬件高度對應(yīng)。這在相當(dāng)程度上替代了傳統(tǒng)的單片機實驗教學(xué)的功能,例:元器件選擇、電路連接、電路檢測、電路修改、軟件調(diào)試、運行結(jié)果等。課程設(shè)計、畢業(yè)設(shè)計是學(xué)生走向就業(yè)的重要實踐環(huán)節(jié)。由于PROTUES提供了實驗室無法相比的大量的元器件庫,提供了修改電路設(shè)計的靈活性、提供了實驗室在數(shù)量、質(zhì)量上難以相比的虛擬儀器、儀表,因而也提供了培養(yǎng)學(xué)生實踐精神、創(chuàng)造精神的平臺。隨著科技的發(fā)展“計算機仿真技術(shù)”已成為許多設(shè)計部門重要的前期設(shè)計手段。它具有設(shè)計靈活,結(jié)果、過程的統(tǒng)一的特點?墒乖O(shè)計時間大為縮短、耗資大為減少,也可降低工程制造的風(fēng)險。相信在單片機開發(fā)應(yīng)用中PROTUES也能茯得愈來愈廣泛的應(yīng)用。
第四章 仿真與實物調(diào)試 第四章 仿真與實物調(diào)試4.1 軟件仿真軟件調(diào)試的主要任務(wù)是排查錯誤,錯誤主要包括邏輯和功能錯誤,這些錯誤有些是顯性的,而有些是隱形的,可以通過仿真開發(fā)系統(tǒng)發(fā)現(xiàn)逐步改正。Proteus軟件可以對基于微控制器的設(shè)計連同所有的周圍電子器件一起仿真,用戶甚至可以實時采用諸如LED/LCD、鍵盤、RS232終端等動態(tài)外設(shè)模型來對設(shè)計進行交互仿真。Proteus支持的微處理芯片包括8051系列、AVR系列、PIC系列、HC11系列及Z80等等。Proteus可以完成單片機系統(tǒng)原理圖電路繪制、PCB設(shè)計,更為顯著點的特點是可以與u Visions3 IDE工具軟件結(jié)合進行編程仿真調(diào)試(仿真圖見附錄1)。 4.2 實物調(diào)試仿真電路圖調(diào)試完畢,可以實現(xiàn)正常功能,然后根據(jù)仿真電路圖進行實物連接(實物連接圖見附錄2),實物連接過程由于使用的面包板,所以插線要盡量整潔,保持接觸良好。實物調(diào)試過程中,由于使用到了10V電壓,所以使用了一個降壓模塊,不僅可 
圖4.1 降壓模塊
以穩(wěn)壓,也可以調(diào)節(jié)輸入電壓的大小。此次調(diào)試最大的問題就是數(shù)碼管顯示不穩(wěn)定、亮度不夠,通過適度調(diào)試延時周期,最終調(diào)試成功。 4.3 誤差分析(1)當(dāng)IN0口輸入電壓為零時,數(shù)碼管顯示00.00。顯示結(jié)果如圖(附錄3.1); (2)當(dāng)IN0口輸入電壓為1.5V時,數(shù)碼管顯示01.48。顯示結(jié)果如圖(附錄3.2); (3)當(dāng)IN0口輸入電壓為10V時,數(shù)碼管顯示0.0。顯示結(jié)果如圖(附錄3.3); 通過以上仿真測量結(jié)果可得到簡易數(shù)字電壓表與“標(biāo)準(zhǔn)”數(shù)字電壓表對比測試表,如下表4-1所示: 表4-1 電壓表對比測試表
由于單片機STC89C51為8位處理器,當(dāng)測量10V電壓時,即輸入電壓為5.00V,ADC0808輸出數(shù)據(jù)值為255(FFH),因此單片機最高的數(shù)值分辨率為0.0196V(5/255)。這就決定了電壓表的最高分辨率只能到0.0196V。 從上表可以看出,簡易數(shù)字電壓表測得的值基本上比標(biāo)準(zhǔn)電壓值偏小0-0.02V,這可以通過校正ADC0809的基準(zhǔn)電壓來解決。因為該電壓表設(shè)計時直接用5V的供電電源作為電壓,所以電壓可能有偏差。 1
參考文獻 參考文獻[1] 張毅坤,《單片微型計算機原理及應(yīng)用》,西安電子科技大學(xué)出版社,1998年09月 [2] 于殿泓、王新年,《單片機原理與程序設(shè)計實驗教程》,西安電子科技大學(xué)出版社,2007年5月 [3] 蔡美琴,《MCS-51系列單片機系統(tǒng)及其應(yīng)用》, 高等教育出版 [4] 江曉安、董秀峰、楊頌華,《數(shù)字電路技術(shù)》 第三版,西安電子科技大學(xué)出版社 ,2010年1月 1
參考文獻 1
附錄 
附錄1 仿真電路圖1
附錄 
附錄2 實物連接圖
附錄 附錄3 顯示示數(shù)圖附錄3.1 
附錄3.2 

附錄3.3
- OE BIT P3.0 ;ADC0809的OE端
- EOC BIT P3.1 ;ADC0809的EOC端
- CLOCK BIT P2.6
- ST BIT P3.2 ;ADC0809的START和ALE端
- LED_0 DATA 30H ;顯示緩沖區(qū)
- LED_1 DATA 31H
- LED_2 DATA 32H
- LED_3 DATA 33H
- ADC DATA 34H ;存放轉(zhuǎn)換后的數(shù)據(jù)
-
- ;//////主程序開始////////
-
- ORG 0000H
- AJMP START
- ORG 000BH
- LJMP TT0
- ORG 0030H
- ;------初始化-----------
-
- START:
- MOV SP,#60H ;設(shè)置堆棧
- MOV LED_0,#00H ;清空顯示緩沖區(qū)
- MOV LED_1,#00H
- MOV LED_2,#00H
- MOV LED_3,#00H
- MOV DPTR,#TABLE ;送字型碼表首地
-
- MOV TMOD,#02H ;將02H送到TMOD寄存器,這里是設(shè)定定時器模式
- MOV TH0,#01H
- MOV TL0,#01H
- MOV IE,#82H ;130
- SETB TR0
-
- ;------ADC0809轉(zhuǎn)換---------
-
- WAIT:
- CLR ST
- SETB ST
- CLR ST ;啟動轉(zhuǎn)換
- JNB EOC,$ ;等待轉(zhuǎn)換結(jié)束
- SETB OE ;允許輸出
- MOV ADC,P1 ;暫存轉(zhuǎn)換結(jié)果
-
- ;------數(shù)據(jù)處理,已備顯示----------
-
- MOV A,ADC ;將AD轉(zhuǎn)換結(jié)果轉(zhuǎn)換成BCD碼
- MOV B,#028H ;乘以40MV
- MUL AB
- MOV R7,A
- MOV R6,B
- HB2:
- CLR A ;BCD碼初始化
- CLR C
- MOV R3,A
- MOV R4,A
- MOV R5,A
- MOV R2,#10H ;轉(zhuǎn)換雙字節(jié)十六進制整數(shù)
- HB3:
- MOV A,R7 ;從高端移出待轉(zhuǎn)換數(shù)的一位到CY中
- RLC A
- MOV R7,A
- MOV A,R6
- RLC A
- MOV R6,A
- MOV A,R5 ;BCD碼帶進位自身相加,相當(dāng)于乘2
- ADDC A,R5
- DA A ;十進制調(diào)整
- MOV R5,A
- MOV A,R4
- ADDC A,R4
- DA A
- MOV R4,A
- MOV A,R3
- ADDC A,R3
- MOV R3,A ;雙字節(jié)十六進制數(shù)的萬位數(shù)不超過6,不用調(diào)整
- DJNZ R2,HB3
- MOV A,R5
- SWAP A
- ANL A,#0FH
- MOV LED_0,A
- MOV A,R4
- ANL A,#0FH
- MOV LED_1,A
- MOV A,R4
- SWAP A
- ANL A,#0FH
- MOV LED_2,A
- MOV A,R3
- ANL A,#0FH
- MOV LED_3,A
- LCALL DISP ;調(diào)用顯示子程序
- AJMP WAIT
-
- ;//////數(shù)碼管顯示子程序//////////
-
- DISP:
- MOV A,LED_0 ;數(shù)碼顯示子程序
- MOVC A,@A+DPTR
- CLR P2.3
- MOV P0,A
- LCALL DELAY
- SETB P2.3
- MOV A,LED_1
- MOVC A,@A+DPTR
- CLR P2.2
- MOV P0,A
- LCALL DELAY
- SETB P2.2
- MOV A,LED_2
- MOVC A,@A+DPTR
- CLR P2.1
- MOV P0,A
- SETB P0.7 ;小數(shù)點
- LCALL DELAY
- SETB P2.1
- MOV A,LED_3
- MOVC A,@A+DPTR
- CLR P2.0
- MOV P0,A
- LCALL DELAY
- SETB P2.0
- RET
-
- ;//////延時子程序///////////
-
- DELAY: MOV R6,#02H ;循環(huán)整個延時程序10次,延時5毫秒
- D1: MOV R7,#0EEH ;循環(huán)下一條程序250次
- DJNZ R7,$ ;DJNZ循環(huán)轉(zhuǎn)移指令,將第一個數(shù)減1,是否為0,不為0則轉(zhuǎn)移
- ;到指定地點,為0則往下執(zhí)行
- DJNZ R6,D1
- RET
-
- ;//////數(shù)碼管字形碼表///////////
-
- TABLE:
- DB 3FH,06H,5BH,4FH,66H
- DB 6DH,7DH,07H,7FH,6FH
-
- ORG 0100H
- TT0:
- CPL CLOCK ;產(chǎn)生ADC0808/0809時鐘脈沖信號
- RETI
- END
復(fù)制代碼
完整的Word格式文檔51黑下載地址:
基于單片機系統(tǒng)的數(shù)字電壓表.zip
(716.57 KB, 下載次數(shù): 200)
2018-7-21 17:28 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|