adc0808仿真原理图与程序代码

AC-DC/DC-DC转换

116人已加入

描述

  51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。

  ADC0808是采样分辨率为8位的、以逐次逼近原理进行模/数转换的器件。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。ADC0808是ADC0809的简化版本,功能基本相同。一般在硬件仿真时采用ADC0808进行A/D转换,实际使用时采用ADC0809进行A/D转换。

  那么问题来了,一个用51单片机和ADC0808做的电压采集的proteus仿真原理图和程序你知道吗?

  一个用51单片机和ADC0808做的电压采集的proteus仿真,下面是仿真原理图

  

  源程序代码

  #include《reg51.h》

  #include《intrins.h》

  #include《stdio.h》

  #define uint unsigned int

  #define uchar unsigned char

  sbit CLK=P2^0;

  sbit ST=P2^1;

  sbit EOC=P2^2;

  sbit OE=P2^3;

  sbit ADDA=P2^5;

  sbit ADDB=P2^6;

  sbit ADDC=P2^7;

  sbit X1=P3^4;

  sbit X2=P3^5;

  sbit X3=P3^6;

  sbit P07=P0^7;

  sbit LED=P3^7;

  uint temp;

  uchar getdata;

  uchar b;

  uchar s;

  uchar g;

  uchar code table[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

  void delayus(uchar us){

  uchar i;

  while(us--)

  for(i=0;i《120;i++)

  ;

  }

  void init(){

  TMOD=0x21;

  TH0=(65536-200)/256;

  TL0=(65536-200)%256;

  TH1=0XFD;

  TL1=0XFD;

  PCON=0X00;

  SCON=0X50;

  ES=1;

  ET0=1;

  EA=1;

  TR1=1;

  TR0=1;

  }

  void timer0()interrupt 1

  { TH0=(65535-200)/256;

  TL0=(65535-200)%256;

  CLK=~CLK;

  }

  void disp(){

  X1=1;

  X2=0;

  X3=0;

  P0=table[b];

  P07=0;

  X1=1;

  X2=0;

  X3=0;

  delayus(5);

  P0=0XFF;

  P0=table[s];

  X1=0;

  X2=1;

  X3=0;

  delayus(5);

  P0=0XFF;

  P0=table[g];

  X1=0;

  X2=0;

  X3=1;

  delayus(5);

  P0=0XFF;

  }

  void adda(uchar z,uchar x,uchar c){

  ADDA=z;

  ADDB=x;

  ADDC=c;

  }

  void send(uchar x){

  EA=0;

  SBUF=x;

  while(TI==0);

  TI=0;

  EA=1;

  }

  void main(){

  P1=0XFF;

  init();

  LED=0;

  P2=0XFF;

  adda(0,0,1);

  while(1){

  ST=0;

  OE=0;

  ST=1;

  ST=0;

  while(EOC==0);

  OE=1;

  getdata=P1;

  send(getdata);

  OE=0;

  temp=getdata*1.0/255*500;

  b=temp/100;

  s=temp/10%10;

  g=temp%10;

  disp();

  }

  }

  void ser()interrupt 4

  {

  if(RI==1){

  RI=0;

  if(SBUF==‘A’){

  LED=~LED;

  }

  }

  }

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

全部0条评论

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

×
20
完善资料,
赚取积分