|
ADC0804芯片的介紹
1、A/D轉(zhuǎn)換概念
即模數(shù)轉(zhuǎn)換,輸入模擬量(比如電壓信號),輸出一個與模擬量對應(yīng)的數(shù)字。例如參考電壓VREF為5V,采用8位的模數(shù)轉(zhuǎn)換器時,當(dāng)輸入電壓為0V時,輸出的數(shù)字量為0000 0000,當(dāng)輸入的電壓為5V時,輸出的數(shù)字量為1111 1111.當(dāng)輸入的電壓從0V到5V變化時,輸出量從0000 0000到1111 1111變化。這樣每一個輸入電壓值對應(yīng)一個輸出數(shù)字量,即實現(xiàn)模數(shù)轉(zhuǎn)換。
2、分辨率概念
分辨率是指使輸出數(shù)字量變化1時的輸入模擬量,也就是使輸出數(shù)字量變化一個相鄰數(shù)碼所需輸入模擬量的變化值。
分辨率與A/D轉(zhuǎn)換器的位數(shù)有確定的關(guān)系,可以表示成FS/2^n。FS表示滿量程輸入值,n為A/D轉(zhuǎn)換器的位數(shù)。例如對于5V的滿量程,采用4位的ADC時,5V/16=0.3125V(也就是說當(dāng)輸入的電壓值每增加0.3125V,輸出的數(shù)字量增加1);采用8位的ADC時,分辨率為5V/256=19.5mV(也就是說當(dāng)輸入的電壓每增加19.5mV,則輸出的數(shù)字量增加1);當(dāng)采用12位的ADC時,分辨率則為5V/4096=1.22mv(也就是說當(dāng)輸入的電壓每增加1.22mV,則輸出的數(shù)字量增加1)。顯然位數(shù)越多,分辨率越高
/*********************
數(shù)字電壓表與模數(shù)轉(zhuǎn)器
adc0804 輸出腳DB0-DB7-->P1口
Vin+ 輸入測量電壓
VREF/2輸入?yún)⒖茧娖?br />
程序把ADC0804送來的數(shù)字電壓信號進(jìn)行量化后顯示在七段數(shù)碼管上。
P0口連接到三位一體的數(shù)碼管上,p2^0控制第1位數(shù)碼管
P2^1控制第2位數(shù)碼管
P2^2控制第3位數(shù)碼管
*****************************************************************************
#include <reg52.h>
sbit intr=P3^0; //轉(zhuǎn)換結(jié)束信號 adc0804 5腳
sbit write=P3^1; //轉(zhuǎn)換使能端 adc0804 3腳
sbit read=P3^2; //輸出使能端 adc0804 2腳
sbit dot=P0^7; //小數(shù)點
//直接控制七段數(shù)碼管顯示數(shù)字0-9的碼表
code unsigned char tab[]={0x40, 0x79, 0x24, 0x30,
0x19, 0x12, 0x02, 0x78,
0x00, 0x10};
unsigned int ad=0, ads; //保存數(shù)字信號的變量
unsigned char StrTab[3]; //保存顯示數(shù)
void delay(unsigned int cnt)//延時函數(shù)
{
while(--cnt);
}
main()
{
while(1)
{
write=1; //write端出現(xiàn)下降沿,啟動轉(zhuǎn)換
write=0;
write=1;
while(intr==1); //循環(huán)等待INTR的低電平,轉(zhuǎn)換完成
read=1; //在READ出現(xiàn)下降沿,輸出數(shù)字信號
read=0;
ad=P1; //轉(zhuǎn)換好的數(shù)字信號保存到變量ad中
ad=ad*156; //與分辨率0.0156V相乘
ads=ad/10000; //獲得電壓數(shù)值的最高位
StrTab[2]=tab[ads]; //最高位數(shù)值的顯示碼存入StrTab[2]
ad=ad%10000;
ads=ad/1000;
StrTab[1]=tab[ads];//中間位數(shù)值的顯示碼存入StrTab[1]
ad=ad%1000;
ads=ad/100;
StrTab[0]=tab[ads];//最低位數(shù)值的顯示碼存入StrTab[0]
P2=0x01; //使能最高位的七段數(shù)碼管
P0=StrTab[2]; //輸出顯示碼
delay(1000);
P2=0x00; //熄滅該位七段數(shù)碼管
P2=0x02; //使能中間位的七段數(shù)碼管
P0=StrTab[1]; //輸出顯示碼
dot=1; //關(guān)閉小數(shù)點
delay(1000);
P2=0x00; //熄滅該位七段數(shù)碼管
P2=0x04; //使能最低位的七段數(shù)碼管
P0=StrTab[0]; //輸出顯示碼
dot=1; //關(guān)閉小數(shù)點
delay(1000);
P2=0x00; //熄滅該位七段數(shù)碼管
}
}
|
|