仿真版本:proteus 7.8
程序編譯器:keil 4/keil 5
編程語言:C語言
設計編號:S0005
功能說明
1、以單片機為控制核心設計數(shù)字電壓表;
2、可以測量0~5V輸入電壓值;
3、LED數(shù)碼管顯示;
4、最小分辨率為0.01V,測量誤差約為±0.01V。
設計要求
本課題是利用單片機設計一個數(shù)字電壓表,能夠測量0-5V之間的直流電壓值,四位數(shù)碼管顯示,使用的元器件數(shù)目較少。外界電壓模擬量輸入到A/D轉換部分的輸入端,通過ADC0809轉換變?yōu)?a class="article-link" target="_blank" href="/baike/1546930.html">數(shù)字信號,輸送給單片機。然后由單片機給數(shù)碼管數(shù)字信號,控制其發(fā)光,從而顯示數(shù)字。
選擇AT89C51作為單片機芯片,選用四位8段共陰極LED數(shù)碼管實現(xiàn)電壓顯示,利用ADC0809作為數(shù)模轉換芯片。將數(shù)據(jù)采集接口電路輸入電壓傳入ADC0809數(shù)模轉換元件,經(jīng)轉換后通過D0至D7與單片機P0口連接,把轉換完的模擬信號以數(shù)字信號的信號的形式傳給單片機,信號經(jīng)過單片機處理從LED數(shù)碼顯示管顯示。P2口接數(shù)碼管位選,P1接數(shù)碼管,實現(xiàn)數(shù)據(jù)的動態(tài)顯示,
仿真圖
原理圖
PCB
程序(提供源文件)
系統(tǒng)上電后,配置數(shù)碼管個引腳,然后對其進行初始化,再調用的讀寫函數(shù),可將采集處理后的電壓數(shù)值實時顯示。其程序流程圖如圖所示。
? 由于ADC0809在進行A/D轉換時需要有CLK信號,而此時的ADC0809的CLK是連接在AT89C51單片機的40管腳,也就是要求從40管腳輸出CLK信號供ADC0809使用。因此產(chǎn)生CLK信號的方法就等于從軟件產(chǎn)生。電壓表系統(tǒng)有主程序,A/D轉換子程序、按鍵子程序和顯示子程序。
顯示函數(shù)
code unsigned char seven_seg[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
char i;
void display0()
{
P0 = 0xff;
switch(i)
{
case 0:P2 = 0x10;P0 = seven_seg[shuju / 1000 % 10];break;
case 1:P2 = 0x20;P0 = seven_seg[shuju / 100 % 10]&0x7f;break;
case 2:P2 = 0x40;P0 = seven_seg[shuju / 10 % 10];break;
case 3:P2 = 0x80;P0 = seven_seg[shuju % 10];break;
case 4:P2 = 0x01;P0 = seven_seg[1];break;
case 5:P2 = 0x02;P0 = seven_seg[2];break;
case 6:P2 = 0x04;P0 = 0xff;break;
case 7:P2 = 0x08;P0 = seven_seg[shuju / 10000 % 10];break;
}
i++;if(i >= 8)i = 0;
}