AD转换 XPT2046

首先介绍一下csdn屏蔽广告
这个至关重要,请参考
https://blog.csdn.net/Demo_Liu/article/details/81538222


应用电路
AD转换 XPT2046_第1张图片

引脚功能描述
AD转换 XPT2046_第2张图片

控制位命令
控制位命令

控制字节各位描述
AD转换 XPT2046_第3张图片

单端模式输入配置
AD转换 XPT2046_第4张图片

差分模式输入配置
AD转换 XPT2046_第5张图片

掉电和内部参考电压选择
AD转换 XPT2046_第6张图片

应用电路
AD转换 XPT2046_第7张图片

AIN0:检测转换电位器模拟信号,控制字命令寄存器值为0x94或者0xB4
AIN1:检测转换热敏电阻模拟信号,控制字命令寄存器值为0xD4
AIN2:要检测转换光敏电阻模拟信号,控制字命令寄存器值为0xA4
AIN3:要检测转换AIN3通道上模拟信号,控制字命令寄存器值为0xE4

数字接口
AD转换 XPT2046_第8张图片

前 8 个时钟用来通过DIN引脚输入控制字节,接着的 12 个时钟周期将完成真正的模数转换,剩下的 3 个多时钟周期将用来完成被转换器忽略的最后字节(DOUT置低)

举例

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

void SPI_Write(uchar dat)
{
	uchar i;
	CLK = 0;
	for(i=0; i<8; i++)
	{
		DIN = dat >> 7;  	//放置最高位
		dat <<= 1;
		CLK = 0;			//上升沿放置数据

		CLK = 1;
	}
}

uint SPI_Read(void)
{
	uint i, dat = 0;
	CLK = 0;
	for(i = 0; i < 12; i++)		//接收12位数据
	{
		dat <<= 1;

		CLK = 1;
		CLK = 0;

		dat |= DOUT;
	}
	return dat;	
}

uint Read_AD_Data(uchar cmd)
{
	uchar i;
	uint AD_Value;
	CLK = 0;
	CS  = 0;
	SPI_Write(cmd);
	for(i = 6; i > 0; i--); 	//延时等待转换结果
	CLK = 1;	  //发送一个时钟周期,清除BUSY
	_nop_();
	_nop_();
	CLK = 0;
	_nop_();
	_nop_();
	AD_Value = SPI_Read();
	CS = 1;
	return AD_Value;	
}

你可能感兴趣的:(51)