【51单片机】AD模数转换&DA数模转换(江科大) 您所在的位置:网站首页 单片机ad转换器实验报告 【51单片机】AD模数转换&DA数模转换(江科大)

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

2024-07-16 02:03| 来源: 网络整理| 查看: 265

1.AD/DA介绍

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

2.硬件电路模型

在这里插入图片描述 · AD转换通常有多个输入通道,用多路选择开关连接至AD转换器,以实现AD多路复用的目的,提高硬件利用率 · AD/DA与单片机数据传送可使用并口(速度快、原理简单),也可使用串口(一位一位发送、接线少、使用方便) · 可将AD/DA模块直接集成在单片机内,这样直接写入/读出寄存器就可进行AD/DA转换,单片机的IO口可直接复用为AD/DA的通道 PWM在一定程度上可以代替DA

3.硬件电路

在这里插入图片描述

4.XPT2046

XPT2046是一个A/D转换器,用的时候直接用时序将A/D的值读出即可 XPT2046时序 在这里插入图片描述 DCLK、DIN、DOUT三根线共用,而每个芯片有一个单独的CS片选,在同一时间只选中一片,然后三根线与芯片进行通信,不会产生冲突 CS:开始输入时拉低,结束时拉高 DCLK:上升沿输入,下降沿输出

5.AD模数转换

现象:LCD显示可调电阻、热敏电阻和光敏电阻的值 定义引脚 在这里插入图片描述 读AD值 在这里插入图片描述 命令码宏定义 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

S必须为1,A2-A0地址位,MODE为1(8位模式),SER/DFR为1(单端模式),PD1为0(外部电压),PD0为0(低功率模式) 测量X+,根据单端模式输入配置图,A2-A0可以为001,也可以为011,以001为例,故命令码为1001 1100即0x9C,011为0xBC 在这里插入图片描述 测量Y+,A2-A0为101,命令码为1101 1100即0xDC 在这里插入图片描述 测量VBAT,A2-A0为010,命令码为1010 1100即0xAC 在这里插入图片描述 测量AUX,A2-A0为110,命令码为1110 1100即0xEC 在这里插入图片描述 XPT2046.c

#include #include //引脚定义 sbit XPY2046_DIN=P3^4; sbit XPY2046_CS=P3^5; sbit XPY2046_DCLK=P3^6; sbit XPY2046_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 Data=0; XPY2046_DCLK=0; XPY2046_CS=0; for(i=0;i XPY2046_DCLK=1; XPY2046_DCLK=0; if(XPY2046_DOUT){Data|=(0x8000>>i);} } XPY2046_CS=1; return Data>>8; }

XPT2046.h

#ifndef __XPT2046_H__ #define __XPT2046_H__ #define XPT2046_VBAT 0xAC #define XPT2046_AUX 0xEC #define XPT2046_XP 0x9C //0xBC #define XPT2046_YP 0xDC unsigned int XPT2046_ReadAD(unsigned char Command); #endif

main.c

#include #include "Delay.h" #include "LCD1602.h" #include "XPT2046.h" unsigned int ADValue; void main(void) { LCD_Init(); LCD_ShowString(1,1,"ADJ NTC GR"); while(1) { ADValue=XPT2046_ReadAD(XPT2046_XP); //读取AIN0,可调电阻 LCD_ShowNum(2,1,ADValue,3); //显示AIN0 ADValue=XPT2046_ReadAD(XPT2046_YP); //读取AIN1,热敏电阻 LCD_ShowNum(2,6,ADValue,3); //显示AIN1 ADValue=XPT2046_ReadAD(XPT2046_VBAT); //读取AIN2,光敏电阻 LCD_ShowNum(2,11,ADValue,3); //显示AIN2 Delay(100); } } 6.DA数模转换

现象:LED呈呼吸灯状态 在PWM控制直流电机速度的基础上修改main.c即可 原理就是改变PWM占空比,与之前的原理一样

#include #include "Delay.h" #include "Timer0.h" sbit DA=P2^1; unsigned char Counter,Compare; //计数值和比较值,用于输出PWM unsigned char i; void main() { Timer0_Init(); while(1) { for(i=0;i Compare=i; //设置比较值,改变PWM占空比 Delay(10); } } } void Timer0_Routine() interrupt 1 { TL0 = 0x9C; //设置定时初值 TH0 = 0xFF; //设置定时初值 Counter++; Counter%=100; //计数值变化范围限制在0~99 if(Counter DA=0; //输出0 } }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有