单片机的ADC

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

        如何理解ADC。ADC就是将模拟量转换成数字量的过程,就是转换为计算机所能存储的0和1序列,比如将模拟量转换为一个字节,所以这个字节的大小要能反应模拟量的大小,比如一个0-5V的电压测量量(外部输入电压最小0V,最大为5V),将0V对应成0000 0000,将5V对应为1111 1111。一个字节能够表示2^8个状态,所以可以将0-5V这个区域分会成2^8个,每个区域对应5/(2^8)V。

        普中科技单片机的ADC模块的电路图如下所示,ADC模块用的是XPT2046 芯片。

单片机的ADC,单片机,嵌入式硬件

单片机的ADC,单片机,嵌入式硬件

 文章来源地址https://www.toymoban.com/news/detail-668579.html

单片机的ADC,单片机,嵌入式硬件

单片机的ADC,单片机,嵌入式硬件

参考电压

         参考电压值直接决定ADC的输入范围,参考电压可以使用内部参考 电压,也可以从外部直接输入 1V~VCC范围内的参考电压。如何理解参考电压?

以逐次逼近型ADC为例。

单片机的ADC,单片机,嵌入式硬件

 单片机的ADC,单片机,嵌入式硬件

单片机的ADC,单片机,嵌入式硬件

单片机的ADC,单片机,嵌入式硬件

ADC的时序

单片机的ADC,单片机,嵌入式硬件

 单片机的ADC,单片机,嵌入式硬件

 单片机的ADC,单片机,嵌入式硬件

 相关程序

smg.h

#ifndef _smg_H
#define _smg_H

#include "public.h"


#define SMG_A_DP_PORT	P0	//使用宏定义数码管段码口

//定义数码管位选信号控制脚
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

extern u8 gsmg_code[17];

void smg_display(u8 dat[],u8 pos);

#endif

smg.c

#include "smg.h"

//共阴极数码管显示0~F的段码数据
u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
				0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

/*******************************************************************************
* 函 数 名       : smg_display
* 函数功能		 : 动态数码管显示
* 输    入       : dat:要显示的数据
				   pos:从左开始第几个位置开始显示,范围1-8
* 输    出    	 : 无
*******************************************************************************/
void smg_display(u8 dat[],u8 pos)
{
	u8 i=0;
	u8 pos_temp=pos-1;

	for(i=pos_temp;i<8;i++)
	{
	   	switch(i)//位选
		{
			case 0: LSC=1;LSB=1;LSA=1;break;
			case 1: LSC=1;LSB=1;LSA=0;break;
			case 2: LSC=1;LSB=0;LSA=1;break;
			case 3: LSC=1;LSB=0;LSA=0;break;
			case 4: LSC=0;LSB=1;LSA=1;break;
			case 5: LSC=0;LSB=1;LSA=0;break;
			case 6: LSC=0;LSB=0;LSA=1;break;
			case 7: LSC=0;LSB=0;LSA=0;break;
		}
		SMG_A_DP_PORT=dat[i-pos_temp];//传送段选数据
		delay_10us(100);//延时一段时间,等待显示稳定
		SMG_A_DP_PORT=0x00;//消音
	}
}

xpt2046.h

#ifndef _xpt2046_H
#define _xpt2046_H

#include "public.h"

//管脚定义
sbit DOUT = P3^7;	  //输出
sbit CLK  = P3^6;	  //时钟
sbit DIN  = P3^4;	  //输入
sbit CS   = P3^5;	  //片选


//函数声明
u16 xpt2046_read_adc_value(u8 cmd);

#endif

xpt2046.c

#include "xpt2046.h"
#include "intrins.h"

/*******************************************************************************
* 函 数 名       : xpt2046_wirte_data
* 函数功能		 : XPT2046写数据
* 输    入       : dat:写入的数据
* 输    出    	 : 无
*******************************************************************************/
void xpt2046_wirte_data(u8 dat)
{
	u8 i;

	CLK = 0;
	_nop_();
	for(i=0;i<8;i++)//循环8次,每次传输一位,共一个字节
	{
		DIN = dat >> 7;//先传高位再传低位
		dat <<= 1;//将低位移到高位
		CLK = 0;//CLK由低到高产生一个上升沿,从而写入数据
		_nop_();	
		CLK = 1;
		_nop_();
	}
}

/*******************************************************************************
* 函 数 名       : xpt2046_read_data
* 函数功能		 : XPT2046读数据
* 输    入       : 无
* 输    出    	 : XPT2046返回12位数据
*******************************************************************************/
u16	xpt2046_read_data(void)
{
	u8 i;
	u16 dat=0;

	CLK = 0;
	_nop_();
	for(i=0;i<12;i++)//循环12次,每次读取一位,大于一个字节数,所以返回值类型是u16
	{
		dat <<= 1;
		CLK = 1;
		_nop_();
		CLK = 0; //CLK由高到低产生一个下降沿,从而读取数据
		_nop_();
		dat |= DOUT;//先读取高位,再读取低位。	
	}
	return dat;	
}

/*******************************************************************************
* 函 数 名       : xpt2046_read_adc_value
* 函数功能		 : XPT2046读AD数据
* 输    入       : cmd:指令
* 输    出    	 : XPT2046返回AD值
*******************************************************************************/
u16 xpt2046_read_adc_value(u8 cmd)
{
	u8 i;
	u16 adc_value=0;

	CLK = 0;//先拉低时钟
	CS  = 0;//使能XPT2046
	xpt2046_wirte_data(cmd);//发送命令字
	for(i=6; i>0; i--);//延时等待转换结果
	CLK = 1;
	_nop_();
	CLK = 0;//发送一个时钟,清除BUSY
	_nop_();
	adc_value=xpt2046_read_data();
	CS = 1;//关闭XPT2046
	return adc_value;
}

主函数

/**************************************************************************************
深圳市普中科技有限公司(PRECHIN 普中)
技术支持:www.prechin.net
PRECHIN
 普中

实验名称:ADC模数转换实验--电位器电压采集
接线说明:	
实验现象:下载程序后,数码管上显示AD模块采集电位器的电压值
注意事项:																				  
***************************************************************************************/
#include "public.h"
#include "smg.h"
#include "xpt2046.h"


/*******************************************************************************
* 函 数 名       : main
* 函数功能		 : 主函数
* 输    入       : 无
* 输    出    	 : 无
*******************************************************************************/
void main()
{	
	u16 adc_value=0;
	float adc_vol;//ADC电压值
	u8 adc_buf[3];

	while(1)
	{				
		adc_value=xpt2046_read_adc_value(0x94);//测量电位器
		adc_vol=5.0*adc_value/4096;//将读取的AD值转换为电压
		adc_value=adc_vol*10;//放大10倍,即保留小数点后一位
		adc_buf[0]=gsmg_code[adc_value/10]|0x80;
		adc_buf[1]=gsmg_code[adc_value%10];
	   	adc_buf[2]=0x3e;//显示单位V
		smg_display(adc_buf,6);		
	}		
}

单片机的ADC,单片机,嵌入式硬件

 

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

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

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

相关文章

  • 7. 嵌入式与单片机

    常见面试题 请说说你对嵌入式的理解。⭐⭐⭐⭐ 嵌入式系统是指以应用为中心,以计算机技术为基础,软件硬件可剪裁,适应应用系统对功能、成本、体积、功耗严格要求的专用计算机系统。 嵌入式系统 主要由 嵌入式微处理器 、 外围硬件设备 、 嵌入式操作系统以及用户

    2024年02月02日
    浏览(89)
  • 单片机(嵌入式)程序分层架构

    目录 前言 嵌入式3层软件架构 嵌入式4层软件架构-1 驱动层 操作系统层 中间件层 应用层 嵌入式4层软件架构-2 硬件层 嵌入式微处理芯片 嵌入式存储器系统 嵌入式I/O接口 中间层 系统软件层 RTOS 文件系统 GUI 应用层 嵌入式5层软件架构1 嵌入式5层软件架构2 嵌入式6层软件架构

    2023年04月19日
    浏览(80)
  • 单片机和Linux嵌入式区别

    单片机是一种集成电路,它能够在一个芯片上完成各种计算、控制和管理任务。单片机没有明确的分层,这是因为它通常被用来设计嵌入式系统,其程序结构和功能要根据具体的应用需求来设计。 在单片机的程序设计中,可以通过一些方法将程序分为不同的层次,比如可以将

    2024年01月17日
    浏览(64)
  • 【单片机/嵌入式】最完整学习路线

            关于这个问题我在网上寻找到 了 相关文章解释得很详细,不了解的同学可以参考一下这篇文章: 到底什么是嵌入式?什么是单片机? - 知乎         一个人学习是孤独的,如果你是一名学生,建议加入学校的电子社团或者实验室,有老师的帮助和同学的互助

    2024年02月03日
    浏览(54)
  • 嵌入式51单片机04-矩阵按键系列

    一、矩阵按键基础知识 矩阵按键工作原理 : 逐行扫描 :通过高四位轮流输出低电平来对矩阵键盘进行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然后通过判断低四位数据中哪一位为零来判断哪一个按键被按下。 逐列扫描 :通过低四位轮流输出低电平来

    2024年02月07日
    浏览(65)
  • 【唠唠嵌入式】__如何学习单片机?

    目录 前言 个人定位,从事软件还是硬件? 学习内容 (* ̄︶ ̄)创作不易!期待你们的 点赞、收藏和评论喔。 作为一个老司机,多年来跟 单片机 、 Keil 、 C语言 、 AD 、 烙铁 、 风枪 、 示波器 、 电子元器件 纠缠不清。期间经历了不少磨练,熬过了很多夜晚,也掉了大把头

    2024年02月06日
    浏览(71)
  • 嵌入式(二)单片机基础 | 单片机特点 内部结构 最小系统 电源 晶振 复位

    上一篇文章我们介绍了嵌入式系统 嵌入式系统(Embedded System)是一种特定用途的计算机系统,它通常嵌入在更大的产品或系统中,用于控制、监测或执行特定的任务。这些系统通常由硬件和软件组成,旨在满足特定的需求,如嵌入在家电、汽车、医疗设备、工业自动化、消费

    2024年02月02日
    浏览(108)
  • 嵌入式Linux知识第六章——单片机

    目录 6.1 CPU 内存 虚拟内存 磁盘/硬盘 的关系⭐⭐⭐ 6.2 CPU内部结构⭐⭐⭐⭐ 6.3 ARM结构处理器简析 ⭐⭐ 6.4波特率是什么,为什么双方波特率要相同,高低波特率有什么区别;⭐⭐⭐⭐ 6.5arm和dsp有什么区别⭐⭐ 6.6 ROM RAM的概念浅析⭐⭐⭐ 6.7 IO口工作方式:上拉输入 下拉输入

    2024年04月10日
    浏览(77)
  • 梳理一下嵌入式和单片机之间的关系

    一定有很多人都听说过嵌入式和单片机,但在刚开始接触时,不知道大家有没有听说过嵌入式就是单片机这样的说法,其实嵌入式和单片机还是有区别的。单片机与嵌入式到底有什么关系? 下面我们就来说说嵌入式和单片机之间的联系和区别吧。 01  什么是单片机? 首先,

    2024年02月04日
    浏览(51)
  • 嵌入式软件必读10本书_单片机篇

    大家好,我是知微! 虽然现在网上的技术文章非常多,但缺点是知识点太零散。 书籍是经过精心整理和编排的,仍旧是非常优秀的学习资料。下面一起来看看本文推荐的10本书吧! 这本书物融合了生动活泼的漫画、风趣幽默的文字,以浅显易懂的方式探讨编程思维。 特别适

    2024年02月19日
    浏览(64)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包