ADC0804的使用

2023-10-30

一、前言介绍

  • 这个博客主要说明ADC0804的使用
  • 数码管的动态显示作为辅助功能,方便观察
  • 利用滑变和5V电源来获得一个输入电压值,输入到ADC0804的输入端

二、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)。显然位数越多,分辨率越高。

3、ADC0804引脚功能

ADC0804

  • CS:芯片片选信号,低电平有效。即CS = 0时,该芯片才能正常工作,高电平时芯片不工作。在外接多个ADC0804芯片时,该信号可以作为选择地址使用,通过不同的地址信号使用不同的ADC0804芯片,从而可以实现多个ADC通道的分时复用。
  • WR:启动ADC0804进行ADC采样,该信号低电平有效,即WR信号由低电平变成高电平时,触发一次ADC转换。
  • RD:低电平有效,即RD=0时,ADC0804把转换完成的数据加载到DB口,可以通过数据端口DB0~DB7读出本次的采样结果。
  • VIN(-)和VIN(+):模拟电压输入端,单边输入时模拟电压输入接VIN(+)端,VIN(-)端接地。双边输入时VIN(+)、VIN(-)分别接模拟电压信号的正端和负端。当输入的模拟电压信号存在“零点漂移电压”是,可在VIN(-)接一等值的零点补偿电压,变化时自动从VIN(+)中减去这一电压。
  • VREF/2:参考电压接入引脚,该引脚可外接电压也可悬空,若外接电压,则ADC的参考电压为该外接电压的两倍,如不接,则VREF与VCC公用电源电压,此时ADC电压即为电源电压VCC的值。
  • CLKIN和CLKR:外接RC振荡电路产生模数转换器所需的时钟信号,时钟频率CLK=1/1.1RC,一般要求频率范围100KHz~1460KHz。
  • AGND和DGND:分别接模拟地和数字地。
  • INTR:转换结束输出信号,低电平有效,当一次A/D转换完成后,将引起INTR=0,实际应用时,该引脚应与微处理器的外部中断输入引脚相连(如51单片机的INT0,INT1脚),当产生INTR信号有效时,还需等待RD=0才能正确读出A/D转换结果,若ADC0804单独使用,则可以将INTR引脚悬空。
  • DB0~DB7:输出A/D转换后的8位二进制结果。
4、ADC0804的时序

https://wenku.baidu.com/view/823c5913964bcf84b9d57b78.html

三、仿真图

仿真图

四、程序

  • 输入一个电压
  • 模拟电压转换后放大100倍
  • 通过数码管显示(四位一体共阴极)
#include <reg52.h>
#include <intrins.h>

unsigned char code dxcode[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char dispbuf[4];

sbit adcs = P2^4;
sbit adrd = P2^5;
sbit adwr = P2^6;
sbit intr = P2^7;
sbit CLK = P3^3;

sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
sbit P17=P1^7;

void TimeInitial();
void Delay(unsigned int i);
void Display();

void main()
{
	int intnum = 0;         //转换电压值
	unsigned char x = 0;    //存储P0口的数值
	TimeInitial();
	while(1)
	{
		adcs = 0;   //芯片有效
		adwr = 0;   //启动ADC0804进行ADC采集
		_nop_();    //延时片刻
		adwr = 1;   //高电平变低电平触发一次ADC转换
		
		while(intr); // ADC转换完成后intr = 0
		P0 = 0xff;
		adcs = 0;
		adrd = 0;    //rd为低电平将转换结果加载到DB口
		_nop_();
		x = P0;      //读取结果
		adrd = 1;
		
		intnum = x * (1.0/255)*500;    //读取的电压扩大100倍
	
		dispbuf[0] = 0;
		dispbuf[1] = intnum % 10;
		dispbuf[2] = intnum / 10 %10;
		dispbuf[3] = intnum / 100;		
		Display();
	}
	
}

void Display()
{
		P1 = dxcode[dispbuf[3]];
		P20 = 0;
		P21 = 1;
		P22 = 1;
		P23 = 1;
		Delay(10);
		P1 = 0x00;
		P1 = dxcode[dispbuf[2]];
		P20=1;
		P21=0;
		P22=1;
		P23=1;
		Delay(10); 
		P1=0x00;
		P1=dxcode[dispbuf[1]];
		P17=1;
		P20=1;
		P21=1;
		P22=0;
		P23=1;
		Delay(10);
		P1=0x00;
		P1=dxcode[dispbuf[0]];
		P20=1;
		P21=1;
		P22=1;
		P23=0;
		Delay(10);
		P1=0x00;
}

//定时器产生振荡信号给ADC提供时钟信号
void TimeInitial()
{ 
	 TMOD=0x10;        //定时器方式1
	 TH1=(65536-200)/256;
	 TL1=(65536-200)%256;
	 EA=1;
	 ET1=1;
	 TR1=1;
}
void Delay(unsigned int i)
{
		unsigned int j;
		for(;i>0;i--)
		{
		for(j=0;j<125;j++)
		{;}
		}
}

void t1(void) interrupt 3 using 0
{
  TH1=(65536-200)/256;
  TL1=(65536-200)%256;
  CLK=~CLK;
}

参考https://wenku.baidu.com/view/823c5913964bcf84b9d57b78.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ADC0804的使用 的相关文章

  • Spring boot_公众号模板消息

    1 pom引入
  • 算法笔试题_2

    给定一个 N 进制正整数 把它的各位数字上数字倒过来排列组成一个新数 然后与原数相加 如果是回文数则停止 如果不是 则重复这个操作 直到和为回文数为止 如果 N 超过 10 使用英文字母来表示那些大于 9 的数码 例如对 16 进制数来说
  • 大数据技术与人工智能的关系

    结合了学习的知识和网上的相关资料 我个人觉得大数据与人工智能的关系如下 人工智能需要数据来建立其智能 特别是机器学习 大数据技术为人工智能提供了强大的存储能力和计算能力 如果说大数据相当于人的大脑存储了海量知识 而人工智能则是吸收了大量的数

随机推荐

  • the sip module implements API v12.0 to v12.8 but the PyQt5.QtGui module requires API v12.9

    问题描述 RuntimeError the sip module implements API v12 0 to v12 8 but the PyQt5 QtGui module requires API v12 9 分析原因 pyqt更新
  • Git Extension工具安装及使用

    以下界面所示的三个工具 如果没安装过 则勾上让其安装 MsysGit为Git的Windows版本 必须要安装 Kdiff为对比 合并工具 可选安装 可以换为使用其它的相关工具 最后一个Windows Credential Store for
  • java判断char是否相等

    在 Java 中可以使用 运算符来判断两个 char 类型的变量是否相等 例如 char c1 a char c2 b if c1 c2 System out println c1 is equal to c2 else System ou
  • 转:Python数据分箱,计算woe,iv

    转自 https zhuanlan zhihu com p 38440477 https www cnblogs com wzdLY p 9853209 html https github com Lucky Bone Discretiza
  • SQL语句的基本常用的一些语法

    1 ORDER BY 字段名 以 排序 如 select from A order by id desc 从大 gt 小 asc 从 小 gt 大 2 Group By 字段名 以 分组 select from A group by id
  • IOTDB-源码解析-查询

    单机查询流程 QueryPlan类 QueryPlan是有关查询相关的类 所有的plan都继承了PhysicalPlan这个虚类 QueryPlan也是一个虚类 其UML类图如下所示 IotDB中的各种reader 此章节请酌情参考查询基础
  • 白盒测试(基本路径法)代码

    白盒测试的一种常用方法是基本路径法 根据源代码构造程序流程图 转换为控制流图 得到基本路径 进而为每条基本路径设计测试用例 基本路径法的一个关键步骤是识别出所有的基本路径 本次作业要求你写一个C 程序 输入 待测程序的控制流图 输出 圈复杂
  • chisel环境安装

    step 0 把java装好 chisel依赖于java的 所以第一步你要装个java 去oracle官网去下载 下面网站 Java SE Development Kit 8 下载 www oracle com 如果你恰好家境贫寒 就下上面
  • 关于多项目使用Maven子工程无法使用

    前几天在网上找了一个商城的项目实战遇到一个问题 导入各种包但是Spring的核心配置文件还是全篇爆红 我自己记录一下我的解决方案 因为是多项目的问题 我当时创建文件的时候都把文件建在了Maven的parent目录下 所以无法导包进入 将每个
  • 【Unity基础】day1整理 -----小球吃金币

    小球 先搭一个场地Plane 命名Map 通过将四个墙的立方体归入Map 可以同时控制大小 分别赋予场地和墙的材质 创造一个小球Player 赋予材质和刚体 因为要实现键盘操作控制小球 因此需要写脚本挂载到Player上 using Sys
  • 基于粒子群算法的PID控制器优化设计(matlab实现)

    1 理论基础 PID控制器应用广泛 其一般形式为 可见 PID控制器的性能取决于Kp Ki Kd这3个参数是否合理 因此 优化PID控制器参数具有重要意义 目前 PID控制器参数主要是人工调整 这种方法不仅费时 而且不能保证获得最佳的性能
  • MySQL的C++封装

    最近的项目数据库管理系统从SQL SERVER2000迁移到了MySQL上来 之前基于ADO的连接方式连接上SQL SERVER 使用MySQL数据库管理系统之后 直接在MySQL的C语言的API上以面向对象的方式封装实现了数据库的创建 表
  • C语言操作EXCEL文件(读写)

    C语言操作EXCEL文件 读写 本文主要介绍通过纯C语言进行EXCEL的读写操作 修改时间2018 08 28 如果运行结果均是0 请看文章最后一节 C语言读操作 C语言写操作 在之前需要使用C语言读取Excel文件内容的功能 查阅了很多资
  • markdown 之项目目录文件结构展示

    一般来说 我们为项目写readme文档时 都会对整个目录的项目结构做个说明 例如这样的 我们可以用mddir来生成项目目录结构 mddir 使用命令 node mddir relative path 例子 打开终端或命令提示符 并cd进入m
  • ubuntu系统离线安装docker20.10.7版本及nvidia-container-runtime3.11.0-1版本(离线安装nvidia-docker)

    1 下载3个docker相关安装包 containerd io 1 4 6 1 amd64 deb docker ce cli 20 10 7 3 0 ubuntu xenial amd64 deb docker ce 20 10 7 3
  • HTTPS

    本文首发于我的个人技术博客 看完还不懂HTTPS我直播吃翔 存在即合理 http是非常常见的应用层协议 是超文本传输协议的简称 其传输的内容都是明文的 在这个混乱的世界 明文传输信息想想就可怕 网络 小混混 的手段远比我们这些凡人高明得多
  • SpringBoot2-5

    先解决一个问题 报错1 java 无效的目标发行版 17 修改位置 maven的配置需要改为选取本地maven所在目录 这些都是java指定了1 8比较低但是又都用的版本导致 再解决一个问题 报错2 java 无法访问org springf
  • 《小家:越住越大》

    第一章 二八定律 房子单价很贵 但却像人一样 慢慢被不必要的杂物堆积 变得杂乱 空间不足 人需要减肥 房子也需要减负 常用的东西 20 放在随手可及的地方 不常用的东西 80 合理收纳 这就是隐藏与显示的二八定律 收纳百分之八十的生活杂物
  • 阿里开源 Dragonwell JDK 重磅发布 GA 版本:生产环境可用

    今年 3 月份 阿里巴巴重磅开源 OpenJDK 长期支持版本 Alibaba Dragonwell 的消息 在很长一段时间内都是开发者的讨论焦点 该项目在 Github 上的 Star 数迅速突破 1400 近日 Dragonwell J
  • ADC0804的使用

    一 前言介绍 这个博客主要说明ADC0804的使用 数码管的动态显示作为辅助功能 方便观察 利用滑变和5V电源来获得一个输入电压值 输入到ADC0804的输入端 二 ADC0804芯片的介绍 1 A D转换概念 即模数转换 输入模拟量 比如