ADC0808运用编程程序

AC-DC/DC-DC转换

116人已加入

描述

  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;

  }

  void timer_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();

  }

  }

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分