基于单片机的数字电压表的设计 下载本文

内容发布更新时间 : 2024/5/1 10:43:17星期一 下面是文章的全部内容请认真阅读。

4.5电源设计

ADC0832有很宽的工作电压范围,其工作电压为4.0~5.5V。单片机AT89S52的工作电压范围相对较窄,为4.0~5.5V,所以本设计中使用电脑USB(5V)电压供电,其有很高的稳定可靠的电压值,利用它的稳压功能给电路提供稳定的+5V电压,使电路的工作保持很高的可靠性。

5. 设计总电路图

图6

6

6 结论

本设计利用单片机AT89S52控制与模数转换ADC0832,实现模拟信号转换数字信号的功能。该电路能准确地测出所被测有效电压值、附加四位显示功能,可精确到有效电压值为0.01V。该电路使用简单的一路接口,为单片机节省大量的接口资源。ADC0832为一路的数字转换,该芯片功能强大,性能优越,能为很多领域,特别是对模拟量转的换工作精确性和可靠性有较高要求的场合,提供较好的实时转换。但是,由于ADC0832易受环境影响,会使该电路出现数据精度不高、显示混乱等问题,还有待继续研究和改进。

附录一:源程序

#include

#include #define uchar unsigned char #define uint unsigned int

#include%uchar code table[]= {

0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90, }; //共阳数码管段码表 uchar code table1[]= {0x40,0x79,0x24,0x30,0x19,

0x12,0x02,0x78,0x00,0x10};//带小数点的编码 0~9

uchar dat=0;//AD值 uint c,d;

uint DY_dat=0; //烟雾浓度数据 uchar ad_dat1=0; //读取滤波后的AD值 uchar count=0;//定时器计数 uchar CH=0;//通道变量

7

没有小数点 0~9

uint num,ge,xiao1,xiao2,shi,shi1,ge1,xiao3,xiao4,dy;

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

/********************************************************* 延时函数

**********************************************************/ void delay(uint x) {

uint a,b; for(a=x;a>0;a--) for(b=110;b>0;b--); }

void Read_ad() {

static uint AD_DAT=0;

float ad_buf=0; static uchar i=0; if(i<5) { } else { }

i=0;

// 法

ad_dat1=(uchar)(AD_DAT/5); ad_buf=(float)(ad_dat1/0.51); DY_dat=(uint)(ad_buf); AD_DAT=0;

// 算

i++;

AD_DAT+=A_D();

// 波

// 滤

8

}

/******************************************************** 显示函数

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

void display() {

shi1=DY_dat/1000; }

/********************************************************* 主函数

**********************************************************/ void main() {

P2=0xff; P2=0xf7;

P0=table[xiao3]; delay(3); P2=0xfb;

P0=table[xiao2]; delay(3); P2=0xfd; P0=table1[ge1]; delay(3);

ge1=DY_dat00/100; xiao2=DY_dat0/10; xiao3=DY_dat;

9

d=A_D(); c=d; while(1) {

/* d=A_D();

c=c*4+d; c/=5;

*/

// ad_buf=(float)(c*7.84313); // dy=(uint)(ad_buf);

Read_ad();

// convdata(dat); display(); } }

10