ADC0808是采样分辨率为8位的、以逐次逼近原理进行模/数转换的器件。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。
ADC0808是ADC0809的简化版本,功能基本相同。一般在硬件仿真时采用ADC0808进行A/D转换,实际使用时采用ADC0809进行A/D转换。
ADC0808是CMOS单片型逐次逼近式A/D转换器,它有8路模拟开关、地址锁存与译码器、比较器、8位开关树型A/D转换器。
ADC0808运用编程程序
# include 《reg52.h》
# define uint unsigned int
# define uchar unsigned char
uchar code table0[]={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF};
uchar code table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //0到9数码管编码
uchar table2[5],getdata; //定义数组变量
uint t;
sbit START=P3^0;
sbit OE=P3^1;
sbit EOC=P3^2;
sbit CLOCK=P3^3;
void delayms(uint x)
{
uint i,j;
for(i=x;i》0;i--)
for(j=50;j》0;j--);
}
void init_interrupt() //初始化定时计数器
{
TMOD=0x02;
TH0=0xfb;
TL0=0xfb;
EA=1;
ET0=1;
TR0=1;
}
voidTImer_T0() interrupt 1 //定时器0中断函数,产生100KHz时钟频率
{
CLOCK=~CLOCK;
}
void display()
{
t=getdata*12000.0/255;
table2[0]=t%10;
table2[1]=t/10%10;
table2[2]=t/100%10;
table2[3]=t/1000%10;
table2[4]=t/10000;
if(t》=10000)
{
P2=0xef;
P1=table[table2[1]];
delayms(1);
P2=0xdf;
P1=table[table2[2]];
delayms(1);
P2=0xbf;
P1=table0[table2[3]];
delayms(1);
P2=0x7f;
P1=table[table2[4]];
delayms(1);
}
if(t《10000)
{
P2=0xef;
P1=table[table2[0]];
delayms(1);
P2=0xdf;
P1=table[table2[1]];
delayms(1);
P2=0xbf;
P1=table[table2[2]];
delayms(1);
P2=0x7f;
P1=table0[table2[3]];
delayms(1);
}
}
void main()
{
init_interrupt();
while(1)
{
OE=0;
START=0;
START=1;
START=0;
while(EOC==0);
OE=1;
getdata=P0;
OE=0;
display();
}
}