当前位置: 首页 > news >正文

02- 模块化编程-006 ADC0808数码显示对比

1、ADC0808 芯片介绍

        ADC0808是一款集成的CMOS设备,包含8位模拟至数字转换器、8通道多路复用器和与微处理器兼容的控制逻辑。8位A/D转换器采用逐次逼近作为转换技术。转换器特点包括高阻抗斩波稳定比较器、256R电压分压器、模拟开关树和逐次逼近寄存器。8通道多路复用器可以直接访问8个单端模拟信号。

        该设备消除了外部零点和满量程调整的需要。通过锁存和解码的多路复用器地址输入以及锁存的TTL TRI-STATE®输出,提供了与微处理器的简易接口。

        ADC0808的设计通过结合几种A/D转换技术的最理想方面进行了优化。ADC0808和ADC0809提供高速、高精度、温度依赖性小、长期精度和重复性极佳,并且功耗极低。这些特点使得该设备非常适合从过程和机器控制到消费和汽车应用的应用。 

特点
  • 易于与所有微处理器接口

  • 可以比率计量操作或使用5 Vpc或模拟跨度调整的电压参考

  • 不需要零点或满量程调整

  • 8通道多路复用器,带地址逻辑

  • 输入范围0V至5V,单5V电源供电

引脚定义

IN0~IN7:8路模拟量输入端。

D0~D7:8位数字量输出端。

ADDA、ADDB、ADDC:3位地址输入线,用于选择8路模拟通道中的一路,选择情况见表。

ALE:地址锁存允许信号,输入,高电平有效。

START:A/D转换启动信号,输入,高电平有效。

EOC:A/D转换结束信号,输出。当启动转换时,该引脚为低电平,当A/D转换结束时,该线脚输出高电平。

OE:数据输出允许信号,输入,高电平有效。当转换结束后,如果从该引脚输入高电平,则打开输出三态门,输出锁存器的数据从D0~D7送出。

CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ. REF+、REF-:基准电压输入端。

 时序图

典型电路 

 2、仿真电路

电路中,12位的max1241和adc0808电压采样结果形成对比,红色数码管显示的是 adc0808,蓝色数码管显示的是max1241的采样结果,结果表明,两者误差相差10倍以上。

3、软件代码

ADC0808.c
/********************************************************************** 模块名称: Adc0808.h* 模块名:ADC0808控制模块* 功能描述: 该模块定义了与ADC0808进行通信所需的宏和函数原型* 创 建 人:bianjingyuan * 日期:2024-10-30* 编译环境:Windows XP + MPLAB IDE 8.83 + Picc 9.60* 版本号:1.0* 修改记录:*********************************************************************/
// 数据类型定义
#define 	uchar 	unsigned char
#define 	uint  	unsigned int
#define 	ulong 	unsigned long
#define 	nop		asm("NOP")
#define 	sleep  	asm("sleep")
//**************************新增模块的相关定义**********************************/
// 定义0808通信端口
/*解析:
START、EOC 和 OE 是用于0808通信的端口信号。
TRISD3 = 0 配置RD3为输出,表示在代码中START信号将由微控制器驱动。
TRISD4 = 1 配置RD4为输入,表示在代码中EOC信号为微控制器从外部设备读取的信号。
TRISA0 = 0 配置RA0为输出,表示在代码中OE信号将由微控制器驱动。
*/
#define START   RD3   	// RD3作为输出
#define EOC     RD4   	// RD4作为输入
#define OE      RA0   		// RA0作为输出// 宏定义 - 这里定义了PORTC为某个特定的硬件寄存器
#define ADC_DATA_PORT PORTC//**************************本模块的函数定义**********************************/
uchar ad_result=0;
extern void delayus(uchar a);// 延时10us最准
/********************************************************************** 函数名: Adc0808_Read* 功能描述: 读取ADC0808的转换结果* 调用函数: delayus()* 全局变量: ad_result, START, EOC, OE* 输    入: 无* 返    回: ADC转换结果(无符号字符)*********************************************************************/
uchar Adc0808_Read(void)
{// 首先是START信号,由低变高再变低START = 0;START = 1; // 清空ADC0808的内部寄存器值delayus(10);START = 0; // 下降沿开始AD转换// 然后看EOC信号,由高到低while (EOC == 0); // 等待EOC信号为0,表示转换完成// OUTPUT ENABLE(OE)信号变高,然后读取输出信号OE = 1;           // 使能输出ad_result = ADC_DATA_PORT; // 使用宏定义来读取数据OE = 0;           // 关闭输出return ad_result; // 返回ADC转换结果
}
main.c
//********************************************************************
//*  文件名:main.c
//*  文件描述:单片机主程序,负责系统初始化和电压显示
//*  编译环境: Windows XP + MPLAB IDE 8.83 + Picc 9.60
//*  编程者: bianjingyuan
//*  编程日期: 2024-11-06
//*  版本号:1.0
//*  修改记录:无
//********************************************************************
void main()
{Initial_System();     // 初始化系统设置ad_init();            // 初始化AD转换功能Set_Port_IO();        // 设置端口IO方向max7219_int();        // 初始化MAX7219显示驱动di();                 // 禁用全局中断TRISD0 = 1;           // RD0为转换结果输入TRISD4 = 1;           // 配置RD4为输入TRISC = 0b11111111;   // 配置RC端口为输入max1241_init_io();    // 初始化MAX1241模块add3 = 0; add2 = 0;  // 清除显示数据add1 = 0; add0 = 0;redo:counter = 0;for (k = 10; k > 0; k--)  // 进行10次采样,以获得5.115V电压基准{max1241_read_io();    // 读取MAX1241转换结果counter = counter + adre_1241; // 累加转换结果}cal_hex(counter >> 3);   // 计算结果并转为十六进制send(0x05, add3 + 128);  // 发送小数点相关数据,用于显示电压send(0x06, add2);send(0x07, add1);send(0x08, add0);counter = 0;for (k = 20; k > 0; k--)  // 进行20次采样,以获得ADC0808转换结果{Adc0808_Read();       // 读取ADC0808的转换结果counter = counter + ad_result; // 累加ADC转换结果}cal_hex(counter);        // 计算并转为十六进制send(0x01, add3 + 128); // 发送ADC结果send(0x02, add2);send(0x03, add1);send(0x04, add0);delay1s();              // 延时1秒delayms(100);           // 延时100毫秒delayus(10);            // 延时10微秒delay1s();              // 再次延时1秒goto redo;              // 循环返回到redo标签
}

4、代码解析

        该代码实现了对 ADC0808 的控制与数据读取。ADC0808 是一种8位模数转换器,具有8通道的多路复用输入。代码通过定义宏、设置引脚以及实现读取函数,实现与 ADC0808 的通信。模块的主要功能包括:

  1. 定义数据类型及控制信号

    • 使用宏定义了一些常用的数据类型缩写及控制信号,如 STARTEOC 和 OE,分别用于启动转换、检测转换结束和使能数据输出。
    • 定义 ADC_DATA_PORT 为数据读取端口。
  2. 读取转换结果

    • Adc0808_Read() 函数用于执行模数转换并读取转换结果。通过控制引脚信号顺序,实现对 ADC0808 的启动、转换完成检测,以及数据读取。

 5、硬件资源分配表 

序号引脚类别方向功能定义功能内容相关寄存器及配置
1RD3数字IO输出START启动信号TRISD3 = 0
2RD4数字IO输入EOC转换完成信号TRISD4 = 1
3RA0数字IO输出OE输出使能信号TRISA0 = 0
4PORTC数据端口输入ADC_DATA_PORT读取ADC数据数据端口(PORTC)

6、软件流程图


        在这个流程图中:

  • 启动ADC转换过程:流程的起点,开始ADC的转换过程。
  • 设置START信号由低变高再变低:设置ADC的START信号,通常是一个脉冲信号,用于启动ADC转换。
  • 等待EOC信号变高:等待转换结束信号EOC(End of Conversion)变为高电平,表示转换完成。
  • 使能输出(OE)读取转换结果:使能输出使能信号(OE),准备读取转换结果。

7、仿真运行结果

 

 

相关文章:

02- 模块化编程-006 ADC0808数码显示对比

1、ADC0808 芯片介绍 ADC0808是一款集成的CMOS设备,包含8位模拟至数字转换器、8通道多路复用器和与微处理器兼容的控制逻辑。8位A/D转换器采用逐次逼近作为转换技术。转换器特点包括高阻抗斩波稳定比较器、256R电压分压器、模拟开关树和逐次逼近寄存器。8通道多路复…...

又发现了Mac妙控鼠标的新使用方法

我一直是不爱用妙控鼠标的,因为用起来怪怪的,但是今天发现BettreAndBetter支持妙控鼠标的修改,于是就找出了闲置了许久的妙控鼠标试了一下 优化后的妙控鼠标使用起来就没有任何不适应的地方了,三指按下模拟中键,而且还…...

Webserver(4.6)poll和epoll

目录 pollclient.cpoll.c epollepoll.cclient.c epoll的两种工作模式水平触发边沿触发 poll poll是对select的一个改进 select的缺点在于每次都需要将fd集合从用户态拷贝到内核态,开销很大。每次调用select都需要在内核遍历传递进来的所有fd,这个开销也…...

LVGL 与 QT

LVGL 与 QT LVGL 适用于嵌入式、资源受限设备,尤其是在需要高效图形渲染和小型显示屏的场景下非常合适。它具有轻量级、模块化的特点,适用于内存和计算能力有限的硬件。 Qt 是一个功能强大的跨平台框架,适合开发桌面应用以及较为复杂的嵌入式…...

如何选择最适合的项目管理软件?2024年大厂首选7款工具盘点

选择最适合的项目管理软件对于提升团队效率、优化工作流程至关重要。2024年,各大厂在项目管理上逐渐趋向于使用更加智能化、集成化和协作性的工具。以下是如何选择最适合的项目管理软件,并对2024年大厂首选工具进行盘点。 选择适合的项目管理软件的关键…...

【数据结构】选择排序——选择排序 和 堆排序

选择排序 和 堆排序 一、选择排序选择排序的思路及其代码选择排序的弊端 二、堆排序三、速度对比同时排10000个数同时排100000个数同时拍500000个数堆排 1 亿个数 一、选择排序 选择排序的思路及其代码 选择排序思路很简单 就是经过将数组遍历选择最小值 将最小值位置的数与数…...

P11229 [CSP-J 2024] 小木棍

[CSP-J 2024] 小木棍 题目描述 小 S 喜欢收集小木棍。在收集了 n n n 根长度相等的小木棍之后,他闲来无事,便用它们拼起了数字。用小木棍拼每种数字的方法如下图所示。 现在小 S 希望拼出一个正整数,满足如下条件: 拼出这个数…...

【学习笔记】SAP ABAP——OPEN SQL(一)【SELECT语句】

SELECT语句简介 SELECT <lines> <columns> FROM <db> WHERE <condition>其中代表查询的件数&#xff0c;代表查询的字段名 SELECT SINGLE SELECT SINGLE <cols> FROM <db> WHERE <condition>该语句用于从数据库表中查询单条数据 …...

SQL注入(1)

1.数字型注入 例如PHP代码 “ Select username from users where id”.&#xff04;&#xff3f;GET&#xff3b;id&#xff3d; 可以注意到&#xff0c;用户的输入ID字段没有任何过滤的&#xff0c;被直接拼接在了SQL查询语句中&#xff0c;由于ID没有被引号包裹&#xff…...

在AI时代,如何解决人的工作岗位被AI替代的问题?

在AI时代&#xff0c;工作岗位被AI替代的问题确实是一个重要的社会课题。随着技术的不断进步&#xff0c;许多传统的工作变得自动化&#xff0c;这带来了效率的提升&#xff0c;但也引发了就业方面的挑战。要应对这一问题&#xff0c;我们可以从以下几方面入手&#xff1a; 促进…...

Linux命令--paste

简介 paste命令用于合并文件行 参数说明 -d: 自定义间隔符&#xff0c;默认为tab -s&#xff1a;串行处理&#xff0c;非并行 示例 将两个文件&#xff0c;按照行合并 demo1.conf内容如下&#xff1a; name domain ip area user password roledemo2.conf内容如下 test t…...

数据结构模拟题[九]

数据结构试卷&#xff08;九&#xff09; 一、选择题 (30 分) 1&#xff0e;下列程序段的时间复杂度为&#xff08; &#xff09;。 for(i0 &#xff1b; i<m &#xff1b; i) for(j0 &#xff1b; j<t &#xff1b; j) c[i][j]0 &#xff1b; for(i0 &#xff1b; i…...

2024年10月国产数据库大事记-墨天轮

本文为墨天轮社区整理的2024年10月国产数据库大事件和重要产品发布消息。 目录 2024年10月国产数据库大事记 TOP102024年10月国产数据库大事记&#xff08;时间线&#xff09;产品/版本发布代表厂商大事记信创数据库上市公司2024年Q3财报 达梦数据&#xff1a;2024年前三季度…...

Andon 业务流程业务开发陷阱----从真实用户与管理者视角逻辑差异

Q : Andon 问题识别归类(就是问题的3层细化)&#xff0c;是在事中&#xff0c;还是在事后? A : 不存在事中就细化归类&#xff0c;有悖于生产问题解决流程。 从操作员的角度来看&#xff0c;他们在事中可能只能识别出存在质量问题&#xff0c;但无法进行具体的质量问题编号…...

Python闭包|你应该知道的常见用例(上)

引言 在 Python 编程语言中&#xff0c;闭包通常指的是一个嵌套函数&#xff0c;即在一个函数内部定义的另一个函数。这个嵌套的函数能够访问并保留其外部函数作用域中的变量。这种结构就构成了一个闭包。 闭包在函数式编程语言中非常普遍。在 Python 中&#xff0c;闭包特别有…...

printf影响单片机中断速度

printf是我们常用的调试程序的手段&#xff0c;在第一版程序中&#xff0c;经常会使用printf来验证程序是否工作正确。这样的调试手段应该在正式版的程序发布前注释掉或者删除。而且不当地使用printf也会带来某些功能性问题&#xff0c;例如&#xff0c;在某项目中&#xff0c;…...

JavaScript 23种经典设计模式简介

23种JavaScript经典设计模式 JavaScript经典设计模式 通过之前的学习&#xff0c;我们知道设计模式是一种解决代码组织、代码复用和代码可维护性等问题的技术方法。它通过将代码以特定的方式组织起来&#xff0c;使代码结构更加清晰、可读性更高、易于维护和扩展。为了在开发…...

位运算相关算法

一、异或运算介绍 1、性质介绍 异或运算&#xff08;XOR&#xff0c;Exclusive OR&#xff09;是一种位运算符。对于两个位进行异或操作&#xff0c;当且仅当这两个位不同时&#xff0c;结果为 1&#xff1b;如果相同&#xff0c;则结果为 0。 A B A^B00001 1 101110 任何数…...

解决:无法在此设备上激活Windows因为无法连接到你的组织的激活服务器

问题&#xff1a; 桌面右下角会出现这个东西&#x1f447; 在设置里查看激活状态就会看到&#x1f447; 解决方法 &#xff1a; 1.打开CMD 搜索CMD&#xff0c;然后以管理员身份运行 2.设置 KMS服务器 1&#xff09;命令行输入&#xff1a; slmgr /skms kms.03k.org 然后…...

【Spring】——SpringBoot项目创建

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 引入 一&#xff1a;介绍 二&#xff1a;Spring Boot项目创建 0&#xff1a;项目目录 1&#xff1a…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...