51单片机——ADC模数转换实验
目录
一、功能描述
二、ADC介绍
2.1 逐次逼近型ADC转换原理
2.2 ADC的主要技术指标
三、XPT2046芯片介绍
3.1 XPT2046外部引脚
3.2 XPT2046的命令字
3.3 XPT2046时序图
四、测试文件test.c
五、实验现象
一、功能描述
我们使用的 STC89C51单片机内部不含 ADC 接口,所以需要外接一个 ADC 转换芯片将模拟信号转换成数字信号供单片机处理。我们开发板上集成了一个 ADC 模数转换电路,选用的 ADC 芯片是 12 位的 AD 芯片-XPT2046。本次实验通过ADC转换电路,采集电位器AD的电压值、热敏电阻NTC电路的电压值、光敏电阻GR电路的电压值,并将转换后的数字量显示在LCD1602上。
二、ADC介绍
我们知道 51 单片机系统内部运算时用的全部是数字量,即 0 和 1,因此对单片机系统而言,无法直接操作模拟量,必须将模拟量转换成数字量。所谓数字量,就是用一系列 0 和 1 组成的二进制代码表示某个信号大小的量。用数字量表示同一个模拟量时,数字位数可以多也可以少,位数越多则表示的精度越高, 位数越少表示的精度就越低。
2.1 逐次逼近型ADC转换原理
采用逐次逼近法的 AD 转换器是有一个比较器、DA 转换器、缓冲寄存器和控 制逻辑电路组成,如下图所示:
逐次逼近法的转换过程是:初始化时将逐次逼近寄存器各位清零,转换开始时,先将逐次逼近寄存器最高位置 1,送入 DA 转换器,经 DA 转换后生成的模拟量送入比较器,称为 U0,与送入比较器的待转换的模拟量 Ux 进行比较,若U0<Ux,该位1保留,否则清除。然后再将逐次逼近寄存器次高位置 1,将寄存器中新的数字量送 DA 转换器,输出的 U0 再与 Ux 比较,若 U0<Ux,该位1保留,否则清除。重复此过程,直至逼近寄存器最低位。转换结束后,将逐次逼近寄存器中的数字量送入缓冲寄存器,得到数字量的输出。逐次逼近的操作过程是在一个控制电路的控制下进行的。
2.2 ADC的主要技术指标
- 分辨率:是指对于允许范围内的模拟信号,它能输出离散数字信号值的个数。12位ADC的分辨率就是12位,一个 10V满刻度的 12位 ADC能分辨输入电压变化最小值是:10Vx(1÷12)=2.4mv。
- 转换速率:是能够重复进行数据转换的速度,即每秒转换的次数。而完成一次 A/D转换所需的时间(包括稳定时间),则是转换速率的倒数。
三、XPT2046芯片介绍
XPT2046是一种典型的逐次逼近型模数转换器(SAR ADC),包含了采样/保持、模数转换、串口数据输出等功能。 XPT2046的通信方式是SPI。
3.1 XPT2046外部引脚
- CS:片选端。
- DIN:串行数据输入端
- DCLK:外部时钟输入端
- DOUT:串行数据输出端
- X+、Y+、X-、Y-:位置选择端
- VBAT:电池监视输入端
- AUX:ADC辅助输入通道
CS、DIN、DCLK和DOUT分别接单片机的对应引脚,X+、Y+、VBAT分别输入要转换的模拟信号。
3.2 XPT2046的命令字
其中选择通道位A2-A0,如下图所示:
3.3 XPT2046时序图
- 主机通过DIN,发送命令字给XPT2046,XPT2046在DCLK高电平时读取数据。
- XPT2046将转换好的数字量通过DOUT发送给主机,主机在DCLK高电平时读取数据。
程序如下:
#include <REGX52.H>
sbit XPT2064_DIN=P3^4;
sbit XPT2064_CS=P3^5;
sbit XPT2064_DCLK=P3^6;
sbit XPT2064_DOUT=P3^7;
/**函数名: XPT2064_ReadAD(unsigned char command)*函数功能: 主机发送命令字给XPT2046,XPT2046将转换的数字量发送给主机*输入: command:命令字*输出: D_num:转换好的数字量
*/
unsigned int XPT2064_ReadAD(unsigned char command)
{unsigned int D_num=0;unsigned char i=0;XPT2064_CS=0;for(i=0;i<8;i++){ XPT2064_DIN=command&(0x80>>i);XPT2064_DCLK=1;XPT2064_DCLK=0;}for(i=0;i<16;i++){XPT2064_DCLK=1;if(XPT2064_DOUT==1)D_num|=0x8000>>i;XPT2064_DCLK=0;}return D_num/128;
}
四、测试文件test.c
#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "XPT2046.h"
#define XPT2046_XP 0x9c
#define XPT2046_YP 0xdc
#define XPT2046_VBAT 0xac
#define XPT2046_AUX 0xec
int main()
{unsigned int AD,NTC,GR=0;LCD_Init();while(1){AD=XPT2064_ReadAD(XPT2046_XP);NTC=XPT2064_ReadAD(XPT2046_YP);GR=XPT2064_ReadAD(XPT2046_VBAT);LCD_ShowString(1,1,"AD");LCD_ShowString(1,5,"NTC");LCD_ShowString(1,9,"GR");LCD_ShowNum(2,1,AD,3);LCD_ShowNum(2,5,NTC,3);LCD_ShowNum(2,9,GR,3);Delay(10);}
}
五、实验现象
当转动电位器、传递热量给热敏电阻NTC或者改变环境的光照,也就是改变电压模拟量,通过ADC转换后得到对应的数字量,并把它们显示在LCD1602上。
51单片机——ADC模数转换实验相关推荐
- 51单片机 | ADC模数转换实验
文章目录 一.ADC介绍 1.ADC简介 2.ADC 转换原理 二.XPT2046 芯片介绍 三.硬件设计 四.软件设计 1.ADC 读写函数 2.主函数 五.实验现象 前面我们介绍的都是对数字信 ...
- 51单片机ADC模数转换
51单片机ADC模数转换 ADC介绍 1.ADC简介 ADC(analog to digital converter)也称为模数转换器,是指一个将模拟信号转变为数字信号.单片机在采集 ...
- 51单片机的仿真实验——1602显示屏显示万年历与温度
实验内容: 1:数字钟设计 2:基于DS18B20的温度测量模块设计 问题描述: 之前笔者写过一篇用数码管显示日历与温度的实验记录(51单片机的仿真实验--数码管显示日历与温度).但是数码管在仿真软件 ...
- 51单片机ADC0832模数转换+ LCD1602显示+Proteus仿真
51单片机ADC0832模数转换+ LCD1602显示+Proteus仿真 Proteus仿真 在Proteus SP2仿真过程中发现无法读取ADC0832的数据.解决办法:在proteus安装目录下 ...
- 51单片机 ADC0809模数转换与显示+Proteus仿真
51单片机 ADC0809模数转换与显示+Proteus仿真 Proteus仿真 实例代码 /*********************************/ #include <reg52 ...
- 【Proteus仿真】51单片机红外无线通信实验
[Proteus仿真]51单片机红外无线通信实验 Proteus仿真 使用说明 接收端的单片机加载接收端的Hex文件,发射端加载发射端的Hex文件,仿真过程中,接收端响应有点慢,当长时间无数据发送时, ...
- 自学51单片机 - 矩阵按键实验
自学51单片机 - 矩阵按键实验 1.开发板原理图 2.程序 2.1 行列式扫描法 2.2 线翻转扫描法 3.结果 1.开发板原理图 2.程序 2.1 行列式扫描法 /**************** ...
- 51单片机中断系统实验
51单片机中断系统实验 一.实验内容 INT0端接单次脉冲发生器.按一次脉冲产生一次中断,CPU使P1.0状态发生一次反转,P1.0接LED灯,以查看信号反转. 根据实验内容编写一个程序,并在实验系统 ...
- ADC 模数转换实验
生活中的模拟信号,如温度.声音.压力等,需要转换为更方便储存.处理和发射的数字形式. 51 单片机无法直接操作这些模拟量,其系统内部时运算都是数字量 0 和 1,因此必须将模拟量转换成数字量.数字量, ...
最新文章
- linux查询首字符不是T,linux – tload输出中的不同字符是什么意思?
- QT子对话框中的变量如何相互调用
- 我理解的配置管理系统
- KMP经典算法与变形的应用(字符串parttern匹配问题)
- Uber创始人:一个优秀创业者应具八种特质
- python 一维数组所有元素是否大于_如何最好在python中将一维数组连续元素分组...
- PYPL 12月榜单发布,编程语言、IDE与数据库市场如何?
- 光落在你脸上,可爱一如往常
- linux bluez语音传输,Linux BlueZ PCM 音频播放器
- 列级触发器 SQL Server
- DataGridView多线程更新数据的问题的解决办法
- 如何优化cocos2d的使用内存
- 定制版商业计划书PPT模板
- 如何利用kali暴力破解WiFi密码
- 自底向上和自顶向下的架构设计区别
- 如何去掉word标题前面的小黑点
- UNI-APP_uni-app中设置radio和switch的大小
- 软件测试语句覆盖,软件测试中的语句覆盖,分支覆盖,条件覆盖以及路径覆盖...
- QT软件开发: 基于FFMPGE设计的流媒体播放器(rtmp/rtsp)
- 计算机画图如何把二寸照片修改为一寸,win7使用自带画图工具把照片调整成2寸的方法...
热门文章
- 查找字符串最后一次出现的位置
- Android Transform
- Android----常见对话框
- 自同步如果服务器删掉文件,Linux之rsync简单应用rsync+inotify实时应用
- 重磅!欧科云链OKLink推出“链上天眼”功能,区块链+大数据全面助力链上安全
- 单行溢出隐藏没生效_小Tip:关于单行/多行文本溢出隐藏的一些看法
- 2020亚洲品牌500强榜单发布,阿里巴巴、华为、中国工商银行、腾讯等入选前十...
- 账户和钱包(官网的中文版)
- 中国互联网创新的超级杀手!腾讯已成为国内中小型创新企业的终结者!讨论
- (全志平台)功放,扬声器选型及音腔设计指南下载