51单片机系列--AD/DA

article/2025/10/5 16:48:05

介绍

AD(Analog to Digital):模拟-数字转换,将模拟信号转换为计算机可操作的数字信号
DA(Digital to Analog):数字-模拟转换,将计算机输出的数字信号转换为模拟信号
计算机系统是一个数字系统、离散系统,而我们生活的外部世界是一个模拟系统。为使计算机系统能够了解外部世界,对外部事物进行处理,就必须有一个将模拟量转换为数字量,将数字量转换为模拟量的接口,这就是常说的 A/D和 D/A。
硬件电路模型
在这里插入图片描述
AD转换通常有多个输入通道,用多路选择开关连接至AD转换器,以实现AD多路复用的目的,提高硬件利用率
AD/DA与单片机数据传送可使用并口(速度快、原理简单),也可使用串口(接线少、使用方便)
可将AD/DA模块直接集成在单片机内,这样直接写入/读出寄存器就可进行AD/DA转换,单片机的IO口可直接复用为AD/DA的通道

PCF8591转换模块

在这里插入图片描述

• 单独供电
• PCF8591 的操作电压范围2.5V-6V
• 低待机电流
• 通过I²C 总线串行输入/输出
• PCF8591 通过3 个硬件地址引脚寻址
• PCF8591 的采样率由I²C 总线速率决定
• 4 个模拟输入可编程为单端型或差分输入
• 自动增量频道选择
• PCF8591 的模拟电压范围从VSS 到VDD
• PCF8591 内置跟踪保持电路
• 8-bit 逐次逼近A/D 转换器
时序
在这里插入图片描述

运算放大器

运算放大器(简称“运放”)是具有很高放大倍数的放大电路单元。内部集成了差分放大器、电压放大器、功率放大器三级放大电路,是一个性能完备、功能强大的通用放大电路单元,由于其应用十分广泛,现已作为基本的电路元件出现在电路图中
运算放大器可构成的电路有:电压比较器、反相放大器、同相放大器、电压跟随器、加法器、积分器、微分器
运算放大器电路的分析方法:虚短、虚断(负反馈条件下)

运放电路

在这里插入图片描述
在这里插入图片描述

DA原理

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
分辨率:指AD/DA数字量的精细程度,通常用位数表示。例如,对于5V电源系统来说,8位的AD可将5V等分为256份,即数字量变化最小一个单位时,模拟量变化5V/256=0.01953125V,所以,8位AD的电压分辨率为0.01953125V,AD/DA的位数越高,分辨率就越高

转换速度:表示AD/DA的最大采样/建立频率,通常用转换频率或者转换时间来表示,对于采样/输出高速信号,应注意AD/DA的转换速度

实例代码

XPT2046.c

#include"XPT2046.h"/****************************************************************************
*函数名:SPI_Write
*输  入:dat:写入数据
*输  出:无
*功  能:使用SPI写入数据
****************************************************************************/void SPI_Write(uchar dat)
{uchar i;CLK = 0;for(i=0; i<8; i++){DIN = dat >> 7;  	//放置最高位dat <<= 1;CLK = 0;			//上升沿放置数据CLK = 1;}
}
/****************************************************************************
*函数名:SPI_Read
*输  入:无
*输  出:dat:读取 到的数据
*功  能:使用SPI读取数据
****************************************************************************/uint SPI_Read(void)
{uint i, dat=0;CLK = 0;for(i=0; i<12; i++)		//接收12位数据{dat <<= 1;CLK = 1;CLK = 0;dat |= DOUT;}return dat;	
}/****************************************************************************
*函数名:Read_AD_Data
*输  入:cmd:读取的X或者Y
*输  出:endValue:最终信号处理后返回的值
*功  能:读取触摸数据
****************************************************************************/
uint Read_AD_Data(uchar cmd)
{uchar i;uint AD_Value;CLK = 0;CS  = 0;SPI_Write(cmd);for(i=6; i>0; i--); 	//延时等待转换结果CLK = 1;	  //发送一个时钟周期,清除BUSY_nop_();_nop_();CLK = 0;_nop_();_nop_();AD_Value=SPI_Read();CS = 1;return AD_Value;	
}

XPT2046.h

#ifndef	  __XPT2046_H_
#define   __XPT2046_H_//---包含头文件---//
#include<reg52.h>
#include<intrins.h>//---重定义关键词---//
#ifndef uchar
#define uchar unsigned char
#endif#ifndef uint
#define uint  unsigned int
#endif#ifndef ulong
#define ulong  unsigned long
#endif//---定义使用的IO口---//
sbit DOUT = P3^7;	  //输出
sbit CLK  = P3^6;	  //时钟
sbit DIN  = P3^4;	  //输入
sbit CS   = P3^5;	  //片选uint Read_AD_Data(uchar cmd);
uint SPI_Read(void);
void SPI_Write(uchar dat);#endifmain.c```cpp
#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器
#include"XPT2046.h"	typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;u8 disp[4];
u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};/*******************************************************************************
* 函 数 名         : delay
* 函数功能		   : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{while(i--);	
}/*******************************************************************************
* 函数名         :datapros()
* 函数功能		 :数据处理函数
* 输入           : 无
* 输出         	 : 无
*******************************************************************************/
void datapros()
{u16 temp;static u8 i;if(i==50){i=0;temp = Read_AD_Data(0x94);		//   AIN0 电位器}i++;disp[0]=smgduan[temp/1000];//千位disp[1]=smgduan[temp%1000/100];//百位disp[2]=smgduan[temp%1000%100/10];//个位disp[3]=smgduan[temp%1000%100%10];		
}/*******************************************************************************
* 函数名         :DigDisplay()
* 函数功能		 :数码管显示函数
* 输入           : 无
* 输出         	 : 无
*******************************************************************************/
void DigDisplay()
{u8 i;for(i=0;i<4;i++){switch(i)	 //位选,选择点亮的数码管,{case(0):LSA=1;LSB=1;LSC=1; break;//显示第0位case(1):LSA=0;LSB=1;LSC=1; break;//显示第1位case(2):LSA=1;LSB=0;LSC=1; break;//显示第2位case(3):LSA=0;LSB=0;LSC=1; break;//显示第3位	}P0=disp[i];//发送数据delay(100); //间隔一段时间扫描	P0=0x00;//消隐}		
}/*******************************************************************************
* 函 数 名       : main
* 函数功能		 : 主函数
* 输    入       : 无
* 输    出    	 : 无
*******************************************************************************/
void main()
{	while(1){datapros();	 //数据处理函数DigDisplay();//数码管显示函数		}		
}


http://chatgpt.dhexx.cn/article/KPryGr3W.shtml

相关文章

RDA5981开发环境安装

满满的到处是坑~~ 一&#xff1a;Keil MDK 安装 1.安装KEIL MDK 5.24a版本以及破解。 2.添加环境变量&#xff1a;C:\Keil_v5\ARM\ARMCC\bin 二&#xff1a;GCC-ARM交叉编译安装 1.从 https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads 下载最新版本 win7…

8259A简介

文章目录 1中断简介1.1中断1.2禁止中断与中断屏蔽1.3中断嵌套1.4中断类型号和中断向量表 2,8259A简介2.1 8259A介绍2.2 8259A内部结构2.3 8259A引脚2.3.1 与CPU相连的引脚2.3.2 与外设相连的引脚 2.4 8259a可编程寄存器 1中断简介 1.1中断 定义&#xff1a;CPU暂停当前程序的…

RTL8201-RMII电路

本文分享一下RTL8201如何用作RMII电路&#xff0c;无需外部晶体&#xff0c;时钟由主芯片产生。 RTL8201是常用的百兆电流型PHY&#xff0c;支持端口自动翻转&#xff08;AUTO MDIX&#xff09;&#xff0c;如下框图 RMII相对MII来说&#xff0c;连接线更少&#xff0c;MII需要…

RDMA 、RoCE 、IB 、TCP、Ethernet

ROCE ROCE&#xff08;Remote Direct Memory Access over Converged Ethernet&#xff09;是一种网络技术&#xff0c;它结合了RDMA&#xff08;远程直接内存访问&#xff09;和以太网交换机的特性。ROCE允许主机之间通过以太网进行高效的直接内存访问&#xff0c;从而提供低延…

RTD2785T RTD2785R 2K eDP屏驱动芯片介绍

RTD2785T 支持VGA2HDMI2DP转eDP&LVDS 2K分辨率 支持按键菜单和Uart串口通信&#xff0c;用于工控MCU通过uart指令调节参数 文章转载&#xff1a; RTD2785T 2HDMI2DP转eDP&LVDS 2K方案设计-易显方案设计 (rtddisplay.com)

【RDMA】15. RDMA之RoCE Soft-RoCE

【RDMA】RDMA 学习资料总目录_bandaoyu的笔记-CSDN博客SavirRDMA 分享1. RDMA概述https://blog.csdn.net/bandaoyu/article/details/112859853https://zhuanlan.zhihu.com/p/1388747382. 比较基于Socket与RDMA的通信https://blog.csdn.net/bandaoyu/article/details/1128613993…

Uva509 RAID

我在这题卡了一天&#xff0c;心态有点小崩。不过最后AC的时候还是很开心的。 坑点&#xff1a;1.注意当两个及以上disc无法读取时&#xff0c;输入不合法。 2.当校验结果与预期ans不同时&#xff0c;输入不合法。 其它都为合法情况。 当合法时&#xff0c;校验块不能作为数据…

百度dueros人工智能-RDA5981(R01开发板)-学习心得-安装SDK(dueros的MbedOS系统)

R01开发板的代码及功能测试需要安装SDK才能正常测试,我们需要了解一点MbedOS系统的基本知识及R01开放板的硬件知识才能开始安装SDK的工作。 1.Mbed OS基础知识 Mbed OS是一个开放源码操作系统,专门用于为物联网(IoT)设备设计的ARM微控制器的平台:需要连接到互联网的低功率、…

百度dueros人工智能-RDA5981(R01开发板)-学习心得-入门及硬件连接

一.入门及硬件连接 自从2017年12月10号收到在深圳比特跳动技术有限公司的淘宝网上购买的百度dueros人工智能-R01开发板,当拆开快递包裹的时候,我本以为可以到手就玩,结果当场就懵了,配件如下图所示: 配件从左到右分别是MIC语音输入,天线,发声喇叭,R01开放板。看见这四…

从RDA5981A/B/C编译后map文件和datasheet分析内存分配情况

先查看RDA5981的datasheet, 如下图,RDA5981芯片内部有三个RAM区域, I_SRAM,D_SRAM,I_cache, 还可以外挂PSRAM, 内存映射图解释: 在编译目录BUILD\UNO_81C\GCC_ARM\找到*.map文件, 可以搜索到如下地址情况: .data 0x00100080 .bss 0x001017a8 .stack …

RDA5981开发环境搭建

最近有商家在卖带有CC2530 Zigbee模块的板子&#xff08;电子垃圾&#xff09;&#xff0c;我对Zigbee还不是特别感冒&#xff08;没时间研究&#xff09;&#xff0c;倒是看中了同一个板子上的RDA5981模块。我这个人有个特点&#xff0c;没有研究明白的东西&#xff0c;不会轻…

Apache添加PHP模块重启apache服务报错

根据网上教程&#xff0c;在Apache中添加php模块&#xff1a; LoadModule php7_module C:\Program Files\php\php-7.3.4-Win32-VC15-x64\php7apache2_4.dll AddType application/x-httpd-php .php LoadModule php7_module modules/libphp7.so PHPIniDir C:\Program Files\php\…

linux上apache目录在哪,Linux下Apache目录明细

与Apache服务器相关的重要目录和文件如下&#xff1a; /etc/httpd/是Apache服务器的根目录 /etc/httpd/conf/httpd.conf是Apache服务器的主配置文件&#xff0c;其中包含指定文档root的配置 /var/www/html/是Apache服务器的文档根目录 /etc/init.d/httpd是Apache服务器启动脚本…

windows下apache简单配置php解释器

目录 1. apache部署 1.1. 下载安装包 1.2 安装 1.3 文件配置 1.4 进入cmd&#xff0c;执行httpd -k install -n apache 1.5 服务启动 1.6 服务验证 1.7 apache服务搭建至此结束。 2. php环境部署 2.1 php包下载 2.2 添加环境变量 3. apache下加载php解释器 3.1 编写…

宝塔面板定时重启apache、mysql、php5.6等Shell命令

定时重启apache service httpd restart 定时重启mysql service mysqld restart 定时重启php5.6 service php-fpm-56 restart 定时重启php5.7 service php-fpm-72 restart 还有一种定时重启php5.6的方法 /etc/init.d/php-fpm-56 restart 停止推送 php /www/wwwroot/y…

linux环境下,重启Apache服务httpd出现以下错误

重点查看红线圈出的错误信息 之后修改配置/etc/httpd/conf/httpd.conf未见&#xff0c;由错误信息已知是文件的355行组织了它重启&#xff0c;所以只需将其注释掉或者删掉即可。 保存文件 重新启动即可

重启apache下php,怎么重启apache

怎么重启apache&#xff1f; windows下重启Apache ● 首先右击“此电脑”&#xff0c;点击“管理”&#xff1b; ● 在打开的“计算机管理”程序中&#xff0c;双击“服务和应用程序”。 ● 在打开的“计算机管理”程序中&#xff0c;双击“服务”。 ● 在所有的服务列表中&…

安装、启动与停止Apache服务

安装、启动与停止Apache服务 安装Apache相关软件 [rootcentos7 ~]# rpm -q httpd [rootcentos7-1 ~]# mkdir /opt/centos //创建目录/opt/centos [rootcentos7-1 ~]# mount /dev/cdrom /opt/centos //挂载光盘到/opt/centos 下 mount: /dev/sr0 写保护…

Ansys里不同材料属性按照不同颜色显示出来

在plotctrls里面&#xff0c;有numbers的设置&#xff0c;按照材料或者实常数可以将不同部位编号。 编好号之后&#xff0c;就可以对所选的构件染色了 希望有所帮助。

AD生成BOM表_材料清单 (Bill of Material)

打开Altium Designer软件&#xff0c;然后在原理图界面&#xff08;XXX.SchDoc&#xff09;,选择 Reports&#xff08;报告&#xff09;>> Bill of Materials(材料清单)。 显示如下界面&#xff1a; 选择所需要的BOM表表头&#xff0c;BOM表头_comment_Description_desi…