ADC0809采集八路电压

ADC0809几个重要的管脚

OE:输出使能
START:高电平启动
CLOCK:工作频率,不要超过640KHZ就好
EOC:开始进行AD转换时为低电平,转换结束后会输出高电平
ALE:将输入地址锁存,一般和START信号共用,这样在启动时也相当于锁存了地址
VREF(+)(-):基准电压
ADDA、ADDB、ADDC:选择通道
IN0-IN7:8通道采样
OUT1-OUT8:8位并行输出,注意顺序相反

Proteus原理图

在这里插入图片描述

Keil程序

#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char

uchar code LEDData[]=
{
 	0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};
sbit OE  = P1^0;
sbit EOC = P1^1;
sbit ST  = P1^2;
sbit CLK = P1^3;
void DelayMS(uint ms)
{
 	uchar i;
	while(ms--)
	{
	 	for(i=0;i<120;i++);
	}
}

void Display_Result(int d)
{
    uchar b,s,g,a;
	d=(int)P3;
	d=d*100/51*24/5;     //这里乘了4.8,0-5v转化为0-24v
	b=d/1000;
	s=(d-1000*b)/100;
	g=(d-1000*b-s*100)/10;
	a=d-1000*b-s*100-10*g;
 	P2 = 0xf7;
	P0 = LEDData[a];
	DelayMS(5);
	P2 = 0xfb;
	P0 = LEDData[g];
	DelayMS(5);
	P2 = 0xfd;
	P0 = LEDData[s]+0x80;
	DelayMS(5);
	P2 = 0xfe;
	P0 = LEDData[b];
	DelayMS(5);
}
void main()
{
 	TMOD = 0x02;
	TH0  = 0x14;
	TL0  = 0x00;
	IE   = 0x82;
	TR0  = 1;
	while(1)
	{	P1=0x0f|P2;		//拨码开关用来选择通道
	 	ST = 0;
		ST = 1;
		ST = 0;
		while(EOC == 0);
		OE = 1;
		Display_Result(P3);
		OE = 0;
	}
}

void Timer0_INT() interrupt 1
{
 	CLK = !CLK;
}

仿真图

在这里插入图片描述
很简单的一个电压采集,主要是今天有同学问到这个怎么使,给他讲完之后顺便做一下笔记。^^

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

___Crystal

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值