发布时间:2025-12-10 19:28:19 浏览次数:10
XPT2046程序例程(STM32F103C8T6)「建议收藏」一、前言本例程是使用XPT2046AD转换IC采集电位器的数值,并通过串口调试助手打印数据。所使用的是库函数进行编写。二、XPT2046概述(一)功能说明XPT2046是一款4线制电阻屏控制器,内含12位分辨率125KHz转换速率逐频逼近型A/D转换器。XPT2046支持从1.5V到5.2V的低电压I/O接口。XPT2046能通过执行两次A/D转换查出被按的屏幕位置,除此之外,还可以测量加在触摸屏上的压力。内部自带2.5v参考电压,可以作为辅助输入温度测量…
本例程是使用XPT2046 AD转换IC采集电位器的数值,并通过串口调试助手打印数据。所使用的是库函数进行编写。
XPT2046是一款4线制电阻屏控制器,内含12位分辨率125KHz转换速率逐频逼近型A/D转换器。XPT2046支持从1.5V到5.2V的低电压I/O接口。XPT2046能通过执行两次A/D转换查出被按的屏幕位置,除此之外,还可以测量加在触摸屏上的压力。内部自带2.5v参考电压,可以作为辅助输入温度测量和电池监测之用,电池监测的电压范围可以从0v到6v。XPT2046片内集成有一个温度传感器。
| 引脚号 | 名称 | 说明 |
| 1 | BUSY | 忙时信号线。当CS#为高电平时为高阻态 |
| 2 | DIN | 串行数据输入端。当CS#为低电平时,数据在DCLK上升沿锁存 |
| 3 | CS# | 片选信号。控制转换时序和使能串行输入输出寄存器,高电平时ADC掉电 |
| 4 | DCLK | 外部时钟信号输入 |
| 5 | VCC | 电源输入端 |
| 6 | XP | XP位置输入端 |
| 7 | YP | YP位置输入端 |
| 8 | XN | XN位置输入端 |
| 9 | YN | YN位置输入端 |
| 10 | GND | 接地 |
| 11 | VBAT | 电池监视输入端 |
| 12 | AUX | ADC辅助输入端 |
| 13 | VREF | 参考电压输入端 |
| 14 | IOVDD | 数字电源输入端 |
| 15 | PENIRQ# | 笔接触中断引脚 |
| 16 | DOUT | 串行数据输出端。数据在DCLK的下降沿移出,当CS#高电平为高阻态 |
XPT2046是一种典型的逐渐逼近模数转换器,包含了采样、保持模数转换、串口数据输出等功能。同时芯片集成有一个2.5V的内部参考电压源、温度检测电路,工作时使用外部时钟。XPT2046可以单电源供电,电源电压范围为2.7V~5.5V。参考电压值直接决定ADC的输入范围,参考电压可以使用内部参考电压,也可以从外部直接输入1V~VCC范围内的参考电压(要求外部参考电压源输出阻抗低)。X、Y、Z、Vbat、Temp和AUX模拟信号经过片内的控制寄存器选择后进入ADC,ADC可以配置为单端或差分模式。选择Vbat、Temp和AUX时应该配置为单端模式;作为触摸屏应用时,应该配置为差分模式,这可以在效消除由于驱动开关的寄生电阻及外部干扰带来的测量误差,提高转换精度。
XPT2046数据接口是串行接口,其典型工作时序如下图所示,图中展示的信号来自带有基本串行接口单片机或数据信号处理器。处理器和转换器之间的通信需要8个时钟周期,可采用SPI、SSI和Microwire等同步串行接口。一次完整的转换需要24个串行同步时钟(DCLK)来完成。数据高位先发。
控制字节由DIN输入控制,它用来启动转换,寻址,设置ADC分辨率,配置以及进行掉电控制。
起始位:第一位,即S位。控制字的首位必须是1,即S=1。在XPT2046的DIN引脚检测到起始位前,所有的输入将被忽略。
地址:接下来的3位(A2 A1 A0)选择现行通道,触摸屏驱动和参考源输入。
MODE:模式选择位,用于设置ADC的分辨率。MODE=0,下一次的转换将是12位模式;MODE=1,下一次转换将是8位模式。
SER/DFR: SER/DFR位控制参考源模式,选择单端模式( SER/DFR=1),或者差分模式( SER/DFR=0)。
PD0和PD1:展示了掉电和内部参考电压配置的关系。
1、引脚初始
void XPT2046_Pin_Init(void){ GPIO_InitTypeDef GPIO_InitStructure;//打开时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;GPIO_Init(GPIOA,&GPIO_InitStructure);} 是否还在为Ide开发工具频繁失效而烦恼,来吧关注以下公众号获取最新激活方式。亲测可用!
【正版授权,激活自己账号】:Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】:官方授权 正版激活 自己使用,支持Jetbrains家族下所有IDE…
2、XPT2046写函数
void XPT2046_Write(u8 dat) {u8 i = 0;DCLK = 0;for (i = 0; i < 8; i++){DIN = dat >> 7; //放置最高位dat <<= 1;DCLK = 0;DCLK = 1;}} 3、XPT2046读函数
uint16_t XPT2046_Read(void){uint16_t i = 0, val = 0;DCLK = 0;for (i = 0; i < 12; i++){val <<= 1;DCLK = 1;DCLK = 0;val |= DOUT;}return val;} 4、XPT2046读数据函数
uint16_t XPT2046_Read_Date(u8 cmd){uint16_t value = 0;DCLK = 0;CS = 0;XPT2046_Write(cmd);delay_us(10);DCLK = 1;delay_us(5);DCLK = 0;delay_us(5);value = XPT2046_Read();CS = 1;return value;} 5、主函数
int main(void){XPT2046_Pin_Init();Sys_Delay_Init();Usart1_Pin_Init(115200);printf("初始化成功\r\n");while(1){//控制命令// AIN0 0x94 0xB4//AIN1 0xD4//AIN2 0xA4//AIN3 0xE4printf("电位器的值 = %d\r\n",XPT2046_Read_Date(0x94));delay_ms(500);}} 相关程序和资料,有需要者自行下载
网盘链接:
链接:https://pan.baidu.com/s/1o3nnESh-Gzm9KvhAreXfXw
提取码:6ixw
如有什么问题欢迎指出来,有什么模块可以联系博主,博主会查询资料分享出来。