用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;
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』