王剛
摘要: 本文設(shè)計(jì)了一個(gè)簡(jiǎn)易直流數(shù)字電壓表,通過(guò)Keil軟件的程序編譯、調(diào)試和Proteus的硬件仿真,利用單片機(jī)、A/D轉(zhuǎn)換芯片以及數(shù)碼管對(duì)0~5V的模擬直流電壓進(jìn)行測(cè)量、顯示。本設(shè)計(jì)具有電路結(jié)構(gòu)簡(jiǎn)單、成本低廉、精度較高等特點(diǎn)。通過(guò)簡(jiǎn)易數(shù)字電壓表的硬件仿真,對(duì)虛擬設(shè)備的教學(xué)展示及應(yīng)用系統(tǒng)的設(shè)計(jì)具有較大作用。
Abstract: This paper designed a simple DC digital voltmeter, through the Keil software program compilation, debugging and Proteus hardware simulation, single-chip, A / D conversion chip and digital tube 0 ~ 5V analog DC voltage are used for measurement and display. The design has a simple circuit structure, low cost, high precision. Through the simple digital voltmeter hardware simulation, it is important for the virtual equipment teaching display and application system design.
關(guān)鍵詞: Proteus;Keil;單片機(jī);A/D轉(zhuǎn)換;硬件仿真
Key words: Proteus;Keil;single chip microcomputer;A/D conversion;hardware simulation
中圖分類(lèi)號(hào):TM933.22 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1006-4311(2018)01-0223-02
0 引言
電壓表可分為模擬式和數(shù)字式兩大類(lèi)。隨著半導(dǎo)體技術(shù)、集成電路和微處理技術(shù)的發(fā)展,數(shù)字電路和數(shù)字化測(cè)量技術(shù)有了巨大進(jìn)步,促使了數(shù)字電壓表的快速發(fā)展。相對(duì)于指針式電壓表,數(shù)字電壓表一般具有準(zhǔn)確度高、數(shù)字顯示、讀數(shù)迅速準(zhǔn)確、精度高、操作簡(jiǎn)便等優(yōu)點(diǎn),使其獲得越來(lái)越廣泛的應(yīng)用。
本設(shè)計(jì)選用Proteus和Keil的開(kāi)發(fā)平臺(tái)。Proteus是英國(guó)著名的EDA工具,將電路仿真軟件、PCB設(shè)計(jì)軟件和虛擬模型仿真軟件三合一的設(shè)計(jì)平臺(tái),其支持的處理器模型種類(lèi)繁多。在編譯方面,支持多種編譯器。Keil 是美國(guó)Keil Software公司出品的51系列兼容單片機(jī)軟件開(kāi)發(fā)系統(tǒng)。Keil提供C編譯器、宏匯編、鏈接器、庫(kù)管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開(kāi)發(fā)方案,通過(guò)一個(gè)集成開(kāi)發(fā)環(huán)境將這些部分組合在一起,使程序設(shè)計(jì)事半功倍。
1 系統(tǒng)總體設(shè)計(jì)
考慮系統(tǒng)功能及要求,本次設(shè)計(jì)的簡(jiǎn)易直流數(shù)字電壓表主要由三個(gè)模塊組成:A/D轉(zhuǎn)換模塊、數(shù)據(jù)處理模塊及顯示模塊。A/D轉(zhuǎn)換模塊采用芯片ADC0831,數(shù)據(jù)處理模塊選用單片機(jī)STC89C52,顯示模塊采用四位一體的共陽(yáng)數(shù)碼管。系統(tǒng)組成框圖如圖1所示。
2 硬件仿真設(shè)計(jì)
系統(tǒng)仿真電路主要由A/D轉(zhuǎn)換、數(shù)據(jù)處理、顯示等部分組成,仿真電路如圖2所示。
①A/D轉(zhuǎn)換:常用的A/D轉(zhuǎn)換方式可分為并行A/D和串行A/D。并行方式轉(zhuǎn)換效率較高,但芯片引腳較多;串行方式所用芯片引腳少,封裝小,但需要軟件處理才能得到所需數(shù)據(jù)。使用串行器件可節(jié)省單片機(jī)的I/O資源,電路簡(jiǎn)單。本次設(shè)計(jì)選用串行A/D轉(zhuǎn)換芯片ADC0831。該芯片是8引腳雙列直插式A/D轉(zhuǎn)換器, 8位的分辨率(最高分辨可達(dá)256級(jí)),可以適應(yīng)一般的模擬量轉(zhuǎn)換要求。芯片的模擬電壓輸入在0~5V之間。轉(zhuǎn)換速度快且穩(wěn)定性能強(qiáng)。由于它體積小,兼容性強(qiáng),轉(zhuǎn)換速度較高(轉(zhuǎn)換時(shí)間32uS),單電源供電,功耗低(15mW),性?xún)r(jià)比高并適用于各種便攜式智能儀表而深受單片機(jī)設(shè)計(jì)愛(ài)好者及企業(yè)歡迎。在本電路中ADC0831的輸入口VIN+接收0~5V的模擬量直流電壓,經(jīng)過(guò)模數(shù)轉(zhuǎn)換后,產(chǎn)生的數(shù)字量經(jīng)過(guò)其輸出通道DO傳送給單片機(jī)的P1.2口。ADC0831的片選信號(hào)由單片機(jī)P1.0口控制,時(shí)鐘信號(hào)由單片機(jī)P1.1口為其提供。
②數(shù)據(jù)處理:選用單片機(jī)STC89C52。在實(shí)時(shí)檢測(cè)和自動(dòng)控制的應(yīng)用系統(tǒng)中,單片機(jī)往往作為一個(gè)核心部件來(lái)使用。STC89C52是低功耗、高性能的8位單片機(jī)。它因體積小、成本低、功能強(qiáng)而得到了廣泛的應(yīng)用。在本電路中構(gòu)成的單片機(jī)最小系統(tǒng)負(fù)責(zé)把模數(shù)轉(zhuǎn)換后的數(shù)字量經(jīng)過(guò)數(shù)據(jù)處理,產(chǎn)生正確的顯示段碼,經(jīng)過(guò)P2.0~P2.7通過(guò)數(shù)碼管顯示出來(lái)。同時(shí)單片機(jī)還通過(guò)其I/O口的P0.1~P0.4作為顯示部分的位選信號(hào),送給數(shù)碼管的位選端,控制對(duì)應(yīng)數(shù)碼管的亮滅。
③數(shù)據(jù)顯示:選用一個(gè)四位一體的共陽(yáng)7段數(shù)碼管,用于顯示簡(jiǎn)易直流數(shù)字電壓表測(cè)量到的電壓值。數(shù)碼管顯示分為動(dòng)態(tài)顯示和靜態(tài)顯示。如果采用靜態(tài)顯示控制4個(gè)LED,需要對(duì)單片機(jī)的I/O口進(jìn)行擴(kuò)展,這將大大增加硬件電路的復(fù)雜性及成本,因此本設(shè)計(jì)選用動(dòng)態(tài)顯示。動(dòng)態(tài)顯示是利用人的視覺(jué)暫留效應(yīng),按位輪流點(diǎn)亮各位LED,如果每位LED閃動(dòng)的頻率足夠高,就可以給人一種穩(wěn)定顯示的視覺(jué)效果。本電路中每位數(shù)碼管的各個(gè)段碼分別與單片機(jī)P2口連接,單片機(jī)段選信號(hào)的輸出信號(hào)經(jīng)過(guò)電阻來(lái)控制數(shù)碼管某一段點(diǎn)亮,電阻起到限流作用,以防止電流過(guò)大燒壞數(shù)碼管。數(shù)碼管的位選端用于接收單片機(jī)P0口產(chǎn)生的位選碼。endprint
3 軟件設(shè)計(jì)
簡(jiǎn)易直流數(shù)字電壓表的程序編寫(xiě)采用C語(yǔ)言進(jìn)行設(shè)計(jì),C語(yǔ)言因執(zhí)行效率高、可移植性好,可直接對(duì)硬件進(jìn)行操作等多種優(yōu)勢(shì)而被廣泛使用。程序設(shè)計(jì)采用查詢(xún)方式,能夠?qū)ν獠侩妷旱淖兓瘜?shí)時(shí)查詢(xún)、數(shù)據(jù)處理,使數(shù)碼顯示隨之發(fā)生相應(yīng)的變化。程序的主函數(shù)包括三部分:讀取A/D轉(zhuǎn)換數(shù)據(jù)函數(shù)READ_ADC0831( )、數(shù)據(jù)處理函數(shù)data_process(voltage)、動(dòng)態(tài)顯示函數(shù)seg_display( )。以下為主函數(shù)。
void main ( )
{ unsigned int voltage;
while(1)
{ unsigned char READ_ADC0831( );
voltage=READ_ADC0831( );
data_process(voltage);
seg_display( );delay_ms(1);}}
①讀取A/D轉(zhuǎn)換數(shù)據(jù)函數(shù):A/D轉(zhuǎn)換子函數(shù)用來(lái)將輸入的模擬直流電壓信號(hào)轉(zhuǎn)換為對(duì)應(yīng)的數(shù)值并存入單片機(jī)相應(yīng)的內(nèi)存單元。通過(guò)查閱ADC0831的相關(guān)資料,按其工作時(shí)序圖,進(jìn)行讀取轉(zhuǎn)換程序進(jìn)行設(shè)計(jì),并在主函數(shù)中調(diào)用A/D轉(zhuǎn)換數(shù)據(jù)函數(shù)。
②動(dòng)態(tài)顯示函數(shù):采用動(dòng)態(tài)掃描法實(shí)現(xiàn)四位數(shù)碼管的數(shù)值顯示。動(dòng)態(tài)掃描顯示過(guò)程:在某一時(shí)段只讓其中1位的LED位選口有效,并在段選口上送出相應(yīng)的字形顯示編碼。這時(shí)在選中的LED上顯示指定字符,其他位的LED處于熄滅狀態(tài);延時(shí)一段時(shí)間,下一時(shí)段按順序選通另外1位LED,并送出相應(yīng)的字形顯示編碼,依此規(guī)律循環(huán)下去,直到最后1位LED被選通,顯示指定字符。反復(fù)進(jìn)行以上LED動(dòng)態(tài)掃描過(guò)程,就能實(shí)現(xiàn)各位LED穩(wěn)定顯示字符的效果。動(dòng)態(tài)顯示函數(shù)設(shè)計(jì)如下:
void seg_display(void)
{#define segdata P2
#define segselt P0
unsigned char code segtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x98};
unsigned char i,scan;scan=1;
for(i=0;i<5;i++){segselt =scan;segdata =segtab[disp[i]];
delay_ms(1); scan<<=1;}}
③數(shù)據(jù)處理函數(shù):將A/D轉(zhuǎn)換程序的8位二進(jìn)制數(shù)(00H-FFH)轉(zhuǎn)換成0.000~5.000的字符形式,4位LED數(shù)碼管上需要顯示其中的高四位,數(shù)據(jù)處理函數(shù)采用拆字法實(shí)現(xiàn),設(shè)計(jì)如下:
void data_process(unsigned char value)
{unsigned int temp;temp=value*196;
disp[0]=temp/10000;
disp[1]=(temp/1000)%10;
disp[2]=(temp/100)%10;
disp[3]=(temp/10)%10;}
4 測(cè)量結(jié)果
硬件仿真電路調(diào)試運(yùn)行后,通過(guò)數(shù)碼管顯示的數(shù)字與仿真電路中電壓表所測(cè)得的電壓值進(jìn)行比較,成功的取得了一組測(cè)量數(shù)據(jù)。測(cè)量結(jié)果如表1所示。
5 結(jié)語(yǔ)
通過(guò)系統(tǒng)的總體設(shè)計(jì)、搭建硬件仿真電路、軟件設(shè)計(jì)、軟硬聯(lián)調(diào),成功設(shè)計(jì)了簡(jiǎn)易直流數(shù)字電壓表,該表具備功能可靠、精度較高、結(jié)構(gòu)簡(jiǎn)單等優(yōu)點(diǎn)。此次設(shè)計(jì)的硬件仿真適合應(yīng)用于虛擬儀器的教學(xué)演示和實(shí)際應(yīng)用系統(tǒng)設(shè)計(jì)等方面。
參考文獻(xiàn):
[1]王靜霞.單片機(jī)基礎(chǔ)與應(yīng)用[M].北京:高等教育出版社,2016.
[2]朱曉冷.直流數(shù)字電壓表設(shè)計(jì)與Proteus應(yīng)用[J].通信電源技術(shù),2012(2).
[3]李超.基于A8T95C1單片機(jī)的信號(hào)監(jiān)控系統(tǒng)設(shè)計(jì)[J].工業(yè)控制計(jì)算機(jī),2015(1).
[4]彭偉.單片機(jī)C語(yǔ)言程序設(shè)計(jì)實(shí)訓(xùn)100例[M].北京:北京理工大學(xué)出版社,2011.endprint