当前位置: 首页 > 技术资料 > 单片机制作的数字电压表设计

单片机制作的数字电压表设计

QooIC.com 新闻出处:电子市场 | 发布时间:2011/6/1 16:27:08

  利用单片机AT89S51与ADC0809设计一个数字电压表,能够测量0-5V之间的直流电压值,四位数码显示,但是使用的元器件数目最少。


  #include


  unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,


  0xef,0xdf,0xbf,0x7f};


  unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,


  0x6d,0x7d,0x07,0x7f,0x6f,0x00};


  unsigned char dispbuf[8]={10,10,10,10,0,0,0,0};


  unsigned char dispcount;


  unsigned char getdata;


  unsigned int temp;


  unsigned char i;


  sbit ST=P3^0;


  sbit OE=P3^1;


  sbit EOC=P3^2;


  sbit CLK=P3^3;


  void main(void)


  {


  ST=0;


  OE=0;


  ET0=1;


  ET1=1;


  EA=1;


  TMOD=0x12;


  TH0=216;


  TL0=216;


  TH1=(65536-4000)/256;


  TL1=(65536-4000)%6;


  TR1=1;


  TR0=1;


  ST=1;


  ST=0;


  while(1)


  {


  if(EOC==1)


  {


  OE=1;


  getdata=P0;


  OE=0;


  temp=getdata*235;


  temp=temp/128;


  i=5;


  dispbuf[0]=10;


  dispbuf[1]=10;


  dispbuf[2]=10;


  dispbuf[3]=10;


  dispbuf[4]=10;


  dispbuf[5]=0;


  dispbuf[6]=0;


  dispbuf[7]=0;


  while(temp/10)


  {


  dispbuf[i]=temp;


  temp=temp/10;


  i++;


  }


  dispbuf[i]=temp;


  ST=1;


  ST=0;


  }


  }


  }


  void t0(void) interrupt 1 using 0


  {


  CLK=~CLK;


  }


  void t1(void) interrupt 3 using 0


  {


  TH1=(65536-4000)/256;


  TL1=(65536-4000)%6;


  P1=dispcode[dispbuf[dispcount]];


  P2=dispbitcode[dispcount];


  if(dispcount==7)


  {


  P1=P1 | 0x80;


  }


  dispcount++;


  if(dispcount==8)


  {


  dispcount=0;


  }


  }