资源描述:
《adc0809电压表设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、基于单片机数字电压表班级:xxxxx班xxxx号日期:2012年11月8日9ADC0809数字电压表摘要:本文介绍了基于AT89S52单片机数字电压表,描述利用ADC0809进行电压采样转换,同时用四位数码管显示的过程,电压表量程为5V,精度0.02V。关键词:ADC0809,AT89S52。一、前言随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术,同时各种电子器件技术的发展,为我们的生产生活带来了许许多多的便利,从最初的数码管到如今的液晶,人们的视觉体验得
2、到了极大的提高。同时AD转换技术发展,将人类从模拟时代带入了数字时代,极大地简化了人类的工作量,对生产力的发展起到了巨大的推动作用。二、硬件电路单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能集成到一块硅片上构成的一个小而完善的计算机系统。ADC0809是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D模数转换器。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号
3、,只选通8路模拟输入信号中的一个进行A/D转换。是目前国内应用最广泛的8位通用A/D芯片,引脚如图1.1。2.1主要特性:1)8路输入通道,8位A/D转换器,即分辨率为8位。2)具有转换起停控制端。3)转换时间为100μs(时钟为640kHz时),130μs(时钟为500kHz时) 4)单个+5V电源供电5)模拟输入电压范围0~+5V,不需零点和满刻度校准。6)工作温度范围为-40~+85摄氏度7)低功耗,约15mW。2.2ADC0809应用说明:1)ADC0809内部带有锁存器,可以与单片机直接相连。91)
4、初始化时,是ST和OE信号全部为低电平。2)送药转换的那一通道的地址到A,B,C端口上。3)在ST端给出一个至少有100ns宽的脉冲信号。4)是否转换完毕,根据EOC信号判断。5)当EOC变为高电平时,这是给OE高电平,转换的数据就输出给单片机了图1.12.3系统框图电压采样AD转换模块单片机数码管显示电源92.4电路模块分析1)时钟电路如图2.4.1图2.4.12)复位电路如图2.4.2图2.4.23)显示电路:数码管采用的四位共阳数码管,显示采用动态扫描方式,用PNP三极管控制位选,三极管集电极接数码管共
5、阳端,当单片机送给三极管基极低电平时,集电极导通,从而实现位选如图2.4.3,段选接入单片机P1口。91)ADC0809外围电路图如如图2.4.4,转化的数据送入P0口,clk引脚接P3.3口由定时器和中断产生一个25kHZ的时钟。图2.4.495)总电路图如图2.4.5图2.4.51)实测干电池图2.4.69一、程序框图及程序开始3.1主程序初始化AD转换数据处理显示3.2程序#include#defineuintunsignedint#defineucharunsignedcharsbi
6、tst=P3^0;sbiteoc=P3^2;sbitclk=P3^3;sbita=P3^4;sbitb=P3^5;sbitc=P3^6;sbitOE=P3^1;sbitdian=P1^7;ucharcodedt[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};uintdata1,disi,disan,dier,diyi;/*********延时函数************/voiddelay
7、(uintms)9{uinti,j;for(i=ms;i>0;i--)for(j=110;j>0;j--);}/*********初始化函数************/voidinit(){EA=1;//开总中断ET0=1;//开定时器中断TMOD=0x01;//定时器工作方式2TH0=(65536-20)/256;TL0=(65536-20)%256;//设定时器初值TR0=1;//启动定时器}/*********AD转化函数************/voidAD(){st=0;OE=0;a=0;//选择通道
8、0b=0;c=0;st=1;st=0;delay(10);while(eoc==0);//等待转换完毕OE=1;//打开传送数据data1=P0;//数据送入P0口OE=0;}/*********计算除法************/voidchufa(){data1=data1*19.6078;disi=data1/1000;disan=data1%1000/100;dier=data1%1000%1