K1Guitar/AT32F403ARCT7_BOOT/device/LCD_ILI9341/Drv_XPT2046_Touch.h

94 lines
3.6 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* @Author: CTW
* @Date: 2025-11-14 15:36:53
* @FilePath: \PhoenixSMGT_Testproject\Drivers\LCD_ILI9341\Drv_XPT2046_Touch.h
* @Description: XXX
* @INPUT: XXX
* @OUTPUT: XXX
*/
#ifndef __DRV_XPT2046_TOUCH_H__
#define __DRV_XPT2046_TOUCH_H__
#include "includes.h"
// 触摸引脚定义MCU视角输出=MCU→XPT2046输入=XPT2046→MCU
#define TP_IRQ_PIN GPIO_PINS_12 // 输入XPT2046触摸中断输出低电平触发
#define TP_IRQ_PORT GPIOC
#define TP_OUT_PIN GPIO_PINS_15 // 输入XPT2046 SPI数据输出ADC数据
#define TP_OUT_PORT GPIOA
#define TP_CLK_PIN GPIO_PINS_8 // 输出MCU SPI时钟输出
#define TP_CLK_PORT GPIOC
#define TP_CS_PIN GPIO_PINS_7 // 输出MCU片选输出选中/释放XPT2046
#define TP_CS_PORT GPIOC
#define TP_DIN_PIN GPIO_PINS_6 // 输出MCU SPI数据输出命令/数据→XPT2046
#define TP_DIN_PORT GPIOC
// 引脚操作宏明确方向AT32 库)
#define TP_IRQ_Read() gpio_input_data_bit_read(TP_IRQ_PORT, TP_IRQ_PIN) // 读中断(输入)
#define TP_OUT_Read() gpio_input_data_bit_read(TP_OUT_PORT, TP_OUT_PIN) // 读XPT2046输出数据输入
#define TP_CLK_Clr() gpio_bits_reset(TP_CLK_PORT, TP_CLK_PIN) // 时钟输出低
#define TP_CLK_Set() gpio_bits_set(TP_CLK_PORT, TP_CLK_PIN) // 时钟输出高
#define TP_CS_Clr() gpio_bits_reset(TP_CS_PORT, TP_CS_PIN) // 片选输出低(选中)
#define TP_CS_Set() gpio_bits_set(TP_CS_PORT, TP_CS_PIN) // 片选输出高(释放)
#define TP_DIN_Clr() gpio_bits_reset(TP_DIN_PORT, TP_DIN_PIN) // DIN输出低MCU→XPT2046
#define TP_DIN_Set() gpio_bits_set(TP_DIN_PORT, TP_DIN_PIN) // DIN输出高MCU→XPT2046
// XPT2046命令定义
#define XPT2046_READ_X 0xD0 // 读X坐标命令MCU通过DIN发送给XPT2046
#define XPT2046_READ_Y 0x90 // 读Y坐标命令
#define XPT2046_READ_Z1 0xB0 // 读压力Z1
#define XPT2046_READ_Z2 0xC0 // 读压力Z2
// 触摸状态结构体
typedef struct
{
uint16_t x; // 校准后X坐标
uint16_t y; // 校准后Y坐标
uint8_t pressed; // 1=按下0=未按下
} TP_Point;
//// 琴弦结构体
//typedef struct
//{
// uint16_t x; // 校准后X坐标
// uint16_t y; // 校准后Y坐标
// uint8_t pressed; // 1=按下0=未按下
//} TP_Point;
//电阻屏函数
extern void XPT2046_Init(void); // 触摸初始化(含引脚配置)
extern void XPT2046_IRQ_Init(void); // 配置IRQ中断可选用于触摸触发
extern void TP_Write_Byte(uint8_t cmd); // 向XPT2046写入1字节命令MCU→DIN输出XPT2046→DIN输入
extern uint16_t TP_Read_AD(uint8_t CMD); // 从触摸屏IC读取adc值
extern uint8_t TP_CheckPressed(uint8_t n); // 简单去抖动读取连续n次相同状态视为有效
extern TP_Point TP_ReadRaw(void); // 读取原始坐标(未校准)
extern TP_Point TP_Read(void); // 校准后获取LCD坐标
extern void EXTI15_10_IRQHandler(void); // EXTI15_10中断服务函数处理TP_IRQ触发
//extern void HAL_EXTI_Callback(EXTI_HandleTypeDef *hexti); // 中断回调函数(触摸触发时执行)
extern void TP_Drow_Touch_Point(uint16_t x, uint16_t y, uint16_t color); //画一个坐标校准点
extern void TP_Draw_Big_Point(uint16_t x, uint16_t y, uint16_t color); //画一个大点
extern void LCD_DrawRoughLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color); //画粗一点的线
extern void TP_FormatCoord(char *buf, TP_Point p); // 辅助函数格式化坐标字符串x,y转字符串
#endif