×
单片机 > 单片机程序设计 > 详情

基于ADC0831+LM358正负极电压测量

发布时间:2020-12-22 发布时间:
|

用358做一个加法器,通过ADC0831 AD转换,51单片机控制,可以测量正2.5V至负的2.5V电压值。可以扩展到大电压的测量 加分压电阻即可
电路原理图如下:
 

单片机源程序如下:

/*******************

程序功能:AD转换显示。被测电压范围-2.5V至+2.5V

版本:Vre1.0

*******************/

#include

#include           //头文件


#define uchar unsigned char

#define uint  unsigned int


sbit cs  = P1^0;        //IO定义

sbit clk = P1^1;

sbit dat = P1^2;

sbit dian= P2^7;


uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};        //数码管

uchar code bc[]={0x01,0x02,0x04,0x08};        //数码管位选(共阳)

uint  huancun[]={0,0,0,0}; //数据缓存


uchar adc0831(); //读取AD值

void display();         //数码管显示


void delay(uint time)  //延时

{

for(time;time>0;time--);

}


void main()

{

uint date,date1;

uchar i;

P1=0xff;

P2=0xff;

P3=0xff;

while(1)

{

  i++;

  if(i==100)

  {

   i=0;

   //P2=adc0831(); //测试用

   date=adc0831();        //读取AD值

   date*=2;                 //基准电压5.1V,乘以2刚好是测得的电压值的100倍(date=120,就是1.2V)

   if(date>250)         //如果测得的值大于2.5V,说明加法器上的被测电压是正电压

   {

    date-=250;        //转换到2.5V电压范围内

        huancun[0]=11; //符号位不显示,表示正电压

   }

   else if(date==250) //如果测到的值是2.5V,说明加法器上的被测电压是0V

   {

    date=0;

        huancun[0]=11;

   }

   else                //如果测得的值小于2.5V说明加法器上的电压是负电压

   {

    date1=250-date;//250是加法器上的偏置电压,date是测到的电压

        date=date1;           //date1就是被测的电压值

    huancun[0]=10; //显示负号

   }

   //date=date/51;

   huancun[1]=date/100;

   huancun[2]=date%100/10;

   huancun[3]=date%10;

  }

  display();        //显示

}

}


void display()

{

uchar i;

for(i=0;i<4;i++)

{

  P3=bc[i];

  P2=tab[huancun[i]];

  if(i==1)         //显示百位的小数点

  dian=0;

  else

  dian=1;

  delay(100);

}

}


uchar adc0831()//AD转换程序 就没什么说的了  网上大把

{

uchar i,temp;

dat=1;

_nop_();

_nop_();

_nop_();

cs=0;

_nop_();

_nop_();

_nop_();

clk=1;

_nop_();

_nop_();

_nop_();

clk=0;

_nop_();

_nop_();

_nop_();

clk=1;

_nop_();

_nop_();

_nop_();

clk=0;

for(i=0;i<8;i++)

{

  temp<<=1;

  if(dat)

  {

   temp++;

  }

  clk=1;

  _nop_();

  _nop_();

  _nop_();

  clk=0;

  _nop_();

  _nop_();

  _nop_();

}

cs=1;

_nop_();

_nop_();

return temp;

}



关键字:ADC0831  LM358  正负极电压测量 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
8051单片机的函数发生器的设计