基于Atmel 51單片機開發(fā)平臺和自動控制原理的數字電壓表系統(tǒng)
基于Atmel 51單片機開發(fā)平臺和自動控制原理的數字電壓表系統(tǒng)
設計要求
1.以MCS-51系列單片機為核心器件,設計一個簡單的直流數字電壓表;
2.電壓量程:0~5V;
3.最小分辨率:0.01V;
4.所用元器件較少,成本低,且測量精度和可靠性較高;
系統(tǒng)概述
本設計是基于Atmel 51單片機開發(fā)平臺和自動控制原理的基礎上實現的一種數字電壓表系統(tǒng)。該系統(tǒng)采用AT89C51單片機作為控制核心,以ADC0809為模數轉換芯片,實現量程0到5V的被測電壓數據采樣;LCD1602字符液晶顯示被測電壓值。
同時,數字電壓表測量精度為0.01V,能夠滿足一般測量要求,系統(tǒng)框架如下圖所示。
仿真電路圖

原理圖
PCB圖
仿真結果分析
打開Proteus仿真文件,文件后綴名為DSN.雙擊單片機,加載DianYa.hex文件(位于C程序文件夾中),運行仿真,結果如下圖所示。
圖中可以看出,LCD顯示AD轉換通道IN0電壓(Voltage)的大小為1.84V,用Proteus軟件自帶的電壓表(Volts)測量的結果為1.85V,兩者偶有0.01V的偏差,屬于仿真正常現象。
通過點擊滑動變阻器RP2上下紅色箭頭,模擬被測電壓值的改變(0~5V之間),LCD實時跟蹤顯示電壓的變化。
下圖為調整滑動變阻器后,LCD顯示的電壓值為4.25V,與Volts電壓表顯示結果一致。
綜上所述,數字電壓表Proteus仿真設計運行效果滿足設計要求。
部分C代碼
#include"include.h"#define TIME0H 0x3C#define TIME0L 0xB0ucharuc_Clock=0;//定時器0中斷計數bitb_DATransform=0;
voidvShowVoltage(uintuiNumber){
ucharucaNumber[3],ucCount;
if(uiNumber>999)
uiNumber=999;
ucaNumber[0]=uiNumber/100;//把計算數字的每個位存入數組。ucaNumber[1]=(uiNumber-100*(int)ucaNumber[0])/10;
ucaNumber[2]=uiNumber-100*(int)ucaNumber[0]-10*ucaNumber[1];
for(ucCount=0;ucCount<3;ucCount++)
{
vShowOneChar(ucaNumber[ucCount]+48);//從首位到末位逐一輸出。if(ucCount==0)
vShowOneChar('.');
}}
voidmain(){
TMOD=0x01;//定時器0,模式1。TH0=TIME0H;
TL0=TIME0L;
TR0=1;//啟動定時器。ET0=1;//開定時器中斷。EA=1;//開總中斷vdInitialize();
vWriteCMD(0x84);//寫入顯示起始地址(第一行第4個位置)vShowChar("voltage");
vWriteCMD(0xC9);
vShowChar("(V)");
while(1)
{
if(b_DATransform==1)
{
b_DATransform=0;
vWriteCMD(0xC4);
vShowVoltage(uiADTransform());
}
}}
分享的內容有
(1)基于51單片機的數字電壓表設計論文完整版;
(2)C程序;
(3)Proteus仿真文件;
(4)原理圖及PCB文件;
(5)Visio流程圖;
(6)元器件清單;
(7)參考資料;
分享如下