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
#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