目录

一、功能描述

二、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的主要技术指标

  1. 分辨率:是指对于允许范围内的模拟信号,它能输出离散数字信号值的个数。12位ADC的分辨率就是12位,一个 10V满刻度的 12位 ADC能分辨输入电压变化最小值是:10Vx(1÷12)=2.4mv。
  2. 转换速率:是能够重复进行数据转换的速度,即每秒转换的次数。而完成一次 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时序图

  1. 主机通过DIN,发送命令字给XPT2046,XPT2046在DCLK高电平时读取数据。
  2. 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模数转换实验相关推荐

  1. 51单片机 | ADC模数转换实验

    文章目录 一.ADC介绍 1.ADC简介 2.ADC 转换原理 二.XPT2046 芯片介绍 三.硬件设计 四.软件设计 1.ADC 读写函数 2.主函数 五.实验现象   前面我们介绍的都是对数字信 ...

  2. 51单片机ADC模数转换

    51单片机ADC模数转换 ADC介绍 1.ADC简介 ​        ADC(analog to digital converter)也称为模数转换器,是指一个将模拟信号转变为数字信号.单片机在采集 ...

  3. 51单片机的仿真实验——1602显示屏显示万年历与温度

    实验内容: 1:数字钟设计 2:基于DS18B20的温度测量模块设计 问题描述: 之前笔者写过一篇用数码管显示日历与温度的实验记录(51单片机的仿真实验--数码管显示日历与温度).但是数码管在仿真软件 ...

  4. 51单片机ADC0832模数转换+ LCD1602显示+Proteus仿真

    51单片机ADC0832模数转换+ LCD1602显示+Proteus仿真 Proteus仿真 在Proteus SP2仿真过程中发现无法读取ADC0832的数据.解决办法:在proteus安装目录下 ...

  5. 51单片机 ADC0809模数转换与显示+Proteus仿真

    51单片机 ADC0809模数转换与显示+Proteus仿真 Proteus仿真 实例代码 /*********************************/ #include <reg52 ...

  6. 【Proteus仿真】51单片机红外无线通信实验

    [Proteus仿真]51单片机红外无线通信实验 Proteus仿真 使用说明 接收端的单片机加载接收端的Hex文件,发射端加载发射端的Hex文件,仿真过程中,接收端响应有点慢,当长时间无数据发送时, ...

  7. 自学51单片机 - 矩阵按键实验

    自学51单片机 - 矩阵按键实验 1.开发板原理图 2.程序 2.1 行列式扫描法 2.2 线翻转扫描法 3.结果 1.开发板原理图 2.程序 2.1 行列式扫描法 /**************** ...

  8. 51单片机中断系统实验

    51单片机中断系统实验 一.实验内容 INT0端接单次脉冲发生器.按一次脉冲产生一次中断,CPU使P1.0状态发生一次反转,P1.0接LED灯,以查看信号反转. 根据实验内容编写一个程序,并在实验系统 ...

  9. ADC 模数转换实验

    生活中的模拟信号,如温度.声音.压力等,需要转换为更方便储存.处理和发射的数字形式. 51 单片机无法直接操作这些模拟量,其系统内部时运算都是数字量 0 和 1,因此必须将模拟量转换成数字量.数字量, ...

最新文章

  1. linux查询首字符不是T,linux – tload输出中的不同字符是什么意思?
  2. QT子对话框中的变量如何相互调用
  3. 我理解的配置管理系统
  4. KMP经典算法与变形的应用(字符串parttern匹配问题)
  5. Uber创始人:一个优秀创业者应具八种特质
  6. python 一维数组所有元素是否大于_如何最好在python中将一维数组连续元素分组...
  7. PYPL 12月榜单发布,编程语言、IDE与数据库市场如何?
  8. 光落在你脸上,可爱一如往常
  9. linux bluez语音传输,Linux BlueZ PCM 音频播放器
  10. 列级触发器 SQL Server
  11. DataGridView多线程更新数据的问题的解决办法
  12. 如何优化cocos2d的使用内存
  13. 定制版商业计划书PPT模板
  14. 如何利用kali暴力破解WiFi密码
  15. 自底向上和自顶向下的架构设计区别
  16. 如何去掉word标题前面的小黑点
  17. UNI-APP_uni-app中设置radio和switch的大小
  18. 软件测试语句覆盖,软件测试中的语句覆盖,分支覆盖,条件覆盖以及路径覆盖...
  19. QT软件开发: 基于FFMPGE设计的流媒体播放器(rtmp/rtsp)
  20. 计算机画图如何把二寸照片修改为一寸,win7使用自带画图工具把照片调整成2寸的方法...

热门文章

  1. 查找字符串最后一次出现的位置
  2. Android Transform
  3. Android----常见对话框
  4. 自同步如果服务器删掉文件,Linux之rsync简单应用rsync+inotify实时应用
  5. 重磅!欧科云链OKLink推出“链上天眼”功能,区块链+大数据全面助力链上安全
  6. 单行溢出隐藏没生效_小Tip:关于单行/多行文本溢出隐藏的一些看法
  7. 2020亚洲品牌500强榜单发布,阿里巴巴、华为、中国工商银行、腾讯等入选前十...
  8. 账户和钱包(官网的中文版)
  9. 中国互联网创新的超级杀手!腾讯已成为国内中小型创新企业的终结者!讨论
  10. (全志平台)功放,扬声器选型及音腔设计指南下载