生活随笔
收集整理的這篇文章主要介紹了
基于proteus软件仿真AT89C52的电压表(附工程文件)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
通過ADC0808芯片進(jìn)行高精度的電壓轉(zhuǎn)換,再通過LCD顯示。
電壓范圍0-5V,精度0.05V
ADC0808是采樣分辨率為8位的、以逐次逼近原理進(jìn)行模/數(shù)轉(zhuǎn)換的器件。其內(nèi)部有一個(gè)8通道多路開關(guān),它可以根據(jù)地址碼鎖存譯碼后的信號(hào),只選通8路模擬輸入信號(hào)中的一個(gè)進(jìn)行A/D轉(zhuǎn)換。
ADC0808是ADC0809的簡(jiǎn)化版本,功能基本相同。一般在硬件仿真時(shí)采用ADC0808進(jìn)行A/D轉(zhuǎn)換,實(shí)際使用時(shí)采用ADC0809進(jìn)行A/D轉(zhuǎn)換。
ADC0808芯片有28條引腳,采用雙列直插式封裝,各引腳功能如下:
1~5和26~28(IN0~IN7):8路模擬量輸入端。
8、14、15和17~21:8位數(shù)字量輸出端。
22(ALE):地址鎖存允許信號(hào),輸入,高電平有效。
6(START): A/D轉(zhuǎn)換啟動(dòng)脈沖輸入端,輸入一個(gè)正脈沖(至少100ns寬)使其啟動(dòng)(脈沖上升沿使0808復(fù)位,下降沿啟動(dòng)A/D轉(zhuǎn)換)。
7(EOC): A/D轉(zhuǎn)換結(jié)束信號(hào),輸出,當(dāng)A/D轉(zhuǎn)換結(jié)束時(shí),此端輸出一個(gè)高電平(轉(zhuǎn)換期間一直為低電平)。
9(OE):數(shù)據(jù)輸出允許信號(hào),輸入,高電平有效。當(dāng)A/D轉(zhuǎn)換結(jié)束時(shí),此端輸入一個(gè)高電平,才能打開輸出三態(tài)門,輸出數(shù)字量。
10(CLK):時(shí)鐘脈沖輸入端。要求時(shí)鐘頻率不高于640KHZ。
12(VREF(+))和16(VREF(-)):參考電壓輸入端
11(Vcc):主電源輸入端。
13(GND):地。
23~25(ADDA、ADDB、ADDC):3位地址輸入線,用于選通8路模擬輸入中的一路
電路原理圖如下:
運(yùn)行時(shí)的截圖如下:
源代碼如下:
#include "includes.h"#define TIME0H 0x3C
#define TIME0L 0xB0unsigned char uc_Clock=0; //定時(shí)器0中斷計(jì)數(shù)bit b_DATransform=0;void vShowVoltage(unsigned int uiNumber)
{unsigned char ucaNumber[3],ucCount;if(uiNumber>999) uiNumber=999;ucaNumber[0]=uiNumber/100; //把計(jì)算數(shù)字的每個(gè)位存入數(shù)組。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('.');}}//*************************************************************************************************
//* *
//* ********************************主函數(shù)****************************** *
//* *
//*************************************************************************************************
void main()
{TMOD=0x01; //定時(shí)器0,模式1。TH0=TIME0H;TL0=TIME0L;TR0=1; //啟動(dòng)定時(shí)器。ET0=1; //開定時(shí)器中斷。EA=1; //開總中斷vdInitialize();vWriteCMD(0x84); //寫入顯示起始地址(第二行第一個(gè)位置)vShowChar("Voltage:");vWriteCMD(0xC9);vShowChar("(V)");while(1){if(b_DATransform==1){b_DATransform=0;vWriteCMD(0xC4);vShowVoltage(uiADTransform());}}
}void Time0() interrupt 1
{if(uc_Clock==0){uc_Clock=5;b_DATransform=1;}elseuc_Clock--;TH0=TIME0H; //恢復(fù)定時(shí)器0。TL0=TIME0L;
}
下載鏈接:資源鏈接
總結(jié)
以上是生活随笔為你收集整理的基于proteus软件仿真AT89C52的电压表(附工程文件)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。