找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1503|回复: 0
收起左侧

51单片机+ADC0804+三位一体数码管 测量实时电压

[复制链接]
ID:1049806 发表于 2022-11-7 22:57 | 显示全部楼层 |阅读模式
ADC0804芯片的介绍

1、A/D转换概念

即模数转换,输入模拟量(比如电压信号),输出一个与模拟量对应的数字。例如参考电压VREF为5V,采用8位的模数转换器时,当输入电压为0V时,输出的数字量为0000 0000,当输入的电压为5V时,输出的数字量为1111 1111.当输入的电压从0V到5V变化时,输出量从0000 0000到1111 1111变化。这样每一个输入电压值对应一个输出数字量,即实现模数转换。

2、分辨率概念

分辨率是指使输出数字量变化1时的输入模拟量,也就是使输出数字量变化一个相邻数码所需输入模拟量的变化值。

分辨率与A/D转换器的位数有确定的关系,可以表示成FS/2^n。FS表示满量程输入值,n为A/D转换器的位数。例如对于5V的满量程,采用4位的ADC时,5V/16=0.3125V(也就是说当输入的电压值每增加0.3125V,输出的数字量增加1);采用8位的ADC时,分辨率为5V/256=19.5mV(也就是说当输入的电压每增加19.5mV,则输出的数字量增加1);当采用12位的ADC时,分辨率则为5V/4096=1.22mv(也就是说当输入的电压每增加1.22mV,则输出的数字量增加1)。显然位数越多,分辨率越高

/*********************
数字电压表与模数转器
adc0804 输出脚DB0-DB7-->P1口
Vin+ 输入测量电压
VREF/2输入参考电平
程序把ADC0804送来的数字电压信号进行量化后显示在七段数码管上。
P0口连接到三位一体的数码管上,p2^0控制第1位数码管
                                                             P2^1控制第2位数码管
                                                            P2^2控制第3位数码管
*****************************************************************************
#include <reg52.h>
sbit intr=P3^0;                //转换结束信号 adc0804 5脚
sbit write=P3^1;        //转换使能端 adc0804 3脚
sbit read=P3^2;        //输出使能端 adc0804 2脚
sbit dot=P0^7;                //小数点
//直接控制七段数码管显示数字0-9的码表
code unsigned char tab[]={0x40, 0x79, 0x24, 0x30,
0x19, 0x12, 0x02, 0x78,
0x00, 0x10};
unsigned int ad=0, ads;        //保存数字信号的变量
unsigned char StrTab[3];  //保存显示数
void delay(unsigned int cnt)//延时函数
{
while(--cnt);
}
main()
{   
        while(1)
        {      
                write=1;                        //write端出现下降沿,启动转换
                write=0;
                write=1;
                while(intr==1);         //循环等待INTR的低电平,转换完成
                read=1;                        //在READ出现下降沿,输出数字信号
                read=0;
                ad=P1;                        //转换好的数字信号保存到变量ad中
                ad=ad*156;                //与分辨率0.0156V相乘
                ads=ad/10000;                //获得电压数值的最高位
StrTab[2]=tab[ads];        //最高位数值的显示码存入StrTab[2]
                ad=ad%10000;      
                ads=ad/1000;
                StrTab[1]=tab[ads];//中间位数值的显示码存入StrTab[1]
                ad=ad%1000;
                ads=ad/100;
                StrTab[0]=tab[ads];//最低位数值的显示码存入StrTab[0]
P2=0x01;                        //使能最高位的七段数码管
P0=StrTab[2];                //输出显示码
delay(1000);
P2=0x00;                        //熄灭该位七段数码管
P2=0x02;                        //使能中间位的七段数码管
P0=StrTab[1];                //输出显示码
dot=1;                        //关闭小数点
delay(1000);
P2=0x00;                        //熄灭该位七段数码管
P2=0x04;                        //使能最低位的七段数码管
P0=StrTab[0];                //输出显示码
dot=1;                        //关闭小数点
delay(1000);
P2=0x00;                        //熄灭该位七段数码管
}
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表