基于51单片机的电压采集(ADC0809)

1.ADC0809简介
IN0~IN7 : 8路模拟量输入端;
D0~D7:8位数字量输出端;
ADDA、ADDC、ADDC:3位地址输入线,用于选择8路模拟通道中的一路;
ALE:地址锁存允许信号,输入,高电平有效;
START:A/D转换启动信号,输入,高电平有效;
EOC:A/D转换结束信号,输出。当启动转换时,高引脚为低电平,当A/D结束转换时,高引脚输出高电平;
OE:数据输出允许信号,输入,高电平有效。当转换结束后,如果从该引脚输入高电平,则打开输出三态门,输出锁存器的数据从D0~D7送出;
CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ;
REF+、REF-:基准电压输入端;
VCC:电源,接+5V;
GND:地;

2.程序代码

#include<reg52.h>

#define Duan_Port P0//定义数码管端口
#define ADC0809_Data P1//定义端口接收ADC0809数据转换结果

/*引脚定义*/
sbit Bit1=P2^3;
sbit Bit2=P2^2;
sbit Bit3=P2^1;
sbit Bit4=P2^0;

sbit OE=P3^1;
sbit Start=P3^2;
sbit EOC=P3^3;

sbit Dp=P0^7;//小数点

sbit CLK=P3^0;


unsigned int dat=0;
unsigned char Buf[4];//存放数码管显示数字的数组

unsigned char code smg_Duan[]={
									0xc0,0xf9,0xa4,0xb0,
									0x99,0x92,0x82,0xf8,
									0x80,0x90,0x88,0x83,
									0xc6,0xa1,0x86,0x8e,
								};//共阳极数码管编码

/**************函数声明***************/
void delay_xms(unsigned int t);//延时xms函数							
unsigned char ADC0809_Read();//ADC0809读取数据,输出为0-255
void ConvertVoltage();//将0-255转换为0.00-5.00V
void smg_Display();//数码管显示

void main()//主函数
{
	unsigned int n=0,sum;
	while(1)
	{
		for(n=0;n<3;n++)
		{
			sum=sum+ADC0809_Read();
			smg_Display();
		}
		dat=sum/3;
		ConvertVoltage();
		sum=0;
		smg_Display();
	}
}

void delay_xms(unsigned int t)
{
	unsigned int i,j;
	for(i=t;i>0;i--)
	    for(j=123;j>0;j--);
}

unsigned char ADC0809_Read()
{
	unsigned char Temp=0X00;
	OE=0;//输出设为高阻态
	Start=0;
	Start=1;//提供上升沿启动AD转换
	Start=0;//提供下降沿
	while(!EOC);//等待转换结束
	OE=1;//连接数据线输出
	Temp=ADC0809_Data;
	OE=0;//断开数据线
	return Temp;//返回结果
}

void ConvertVoltage()
{
	unsigned int Vo;
	Vo=dat*19.608;  //  5/255=0.01960784313
	Buf[0]=Vo/1000%10;
	Buf[1]=Vo/100%10;
	Buf[2]=Vo/10%10;
	Buf[3]=Vo/1%10;
}

void smg_Display()
{
	Bit1=0;
	Duan_Port=smg_Duan[Buf[0]];//选通第一位数码管并赋段码
	Dp=0;
	delay_xms(1);
	Bit1=1;
	Duan_Port=0xff;//关闭消影
	
	Bit2=0;
	Duan_Port=smg_Duan[Buf[1]];
	delay_xms(1);
	Bit2=1;
	Duan_Port=0xff;
	
	Bit3=0;
	Duan_Port=smg_Duan[Buf[2]];
	delay_xms(1);
	Bit3=1;
	Duan_Port=0xff;
	
	Bit4=0;
	Duan_Port=smg_Duan[Buf[3]];
	delay_xms(1);
	Bit4=1;
	Duan_Port=0xff;	
}


3.仿真电路

物联沃分享整理
物联沃-IOTWORD物联网 » 基于51单片机的电压采集(ADC0809)

发表评论