設計要求
1.以MCS-51系列單片機為核心器件,設計一個簡單的直流數字電壓表;
2.電壓量程:0~5V;
3.最小分辨率:0.01V;
4.所用元器件較少,成本低,且測量精度和可靠性較高;
系統概述
本設計是基于Atmel 51單片機開發平臺和自動控制原理的基礎上實現的一種數字電壓表系統。該系統采用AT89C51單片機作為控制核心,以ADC0809為模數轉換芯片,實現量程0到5V的被測電壓數據采樣;LCD1602字符液晶顯示被測電壓值。
同時,數字電壓表測量精度為0.01V,能夠滿足一般測量要求,系統框架如下圖所示。
系統框架
仿真電路圖
數字電壓表仿真電路圖
操作說明
原理圖
原理圖
PCB圖
PCB圖
仿真結果分析
打開Proteus仿真文件,文件后綴名為DSN.雙擊單片機,加載DianYa.hex文件(位于C程序文件夾中),運行仿真,結果如下圖所示。
LCD顯示電壓值1.84V
通過點擊滑動變阻器RP2上下紅色箭頭,模擬被測電壓值的改變(0~5V之間),LCD實時跟蹤顯示電壓的變化。
下圖為調整滑動變阻器后,LCD顯示的電壓值為4.25V,與Volts電壓表顯示結果一致。電壓測量值均為4.25V
綜上所述,數字電壓表Proteus仿真設計運行效果滿足設計要求。
部分C程序
#include"include.h"
#define TIME0H 0x3C
#define TIME0L 0xB0
uchar uc_Clock=0; //定時器0中斷計數
bit b_DATransform=0;
void vShowVoltage(uint uiNumber)
{
uchar ucaNumber[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('.');
}
}
void main()
{
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)參考資料;
資源截圖
全套資源
仿真文件
原理圖及PCB
C程序文件
Visio流程圖文件
資源獲取方法
資源獲取方法
資源獲取方法
重要的事情說三遍!!!!!!!!!!!
由于本設計為我的原創設計,
獲取以上所有資源內容,請搜索關注我的公-眾-號:交院小智