51单片机学习笔记AD/DA

这篇具有很好参考价值的文章主要介绍了51单片机学习笔记AD/DA。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

AD/DA

AD(Analog to Digital):模拟-数字转换,将模拟信号转换为计算机可操作的数字信号。比如单片机只能识别0与5V数字信号,当输入为2.5V——模拟信号时,就需要转化为单片机所能读取的数字信号。

DA(Digital to Analog):数字-模拟转换,将计算机输出的数字信号转换为模拟信号。比如单片机需要通过转换,才能发送除0、5V外的模拟信号

51单片机学习笔记AD/DA

上图的模拟量与数字量呈正比关系。(即255对应5V,0对应0V,255/2对应2.5V,以此类推)。

AD转换通常有多个输入通道,用多路选择开关连接至AD转换器,以实现AD多路复用的目的,提高硬件利用率。即一个AD可接多个模拟量检测,通过切换进行选择模拟量检测。

AD/DA与单片机数据传送可使用并口(速度快、原理简单),也可使用串口(接线少、使用方便)。需要注意的是,这里的串口不是之前沟通两个设备的串口。

可将AD/DA模块直接集成在单片机内,这样直接写入/读出寄存器就可进行AD/DA转换,单片机的IO口可直接复用为AD/DA的通道。AD一般多个通道,而DA一般只有一个通道(因为需要输出连续的信号,多个通道容易错乱);且DA一般可以用PWM进行替代。

AD/DA有时也叫ADC/DAC

51单片机学习笔记AD/DA

51单片机学习笔记AD/DA

AD/DA原理

51单片机学习笔记AD/DA

 

51单片机学习笔记AD/DA

我们以旧版的为例,因为旧版的芯片讲起来会相对简单些

DB0~DB7为输出的八个数据;IN0~IN7为输入的八个通道(8路),通过8路模拟开关进入A/D转换;ADDA~ADDC负责控制8路模拟开关的操作,选择读取哪一路的数值;A/D转换上方的三个引脚控制A/D转换,其中START控制A/D开始转换,EOC为转换结束和时钟信号,可以将输出的电压转换为一定的信号,并通过锁存器进行输出缓存,CLOCK负责锁存器的输出控制,OE负责输出使能,将数据输出出去。

 运算放大器

运算放大器(简称“运放”)是具有很高放大倍数的放大电路单元(不是像电阻那样的单独元件)。

内部集成了差分放大器、电压放大器、功率放大器三级放大电路,是一个性能完备、功能强大的通用放大电路单元,由于其应用十分广泛,现已作为基本的电路元件出现在电路图中。

运算放大器可构成的电路有:电压比较器、反相放大器、同相放大器、电压跟随器、加法器、积分器、微分器等。

运算放大器电路的分析方法:虚短、虚断(负反馈条件下)

运算放大器的特性:

1.输入阻抗非常大(同相、反向输入端几乎不流入与流出电流),以避免对前面电路产生影响。

2.内部有功率输出部分,因此输出端具有驱动能力。

接下来的图片是不同运算放大器的电路图

51单片机学习笔记AD/DA

51单片机学习笔记AD/DA

51单片机学习笔记AD/DA

51单片机学习笔记AD/DA

下面就是DA的原理

51单片机学习笔记AD/DA

 51单片机学习笔记AD/DA

XPT2046时序

51单片机学习笔记AD/DA

CS(片选)、DCLK(时钟)、DIN(数据输入)、DOUT(数据输出)为SPI中基本的信号线。

除CS线外的三根线可进行复用(多个芯片共用三根线),每个芯片都有单独的CS线(片选)可供选择来运行(同一时刻只运行一个芯片,否则容易出错)。

有时可以进行替换:DIN可以被换成MISO(主设备输入,从设备输出),DOUT可以被换成MOSI(主设备输出,从设备输入)。

 在进行操作时首先选择CS线,即应让CS线拉低,从而可以进行通信,接着调节DCLK,其上升沿输入数据,下降沿输出数据;通过DIN与DOUT线进行数据传输;需要注意的是,当DIN进行时,DOUT空闲,此时可以进行其他芯片输出。反过来同理,然后当经过一个周期(八位)后,主从机内部数据进行一次交换;最后将CS线拉高,从而完成通信。

在发送字节的时候,发送的第一个字节定义为控制字,而控制字的前三位表示模式的选择,之后发送完一个字节后可进行读出AD值。文章来源地址https://www.toymoban.com/news/detail-484970.html

AD数模转换代码

主函数代码

#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "XPT2046.h"



unsigned int ADVAlue;

void main()
{
	LCD_Init();
	LCD_ShowString(1,1,"ADJ NTC RG");
	while(1)
	{
		ADVAlue=XPT2046_ReadAD(XPT2046_XP_8);//读取AIN0,可调电阻
		LCD_ShowNum(2,1,ADVAlue,3);
		ADVAlue=XPT2046_ReadAD(XPT2046_YP_8);//读取AIN1,热敏电阻
		LCD_ShowNum(2,5,ADVAlue,3);
		ADVAlue=XPT2046_ReadAD(XPT2046_VBAT_8);//读取AIN2,光敏电阻
		LCD_ShowNum(2,9,ADVAlue,3);
		Delay(10);
	}
}

部分模块代码

#include <REGX52.H>
#include "Delay.h"

sbit XPT2046_CS=P3^5;
sbit XPT2046_DCLK=P3^6;
sbit XPT2046_DIN=P3^4;
sbit XPT2046_DOUT=P3^7;

/**
  * @brief  ZPT2046读取AD值
  * @param  Command 命令字,范围:头文件内定义的宏,结尾的数字表示转换的位数
  * @retval AD转换后的数字量,范围:8位为0~255,12位为0~4095
  */
unsigned int XPT2046_ReadAD(unsigned char Command)
{
	unsigned char i;
	unsigned int ADVAlue=0;		//确保初始值为0
	XPT2046_DCLK=0;		//由时序图中其初始值为0,给其初始化
	XPT2046_CS=0;		//选取芯片
	
	
	for(i=0;i<8;i++)
	{
		XPT2046_DIN=Command&(0x80>>i);
		XPT2046_DCLK=1;		//发送数据
		XPT2046_DCLK=0;		//结束发送

	}
	
	for(i=0;i<16;i++)
	{
		XPT2046_DCLK=1;		//先恢复为上升沿
		XPT2046_DCLK=0;		//下降沿读取
		if(XPT2046_DOUT){ADVAlue|=(0x8000>>i);}//因为读取的数据是16位,因此用0x8000
	}
	XPT2046_CS=1;		//完成时序
	if(Command&0x08)
	{
		return ADVAlue>>8;//使得显示时后面无0填充
	}
	else
	{
		return ADVAlue>>4;//使得显示时后面无0填充
	}
	
	
}

 DA数模转换代码

主函数代码

#include <REGX52.H>
#include "Key.h"
#include "Delay.h"
#include "Nixie.h"
#include "Timer0.h"

sbit DA=P2^1;

unsigned char Counter,Compare;
unsigned char i;

void main()
{
	Timer0_Init();
	Compare=5;
	while(1)
	{
		for(i=0;i<100;i++)
		{
			Compare=i;
			Delay(10);
		}
		for(i=100;i>0;i--)
		{
			Compare=i;
			Delay(10);
		}
		
		
	}
}

void Timer0_Routine()  interrupt 1
{
	TL0 = 0x9C;		//设置定时初值
	TH0 = 0xFF;		//设置定时初值
	Counter++;
	Counter%=100;
	if(Counter<Compare)
	{
		DA=1;
	}
	else
	{
		DA=0;
	}
	
	
}

到了这里,关于51单片机学习笔记AD/DA的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【51单片机】AD模数转换&DA数模转换(江科大)

    · AD(Analog to Digital):模拟-数字转换,将模拟信号转换为计算机可操作的数字信号 · DA(Digital to Analog):数字-模拟转换,将计算机输出的数字信号转换为模拟信号 · AD/DA转换打开了计算机与模拟信号的大门,极大的提高了计算机系统的应用范围,也为模拟信号数字化处理提供了可能 ·

    2024年02月19日
    浏览(21)
  • MCU-51:单片机之AD模数转换与DA数模转换

    AD(Analog to Digital):模拟-数字转换,将模拟信号转换为计算机可操作的数字信号 DA(Digital to Analog):数字-模拟转换,将计算机输出的数字信号转换为模拟信号 AD/DA转换打开了计算机与模拟信号的大门,极大的提高了计算机系统的应用范围,也为模拟信号数字化处理提供了

    2023年04月24日
    浏览(16)
  • 单片机——C51实验含Proteus仿真(AD转换器(数字电压表),DA转换器(波形发生器))

    分为两部分:AD转换器实现数字电压表,DA转换器实现波形发生器(在仿真部分详细说明) 所用到的原理图:  AD转换器实现数字电压表部分         需要打开main函数中LCD_init(),ADC(),display()三个注释其中电压的输出显示用到了LCD1602关于这部分详情见(96条消息) 单片机——

    2024年02月08日
    浏览(27)
  • 【单片机】15-AD和DA转换

    1.什么是AD转换? A(A,analog,模拟的,D,digital,数字的) 现实世界是模拟的,连续分布的,无法被分成有限份; 计算机世界是数字的,离散分布的,可以被分成有限份的 AD转换就是把一个物理量从模拟的转换成数字的。 2.AD转换的意义 想要计算机来实现现实世界 3.什么情

    2024年02月07日
    浏览(23)
  • 【【51单片机DA转换模块】】

    2024年02月14日
    浏览(15)
  • 单片机第一季:零基础13——AD和DA转换

    51 单片机系统内部运算时用的全部是数字量,即0 和1,因此对单片机系统而言,无法直接操作模拟量,必须将模拟量转换成数字量。所谓数字量,就是用一系列0 和1 组成的二进制代码表示某个信号大小的量。用数字量表示同一个模拟量时,数字位数可以多也可以少,位数越多

    2024年02月13日
    浏览(22)
  • PCF8591芯片的AD/DA转换(适用于蓝桥杯单片机)

    目录 1、PCF8591的引脚介绍  2、用IIC发送或接收字节              发送的第一个字节         发送的第二个字节   发送第三个字节     3.发送和接收的字节转换  4.全部代码 IIC部分 接收电压数据 发送电压数据                      在和单片机实际应用中它的

    2024年02月05日
    浏览(17)
  • 【【51单片机AD转换模块】】

    2024年02月15日
    浏览(18)
  • 51单片机课程设计——基于单片机的AD模数转换设计

    一、功能简介 1.A/D 是模拟量到数字量的转换,依靠的是模数转换器(AnalogtoDigitalConverter),简称ADC。D/A是数字量到模拟量的转换,依靠的是数模转换器(DigitaltoAnalogConverter),简称DAC。它们的道理是完全一样的,只是转换方向不同,因此我们讲解过程主要以A/D为例来讲解。

    2024年02月04日
    浏览(25)
  • 十四、51单片机之AD转换

    (1)A是指analog、模拟的;D是指digital、数字的。 (2)现实世界是模拟的,连续分布的,无法被分成有限份;计算机世界是数字的,离散分布的,是可以被分成有限份的; (3)AD转换就是把一个物理量从模拟的转换成数字的。 自然界多数是模拟量,为了方便计算机处理,人为的数字

    2024年02月06日
    浏览(20)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包