51单片机学习:ADC模数转换实验--外部通道电压采集

发布者:雅意盎然最新更新时间:2023-02-02 来源: zhihu关键字:51单片机  ADC  模数转换  外部通道  电压采集 手机看文章 扫描二维码
随时随地手机看文章

实验名称:ADC模数转换实验--外部通道电压采集
接线说明:
实验现象:下载程序后,数码管上显示AD模块采集外部通道AIN3的电压值
注意事项:
***************************************************************************************/
#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(0xE4);//测量外部输入通道AIN3
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);
}
}

#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;//消音
}
}


#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;
}


#include "public.h"

/*******************************************************************************
* 函 数 名 : delay_10us
* 函数功能 : 延时函数,ten_us=1时,大约延时10us
* 输 入 : ten_us
* 输 出 : 无
*******************************************************************************/
void delay_10us(u16 ten_us)
{
while(ten_us--);
}

/*******************************************************************************
* 函 数 名 : delay_ms
* 函数功能 : ms延时函数,ms=1时,大约延时1ms
* 输 入 : ms:ms延时时间
* 输 出 : 无
*******************************************************************************/
void delay_ms(u16 ms)
{
u16 i,j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--);
}


关键字:51单片机  ADC  模数转换  外部通道  电压采集 引用地址:51单片机学习:ADC模数转换实验--外部通道电压采集

上一篇:基于51单片机的简易电梯系统的设计
下一篇:51单片机学习:DAC模数转换实验

推荐阅读最新更新时间:2024-10-16 15:07

MCS-51单片机主要应用特性
  MCS-51单片机是美国INTE公司于1980年推出的产品,与MCS-48单片机相比,它的结构更先进,功能更强,在原来的基础上增加了更多的电路单元和指令,指令数达111条,MCS-51单片机可以算是相当成功的产品,一直到现在,MCS-51系列或其兼容的单片机仍是应用的主流产品,各高校及专业学校的培训教材仍与MCS-51单片机作为代表进行理论基础学习。我们也以这一代表性的机型进行系统的讲解。   MCS-51系列单片机主要包括8031、8051和8751等通用产品,其主要功能如下:   ·8位CPU   ·4kbytes 程序存储器(ROM)   ·128bytes的数据存储器(RAM)   ·32条I/O口线   
[单片机]
MCS-<font color='red'>51单片机</font>主要应用特性
lpc1114 adc中断
观察DR寄存器bit31位来确认是否转换完成,属于查询方式,如果没有转换完成,程序会停在检测的那条语句处,不能做其他的事情,极大的浪费了处理器的资源,这一节,介绍更为效率的中断方式。 给ADINTEN寄存器对应ADINT位写1,当ADC转换完成后,会引发ADC转换中断。 ADINTEN寄存器: 位 符号 描述 复位值 7:0 ADINT 这个位决定了哪个通道转换完成后产生中断。例如:当bit1=1,当AD1通道转换完成后,产生中断 0x00 8 ADGINT 如果这个位是1,当全局DR寄存器的DONE位置1,引发中断 注意:当BURST=1,即硬件扫描模式下,如果用中断,只能用bit7:0这个位必须为0 1 31:9
[单片机]
最新低功耗 ADC 完美结合宽泛的电源与参考、自动断电以及伪差动输入功能
日前,德州仪器 (TI) 宣布推出 3 款全新逐次逼近寄存器 (SAR) 模数转换器 (ADC),其采用小型封装,可提供同类最宽的电源与参考范围以及低功耗。该 ADS7947、ADS7948 与 ADS7949 分别能够以 12 位、10 位以及 8 位分辨率实现速率为 2 MSPS 的双通道数据转换,从而可充分满足便携式数据采集、X-Y 定位、电池监控以及仪表与控制等应用的需求。如欲了解更多详情或申请样片,敬请访问: www.ti.com.cn/ads7947-pr 。 主要特性与优势: • 在 7.5 mW 功耗下提供 2 MSPS 的速率与 72 dB 的信噪比 (SNR),可保持高 AC 性能与低功耗。数据
[模拟电子]
最新低功耗 <font color='red'>ADC</font> 完美结合宽泛的电源与参考、自动断电以及伪差动输入功能
51单片机外部中断实验
前面,我们讲了51单片机的输入和输出功能,今天讲点不一样的,外部中断测试。 首先,关于中断的作用,我们要讲一下,处理内部外部随机事件,应对紧急事件的发生。CPU在执行程序过程中,外部突发紧急事件请求,CPU停下手里工作,去处理紧急事件,处理完后,回到原先被中断的地方,继续工作。就好比在吃饭的过程中接到个电话,出去接听完电话后又坐回桌子上吃饭,这中间停止原本的事情去做去他事情就是中断。 51单片机的中断功能是比较简单的,只需要配置好相应的寄存器就完成了初始化。 本文外部中断使用按键P3.2测试,因为其端口具备外部中断第二功能。 51单片机中断结构配置前,需要看一下内部结构图,可以看到有IE、IP、TCON等寄存器控制中断功
[单片机]
<font color='red'>51单片机</font><font color='red'>外部</font>中断实验
51单片机S系列与C系列的区别及选型指南
有些文献甚至也将8051泛指MCS-51系列单片机,8051是早期的最典型的代表作,由于MCS-51单片机影响极深远,许多公司都推出了兼容系列单片机,就是说MCS-51内核实际上已经成为一个8位单片机的标准。 其他的公司的51单片机产品都是和MCS-51内核兼容的产品而以。同样的一段程序,在各个单片机厂家的硬件上运行的结果都是一样的,如ATMEL的89C51(已经停产)、89S51, PHILIPS(菲利浦),和WINBOND(华邦)等,我们常说的已经停产的89C51指的是ATMEL公司的 AT89C51单片机,同时是在原基础上增强了许多特性,如时钟,更优秀的是由Flash(程序存储器的内容至少可以改写1000次)存储器取带了
[单片机]
分享一个STM8的ADC接口
结构体 /* ADC采样数据类型 */ typedef struct _adc_s_ { // 采样结果AD值和电压值 uint16_t adc_val; // AD值 float adc_voltage; // 电压值 uint16_t adc_max; // ADC最大值 float vref; // 参考电压 uint16_t sampling_times; // 采样次数 } adc_s; 头文件 #ifndef __ADC1_H__ #define __ADC1_H__ #include stm8s_adc1.h #include stm8s_gpio.h #include stm8s
[单片机]
ADC时钟输入考虑
为了充分发挥芯片的性能,应利用一个差分信号驱动ADC的采样时钟输入端(CLK+和CLK−)。 通常,应使用变压器或电容将该信号交流耦合到CLK+引脚和CLK−引脚内。 这两个引脚有内部偏置,无需其它偏置。 高速、高分辨率ADC对时钟输入信号的质量非常敏感。 为使高速ADC实现出色的信噪比(SNR),必须根据所需的输入频率认真考虑均方根(rms)时钟抖动。 rms时钟抖动可能会限制SNR,哪怕性能最佳的ADC也不例外,输入频率较高时情况会更加严重。 在给定的输入频率(fA)下,仅由孔径抖动(tJ)造成的SNR下降计算公式如下: SNR = 20 × log10 (2 × π × fA × tJ) 公式中,均方根
[模拟电子]
<font color='red'>ADC</font>时钟输入考虑
TI 推出业界最高性能的双/四通道ADC产品系列 提升通信、影像与仪表应用
具有125/105/80 MSPS高速处理能力的低功耗12位/14位数据转换器最大限度地提高系统灵活性并降低板极空间 2007 年 4 月 23 日,北京讯 日前,德州仪器 (TI) 宣布推出全新双/四通道12 位/14 位 ADC 系列——ADS6000。这些产品均采用 9 毫米 x 9 毫米微小型封装,具备高速度、低功耗与高性能等众多优异特性。实现引脚兼容的该系列产品,为设计人员提供了简便易行的升级途径,使他们能够根据各种应用需要选择合适的分辨率、速度以及性能,其中包括高级通信,影像、测试测量、医疗以及视频应用。更多详情,敬请访问: http://www.ti.com/corp/docs/landing/ads6425/i
[新品]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved