AD转换 XPT2046

应用电路
应用电路

引脚功能描述
引脚

控制位命令
控制位命令

控制字节各位描述
控制字节

单端模式输入配置
单端模式

差分模式输入配置
差分模式

掉电和内部参考电压选择
掉电和内部参考电压

应用电路
应用电路

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

数字接口
数字接口

前 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;    
}
原文地址:https://www.cnblogs.com/zhangxuechao/p/11709620.html