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

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