0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ADC0804模数转换器的应用实例

CHANBAEK 来源:郎哥编程课堂 作者: 郎宏林 2023-11-15 17:17 次阅读

实验要求: 应用A/D转换器将滑动电阻输出的模拟电压量转换为数字电压量,将数字电压量输出到四位数码管,并通过电压表给出模拟电压量的读数。下图是实验截图。

图片

实验方案: 应用proteus设计实验用模拟电路,A/D转换器采用ADC0804模拟器件,滑动电阻采用proteus支持的POT-HG,四位数码管采用7SEG-MPX4CA。

ADC0804模数转换器

有20个引脚,分辨率为8位,转换时间为100μs,输入电压范围为0~5V。

分辨率:A/D转换器对输入模拟信号的分辨能力,ADC0804分辨率为8位,即输出位数为8个二进制位,可以区分2^8(256)不同等级的输入模拟电压,能区分输入的电压最小值为满量程输入的1/2^8(1/256),若需要区分更小的输入电压。就需要增加输出位数,提高A/D转换器的分辨率。

转换时间:A/D转换器从接收到模拟电压到输出数字电压需要的时间,不同类型的转换器转换时间不同,并行比较的A/D转换器转换时间可达50ns以内,逐次比较的A/D转换器转换时间一般在10~100μs之间,双积分A/D转换器转换时间一般在几十毫秒到几百毫秒之间。

图片

CS引脚:芯片的片选信号,低电平有效。若该引脚为低电平,芯片开始工作,若该引脚为高电平,芯片停止工作。当外接多个ADC0804芯片时,该引脚可作为芯片的选择地址,通过不同的地址信号使用不同的ADC0804芯片,从而可以实现多个ADC通道的分时复用。

WR引脚:采样触发信号,低电平有效。若该引脚由高电平变为低电平时,芯片对模拟信号进行一次采样,并进行AD转换。

RD引脚:转换数据完成信号,低电平有效。若检测到该引脚为低电平,说明一次转换完成,转换完成的数据从DB0~DB7引脚读取。

VIN+和VIN-引脚:模拟电压输入端,用以接收单极性、双极性和差模输入信号。双极性输入信号有正负电压、零电压,单极性输入信号仅有正电压。若为单极性输入信号,VIN+接模拟电压的输入,VIN-接地;若为双极性输入信号,VIN+和VIN-分别接模拟输入电压的正极和负极。

VREF/2引脚:参考电压接入引脚。该引脚可外接电压,也可悬空。

CLKIN引脚:引入外部时钟脉冲,用于芯片的时钟信号。

CLKR引脚:内部时钟发生器外接电阻端,与CLKIN端配合可由芯片自身产生时钟脉冲,时钟脉冲频率范围一般为100KHz~1460KHz。

INTR引脚:转换结束输出信号,低电平有效,当一次A/D转换完成后,该引脚被设置为0。在实际应用中,该引脚可与外部中断输入引脚相连(如51单片机的INT0,INT1脚),触发中断请求,中断发生后,还需等待RD=0才能正确读出A/D转换结果。若不使用中断,该引脚可以悬空。

AGAND和DGAND引脚:模拟接地和数字接地,两个引脚可以直接接地。

VCC引脚:接+5V电源

DB0~DB7引脚:输出A/D转换后的8位二进制结果。

四位数码管7SEG-MPX4CA

实验用显示器件采用四位数码管7SEG-MPX4CA,该器件共有12个引脚。其中1、2、3、4引脚为位选信号,用于控制几个数码管亮,A~G引脚为显示数字的段选信号,DP引脚为小数点。

图片

实验电路设计

ADC0804中的VCC接入5V电源,REF/2引脚悬空(悬空则相当于与VCC共接5V电源),因此ADC转换的参考电压为VCC的值,即5V。DB0DB7引脚连接单片机的P1.0P1.7,RD和WR引脚连接单片机的P3.6和P3.7,VIN+引脚接滑动变阻器的可调节端,VIN-引脚接地,在VIN+和VIN-引脚之间接入电压表,CLKIN引脚和CLKR引脚连接的电容和电阻构成外部时钟脉冲。单片机P0.0~P0.7接四位数码管的段选线。

图片

单片机内运行的完整C程序如下:

#include
#include
#define uint unsigned int
#define uchar unsigned char
sbit wr=P3^6;
sbit rd=P3^7;
uchar code dis[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delay(uint x) 
{
   uchar i;
   while(x--)
     for(i=0;i< 120;i++);       
}
void display(uchar db)
{
    uchar bw,sw,gw;
         float value;
         int voltage;
         value = (float)db * 5 / 256 * 100;
         voltage = (int)value;
         bw=voltage/100;
         sw=voltage%100/10;
         gw=voltage%10;
      P2=0x01;
         P0=dis[bw]&0x7f;
         delay(5);
         P2=0x02; 
         P0=dis[sw];
         delay(5);
         P2=0x04;
         P0=dis[gw];
         delay(5);  
         P2=0x08;
         P0=dis[0];
         delay(5);
}  
void main()
{
       uchar i;
       while(1)
       {
              wr=0;
              _nop_();
              wr=1;
              delay(1);       
              P1=0xff;
              rd=0;
              _nop_();
              for(i=0;i< 10;i++)
                      display(P1); 
       } 
}

位变量wr和rd用于操作P3.6和P3.7,P3.6和P3.7连接到了ADC0804的WR和RD引脚,用于控制信号采样和读取采样信号。数组变量dis[]定义了数码管显示的数字编码。

delay(uint x)是延迟函数,参数x为延时的毫秒数。

display(uchar db)是数码管显示函数,参数db为P1口,P1口存储了采集到的电压数字量。ADC0804的分辨率为8位,可以区分2^8(256)不同等级的输入模拟电压,且输入电压量程为0 ~ 5V,ADC0804输出的数值范围为0~256,转换为电压(单位V)的公式为:

输出的数值*输入最大量程 / 256

下面的代码将输出的数值转换为电压的数字量(单位V),并分别计算出数字量的各个位数。

value = (float)db * 5 / 256 * 100;  
// 输出数值转换为电压,乘以1000方便计算出数值的各个位数
voltage = (int)value;  
bw=voltage/100;     // 计算出百位数
sw=voltage%100/10;  // 计算出十位数
gw=voltage%10;      // 计算出个位数

语句P2=0x01选择数码管的第1位显示数字,语句P0=dis[bw]&0x7f用于显示数字和小数点,dis[bw]指定的数字的编码,再和0x7f做与操作,显示小数点。

main()函数是主控函数,应用while结构循环采集和转换可变电阻输出的电压,并将采集的电压输出到数码管显示。语句wr=0将ADC0804的wr引脚设为低电平,通知ADC0804进行采样,语句_nop_()执行_nop_()函数, nop ()函数不是C语言标准库的函数,它是51单片机提供的指令,它执行一个机器周期的空操作,让ADC0804完成数据采样和模数转换,其后执行语句wr=1,将ADC0804的wr引脚设为高电平。语句P1=0xff将P1各端口都设置为高电平,准备接收采集的数据,语句rd=0将ADC0804的rd引脚设为低电平,从DB0~DB7引脚读取数据到P1口。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 转换器
    +关注

    关注

    27

    文章

    8206

    浏览量

    141814
  • 数码管
    +关注

    关注

    31

    文章

    1827

    浏览量

    89948
  • 模数转换器
    +关注

    关注

    25

    文章

    2299

    浏览量

    126006
  • 引脚
    +关注

    关注

    16

    文章

    1044

    浏览量

    48959
  • adc0804
    +关注

    关注

    1

    文章

    30

    浏览量

    21970
收藏 人收藏

    评论

    相关推荐

    基于ADC0804单片集成A/D转换器时序图

    ADC0804单片集成A/D转换器。它采用CMOS工艺20引脚集成芯片,分辩率为8位,转换时间为100μs,输入电压范围为0~5V。芯片内具有三态输出数据锁存器,可直接接在数据总线上。
    的头像 发表于 02-02 17:08 752次阅读
    基于<b class='flag-5'>ADC0804</b>单片集成A/D<b class='flag-5'>转换器</b>时序图

    数模和模数转换器

    数模和模数转换器数模和模数转换器能将模拟量转换为数字量的电路称为模数转换器,简称A/D转换器ADC
    发表于 09-16 15:59

    单片机外设AD转换器ADC0804时序图

    如图,为单片机AD转换器的一种:ADC0804单片集成A/D转换器。它采用CMOS工艺20引脚集成芯片,分辩率为8位,转换时间为100µs,输入电压范围为0~5V。芯片内具有三态输出数
    发表于 07-11 07:54

    5962-9581501HXA高端AD模数转换器

    AD10242TZ/883B高端AD模数转换器IC ADC 12BIT 41MSPS DL 68CLCC5962-9581501HXA高端AD模数转换器IC ADC 12BIT 2 C
    发表于 07-15 11:10

    模数转换器ADC)的配置有哪些流程?

    模数转换器ADC)是什么?模数转换器ADC)的配置有哪些流程?配置流程的代码是什么?
    发表于 07-14 08:43

    ADC模数转换器

    文章目录1. ADC1. ADCADC(Analog-to-digital converters,模数转换器),
    发表于 08-06 06:08

    STM32之ADC模数转换器介绍

    ADC模数转换器是什么?ADC模数转换器的相关寄存有哪些?
    发表于 11-08 08:47

    模数转换器ADC简介

    ESP32 之 ESP-IDF 学习笔记(七)——模数转换器ADC)文章目录ESP32 之 ESP-IDF 学习笔记(七)——模数转换器ADC)一、简介1、两个
    发表于 02-17 06:28

    模数转换器ADC简介

    介绍将模拟电子信号转换成数字信号的电路,称为模数转换器,简称A/D转换器ADC。同理,将数字信号转换成模拟信号的电路称为数模
    发表于 02-18 06:54

    模数转换ADC0804的应用(含源程序及电路)

    模数转换ADC0804的应用(含源程序及电路) [实验要求] 从ADC0804 的模拟量通道输入0-5V 之间的模拟量,通过ADC080
    发表于 07-16 10:04 1w次阅读
    <b class='flag-5'>模数</b><b class='flag-5'>转换</b><b class='flag-5'>ADC0804</b>的应用(含源程序及电路)

    adc0804工作原理

    集成A/D转换器品种繁多,选用时应综合考虑各种因素选取集成芯片。一般逐次比较型A/D转换器用的比较多,ADC0804就是这类单片集成A/D转换器A
    发表于 11-12 09:21 3.4w次阅读
    <b class='flag-5'>adc0804</b>工作原理

    ADC0804模数转换51单片机程序与电路

    集成A/D转换器品种繁多,选用时应综合考虑各种因素选取集成芯片。一般逐次比较型A/D转换器用的比较多,ADC0804就是这类单片集成A/D转换器A
    发表于 11-12 09:46 3.5w次阅读
    <b class='flag-5'>ADC0804</b><b class='flag-5'>模数</b><b class='flag-5'>转换</b>51单片机程序与电路

    adc0804adc0809区别

    adc0809是八个单端输入,参考电压:5V, 即Vref=5V。 adc0804是一个差分输入,参考电压:2.5V,即Vref=2.5V。其它参数一样。ADC0804是单路的,ADC
    发表于 11-12 10:02 2.5w次阅读

    adc0804数字电压表

    ADC0804是一个8位CMOS型逐次比较式A/D转换器,具有三态锁存输出功能,最短转换时间为100us,其芯片实物图和引脚图如下
    发表于 11-12 10:30 1w次阅读

    ADC0804应用中的实验要求和源代码免费下载

    继续像昨天一样, 今天也用TX-B开发板参照模数转换ADC0804的应用中的实验要求和源代码, 自己也改进了一些代码。 ADC0804与单片机的连接电路图:
    发表于 09-11 17:25 10次下载
    <b class='flag-5'>ADC0804</b>应用中的实验要求和源代码免费下载