ADC0808运用编程程序

ADC0808运用编程程序,第1张

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

  }

  }

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/2705538.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-16
下一篇 2022-08-16

发表评论

登录后才能评论

评论列表(0条)

保存