嚴 敏
(江蘇旅游職業(yè)學院信息工程學院,江蘇揚州225127)
數字電壓表具有測量速度快、測量精度高及測量結果可視化等優(yōu)點,已用于智能測量控制的某些領域[1-2]。本文設計的基于Proteus和MedWin V3.0直流數字電壓表,以AT89C51為主控制器測量單通道模擬電壓,在ADC0832模數轉換后,輸出數字電壓值在LCD1602屏幕上實時顯示。
該設計使用單片機芯片AT89C51控制ADC0832進行模數轉換,ADC0832輸入被測0~5 V模擬電壓,經模數轉換后,輸出的數字電壓值介于0x00~0xFF之間。單片機讀取ADC0832模數轉換結果,進行數值量程變換,再送至液晶屏LCD1602實時顯示,系統(tǒng)設計的總體結構如圖1所示。
圖1 系統(tǒng)的總體結構
設計電路時,將引腳VCC接5 V,將GND引腳接地,并將引腳CS(芯片選擇使能)連接到微控制器AT89C51的P2.5端口,引腳CLK(時鐘輸入端子)連接到AT89C51的P2.6端口,引腳DI(數據信號輸入)和引腳DO(數據信號輸出)在通信期間不同時有效,并且與AT89C51的接口是雙向的,所以將它們并聯(lián)一起連接到AT89C51的P2.7端口,引腳CH0(模擬輸入通道0)經過滑動變阻器連接到被測模擬電壓,由于只測量一路電壓,所以不使用引腳CH1(模擬輸入通道1),如圖2所示。當然,這里也可以將被測模擬電壓連接到引腳CH1,不使用引腳CH0。
圖2 ADC0832電路原理
當ADC0832不工作時,CS為高電平;當ADC082處于執(zhí)行模數轉換工作狀態(tài)時,則將CS設置為低電平,并且保持低電平狀態(tài)一直到模數轉換完成。根據ADC0832的工作時序要求,DI必須在CLK的第1個脈沖的下降沿之前置為高電平,表示啟動信號。DI在CLK第2、3個脈沖的下降沿之前分別輸入1、0,選擇CH0單通道;如果選擇CH1單通道,這里DI應分別輸入1、1。DI在CLK第3個脈沖的下降沿之后失效,此時DO開始有效。從CLK第4個脈沖下降沿開始一直到第11個脈沖下降沿結束,ADC0832從DO依次輸出最高位數據直到最低位數據,完成一個字節(jié)8位數據的輸出。
LCD1602屏幕可以顯示兩行字符,每行16個,總共32個字符。在電路設計時,引腳VSS接地,引腳VDD接5 V,引腳VEE接地。引腳RS(數據/指令寄存器選擇)、引腳R/W(讀/寫選擇)、引腳E(使能端)分別連接到AT89C51的P2端口的P2.0、P2.1、P2.2。引腳D0~D7(8位數據)直接連接到AT89C51的P0端口的P0.0~P0.7,這里使用上拉電阻RP1的目的是增加驅動能力。
圖3 LCD1602電路原理
LCD1602內部有一個80*8位的DDRAM緩沖區(qū),字符顯示位與DDRAM地址的對應關系如表1所示。
表1 顯示位與DDRAM的對應關系
由表1可知,DDRAM第1行的地址從00H開始到27H結束,第2行的地址從40H開始到67H結束,每行40個地址,而LCD1602每行顯示16個字符,因此在編寫程序的時候,選用DDRAM的前16個地址即可,需要特別注意的是第2行地址是從40H開始的。如果要在LCD1602屏幕的某行某列顯示一個字符,就往某行某列對應的DDRAM地址寫入這個字符對應的ASCII碼,這時會發(fā)現(xiàn)液晶屏幕上并不能正常顯示出這個字符,原因就是必須在該地址的基礎上還要加上80H。比如,要在第2行第2列顯示電壓單位伏特的符號V,就要先將第2行第2列對應的DDRAM地址41H加上80H,即C1H,然后在C1H地址寫入V字符對應的ASCII碼0x56,這樣才能正常顯示,其他字符的顯示依此類推,不再贅述。
根據ADC0832的工作時序要求和LCD1602液晶顯示要求,該系統(tǒng)控制程序在MedwinV3.0開發(fā)軟件中用C51語言編寫完成,實現(xiàn)電壓表的測量功能。
主程序代碼設計如下。
A/D轉換子程序代碼設計如下。
LCD1602液晶屏的驅動程序編寫較復雜,要弄清楚1602各個操作指令的用法和意義,操作指令包括顯示模式的設置、顯示開關控制、輸入模式控制、從DDRAM中讀取數據、對DDRAM進行寫數據、清屏、光標歸位設定、數據地址指針設置及LCD目前忙碌工作標志等[3]。其部分代碼設計如下。
為了便于電壓測量結果的分析,在RV2兩端加一個虛擬電壓表,同時觀察虛擬電壓表和LCD1602顯示數值的大小,分別如圖4所示。
圖4 數字電壓表
在Medwin V3.0開發(fā)軟件中編寫程序、修改調試程序、編譯后生成十六進制HEX文件,打開Proteus電路設計圖,將其加載到AT89C51芯片中并啟動仿真按鈕以查看系統(tǒng)設計的仿真結果。根據分壓原理,改變滑動變阻器RV2的阻值大小,從而改變ADC0832輸入通道CH0的被測模擬電壓值,此時液晶LCD1602顯示的電壓值隨之改變,并精確到小數點后兩位。
經過多次測量可得:被測模擬電壓和模數轉換后的數字電壓之間誤差較小,約為10 mV,小于8位分辨率的電壓精度5 V/28≈19.53 mV。由此可見,測量精度高,滿足本設計要求。
本文基于Proteus和MedWin V3.0設計了直流數字電壓表,在MedWin V3.0開發(fā)環(huán)境中編寫、調試單片機C51程序,編譯完成后生成HEX文件并將其加載到AT89C51芯片中,以便在Proteus仿真平臺上進行驗證。Proteus和MedWin V3.0聯(lián)合使用,不僅對單片機課程有較好的項目演示功能,而且對單片機項目的開發(fā)設計具有很大的實際意義。