基本stm32f429的 touchGFX例程, 炫酷GUI
单片机源程序如下:
- /*
- *********************************************************************************************************
- *
- * 模块名称 : 电容触摸芯片GT811驱动程序
- * 文件名称 : bsp_ct811.c
- * 版 本 : V1.0
- * 说 明 : GT811触摸芯片驱动程序。
- *********************************************************************************************************
- */
- #include "gt811.h"
- #include "usart.h"
- #include "i2c.h"
- //#include "GUI.h"
- #define GT811_READ_XY_REG 0x721 /* 坐标寄存器 */
- #define GT811_CONFIG_REG 0x6A2 /* 配置参数寄存器 */
- /* GT811配置参数,一次性写入 */
- //const uint8_t s_GT811_CfgParams[]=
- uint8_t s_GT811_CfgParams[]=
- {
- /*
- 0x6A2 R/W Sen_CH0 触摸屏 1 号感应线对应的 IC 感应线
- 0x6A3 R/W Sen_CH1 触摸屏 2 号感应线对应的 IC 感应线
- 0x6A4 R/W Sen_CH2 触摸屏 3 号感应线对应的 IC 感应线
- 0x6A5 R/W Sen_CH3 触摸屏 4 号感应线对应的 IC 感应线
- 0x6A6 R/W Sen_CH4 触摸屏 5 号感应线对应的 IC 感应线
- 0x6A7 R/W Sen_CH5 触摸屏 6 号感应线对应的 IC 感应线
- 0x6A8 R/W Sen_CH6 触摸屏 7 号感应线对应的 IC 感应线
- 0x6A9 R/W Sen_CH7 触摸屏 8 号感应线对应的 IC 感应线
- 0x6AA R/W Sen_CH8 触摸屏 9 号感应线对应的 IC 感应线
- 0x6AB R/W Sen_CH9 触摸屏 10 号感应线对应的 IC 感应线
- */
- 0x12,0x10,0x0E,0x0C,0x0A,0x08,0x06,0x04,0x02,0x00,
- /*
- 0x6AC R/W Dr0_Con CHSELEF0 F1DELAY0
- 0x6AD R/W Dr0_Con F2DELAY0 F3DELAY0
-
- 0x6AE R/W Dr1_Con CHSELEF1 F1DELAY1
- 0x6AF R/W Dr1_Con F2DELAY1 F3DELAY1
-
- 0x6B0 R/W Dr2_Con CHSELEF2 F1DELAY2
- 0x6B1 R/W Dr2_Con F2DELAY2 F3DELAY2
-
- 0x6B2 R/W Dr3_Con CHSELEF3 F1DELAY3
- 0x6B3 R/W Dr3_Con F2DELAY3 F3DELAY3
-
- 0x6B4 R/W Dr4_Con CHSELEF4 F1DELAY4
- 0x6B5 R/W Dr4_Con F2DELAY4 F3DELAY4
-
- 0x6B6 R/W Dr5_Con CHSELEF5 F1DELAY5
- 0x6B7 R/W Dr5_Con F2DELAY5 F3DELAY5
-
- 0x6B8 R/W Dr6_Con CHSELEF6 F1DELAY6
- 0x6B9 R/W Dr6_Con F2DELAY6 F3DELAY6
-
- 0x6BA R/W Dr7_Con CHSELEF7 F1DELAY7
- 0x6BB R/W Dr7_Con F2DELAY7 F3DELAY7
-
- 0x6BC R/W Dr8_Con CHSELEF8 F1DELAY8
- 0x6BD R/W Dr8_Con F2DELAY8 F3DELAY8
-
- 0x6BE R/W Dr9_Con CHSELEF9 F1DELAY9
- 0x6BF R/W Dr9_Con F2DELAY9 F3DELAY9
-
- 0x6C0 R/W Dr10_Con CHSELEF10 F1DELAY10
- 0x6C1 R/W Dr10_Con F2DELAY10 F3DELAY10
-
- 0x6C2 R/W Dr11_Con CHSELEF11 F1DELAY11
- 0x6C3 R/W Dr11_Con F2DELAY11 F3DELAY11
-
- 0x6C4 R/W Dr12_Con CHSELEF12 F1DELAY12
- 0x6C5 R/W Dr12_Con F2DELAY12 F3DELAY12
-
- 0x6C6 R/W Dr13_Con CHSELEF13 F1DELAY13
- 0x6C7 R/W Dr13_Con F2DELAY13 F3DELAY13
-
- 0x6C8 R/W Dr14_Con CHSELEF14 F1DELAY14
- 0x6C9 R/W Dr14_Con F2DELAY14 F3DELAY14
-
- 0x6CA R/W Dr15_Con CHSELEF15 F1DELAY15
- 0x6CB R/W Dr15_Con F2DELAY15 F3DELAY15
- */
- 0x05,0x55,0x15,0x55,0x25,0x55,0x35,0x55,0x45,0x55,0x55,0x55,0x65,0x55,0x75,0x55,
- 0x85,0x55,0x95,0x55,0xA5,0x55,0xB5,0x55,0xC5,0x55,0xD5,0x55,0xE5,0x55,0xF5,0x55,
-
- /*
- 0x6CC R/W ADCCFG 芯片扫描控制参数
- 0x6CD R/W SCAN 芯片扫描控制参数
- */
- 0x1B,0x03,
-
- /*
- 0x6CE R/W F1SET 驱动脉冲 1 频率
- 0x6CF R/W F2SET 驱动脉冲 2 频率
- 0x6D0 R/W F3SET 驱动脉冲 3 频率
- 0x6D1 R/W F1PNUM 驱动脉冲 1 个数
- 0x6D2 R/W F2PNUM 驱动脉冲 2 个数
- 0x6D3 R/W F3PNUM 驱动脉冲 3 个数
- */
- 0x00,0x00,0x00,0x13,0x13,0x13,
-
- /* 0x6D4 R/W TOTALROW 全部使用的驱动通道数(屏的驱动线+按键驱动线) */
- 0x0F,
-
- /*
- 0x6D5 R/W TSROW 用在屏上的驱动线
- 0x6D6 R/W TOTALCOL 用在屏上的感应线
- */
- 0x0F,0x0A,
-
- /*
- 0x6D7 R/W Sc_Touch 屏幕按键阈值
- 0x6D8 R/W Sc_Leave 屏幕松键阈值
- */
- 0x50,0x30,
-
- /*
- 0x6D9 R/W Md_Switch 保留 DD2 R1 R0 INT SITO RT ST
- 0x6DA R/W LPower_C 保留 Auto 无按键进低功耗时间,0-63 有效,以 s 为单位
- */
- 0x05,0x03,
-
- /* 0x6DB R/W Refresh 触摸刷新速率控制参数(50Hz~100Hz):0-100 有效 */
- 0x64,
-
- /* 0x6DC R/W Touch_N 保留 使能触摸点个数:1-5 有效 */
- 0x05,
-
- /*
- 0x6DD R/W X_Ou_Max_L X 坐标输出最大值 480
- 0x6DE R/W X_Ou_Max_H
-
- 0x6DF R/W Y_Ou_Max_L Y 坐标输出最大值 800
- 0x6E0 R/W Y_Ou_Max_H
- */
- #if 1
- 0x58,0x02,
- 0x00,0x04,
- #else
- 0xe0,0x01,
- 0x20,0x03,
- #endif
- /*
- 0x6E1 R/W X _Th X 坐标输出门限:0-255,以 4 个原始坐标点为单位
- 0x6E2 R/W Y_Th Y 坐标输出门限:0-255,以 4 个原始坐标点为单位
- */
- 0x00, 0x00,
-
- /*
- 0x6E3 R/W X_Co_Sm X 方向平滑控制变量,0-255 可配置,0 表示关
- 0x6E4 R/W Y_Co_Sm Y 方向平滑控制变量,0-255 可配置,0 表示关
- 0x6E5 R/W X_Sp_Lim X 方向平滑上限速度:0-255 可配置,0 表示关
- 0x6E6 R/W Y_Sp_ Lim Y 方向平滑上限速度:0-255 可配置,0 表示关
- */
- 0x32,0x2C,0x34,0x2E,
-
- /*
- 0x6E7 R/W X_Bor_Lim Reserved Reserved
- 0x6E8 R/W Y_Bor_Lim Reserved Reserved
- */
- 0x00,0x00,
-
- /* 0x6E9 R/W Filter 丢弃数据帧数 坐标窗口滤波值,以 4 为基数 */
- 0x04,
-
- /* 0x6EA R/W Large_Tc 0-255 有效:单一触摸区包含结点数大于此数会判为大面积触摸 */
- 0x14,
-
- /* 0x6EB R/W Shake_Cu Touch 事件建立去抖 手指个数从多到少去抖 */
- 0x22,
-
- /* 0x6EC R/W Noise_R 保留 白噪声削减量(低 nibble)有效 */
- 0x04,
-
- /* 0x6ED~0x6F1 R/W 保留 */
- 0x00,0x00,0x00,0x00,0x00,
-
-
- 0x20,0x14,0xEC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x30,
- 0x25,0x28,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
- };
- #define GT811_WriteReg I2C1_Write
- #define GT811_ReadReg I2C1_Read
- GT811_T g_GT811;
- /*
- *********************************************************************************************************
- * 函 数 名: GT811_InitHard
- * 功能说明: 配置触摸芯片. 在调用该函数前,请先执行 bsp_touch.c 中的函数 bsp_DetectLcdType() 识别id
- * 形 参: 无
- * 返 回 值: 无
- *********************************************************************************************************
- */
- void GT811_Init(void)
- {
- g_GT811.i2c_addr = GT811_I2C_ADDR1;
-
- GT811_WriteReg(g_GT811.i2c_addr, GT811_CONFIG_REG, (uint8_t *)s_GT811_CfgParams, sizeof(s_GT811_CfgParams));
-
- /* 根据模组类型重置分辨率寄存器 */
- if (g_GT811.i2c_addr == GT811_I2C_ADDR1)
- {
- const uint8_t tab[4] = {0xe0, 0x01, 0x20, 0x03};
- GT811_WriteReg(g_GT811.i2c_addr, 0x6DD, (uint8_t *)tab, 4);
- }
- else /* GT811_I2C_ADDR3 */
- {
- const uint8_t tab[4] = {0x58, 0x02, 0x00, 0x04};
- GT811_WriteReg(g_GT811.i2c_addr, 0x6DD, (uint8_t *)tab, 4);
- }
- }
- /*
- *********************************************************************************************************
- * 函 数 名: GT811_ReadVersion
- * 功能说明: 获得GT811的芯片版本
- * 形 参: 无
- * 返 回 值: 16位版本
- *********************************************************************************************************
- */
- uint16_t GT811_ReadVersion(void)
- {
- uint8_t buf[2];
- GT811_ReadReg(g_GT811.i2c_addr, 0x717, buf, 2);
- return ((uint16_t)buf[0] << 8) + buf[1];
- }
- /*
- *********************************************************************************************************
- * 函 数 名: GT811_OnePiontScan
- * 功能说明: 读取GT811触摸数据,这里仅读取一个触摸点。
- * 形 参: 无
- * 返 回 值: 无
- *********************************************************************************************************
- */
- bool GT811_ReadOnePiont(uint16_t *px, uint16_t *py)
- {
- uint8_t buf[7] = {0}; /* 将其都初始化为 0 */
- uint16_t x, y;
- uint8_t res;
-
- /* 读取寄存器:0x721 R TouchpointFlag Sensor_ID key tp4 tp3 tp2 tp1 tp0 */
- res = GT811_ReadReg(g_GT811.i2c_addr, GT811_READ_XY_REG, buf, 1);
- if(res != 0)
- {
- //uprintf("1.failed\r\n");
- return false;
- }
-
- /* 判断是否按下,没有按下,直接退出 */
- if ((buf[0] & 0x01) == 0)
- {
- return false;
- }
-
- /* 读取第一个触摸点0 */
- res = GT811_ReadReg(g_GT811.i2c_addr, GT811_READ_XY_REG + 1, &buf[1], 6);
- if(res != 0)
- {
- //uprintf("2.failed\r\n");
- return false;
- }
-
- /*
- 0x721 R TouchpointFlag Sensor_ID key tp4 tp3 tp2 tp1 tp0
- 0x722 R Touchkeystate 0 0 0 0 key4 key3 key2 key1
- 0x723 R Point0Xh 触摸点 0,X 坐标高 8 位
- 0x724 R Point0Xl 触摸点 0,X 坐标低 8 位
- 0x725 R Point0Yh 触摸点 0,Y 坐标高 8 位
- 0x726 R Point0Yl 触摸点 0,Y 坐标低 8 位
- 0x727 R Point0Pressure 触摸点 0,触摸压力
- */
- g_GT811.X0 = ((uint16_t)buf[2] << 8) + buf[3];
- g_GT811.Y0 = ((uint16_t)buf[4] << 8) + buf[5];
- g_GT811.P0 = buf[6];
-
- /* 检测按下 */
- /* 坐标转换 :
- 电容触摸板左下角是 (0,0); 右上角是 (479,799)
- 需要转到LCD的像素坐标 (左上角是 (0,0), 右下角是 (799,479)
- */
- x = g_GT811.Y0;
- y = 479 - g_GT811.X0;
-
- /*
- 有时候I2C通信出问题,有触摸值,但是压力参数是0,通过这种方法可以将其排除。
- x y p
- 0, 0, 0
- 0, 0, 0
- 24, 0, 0
- 0, 0, 0
- 11, 323, 0
- 0, 0, 0
- 0, 0, 0
- 6, 235, 0
- 38, 230, 0
- 0, 0, 0
- // */
- // if(g_GT811.P0 == 0)
- // {
- // uprintf("%5d,%5d,%3d\r\n", g_GT811.X0, g_GT811.Y0, g_GT811.P0);
- // return false;
- // }
- *px = x;
- *py = y;
-
- return true;
- }
- /*
- *********************************************************************************************************
- * 函 数 名: GT811_ReadSensorID
- * 功能说明: 识别显示模块类别。读取GT811 SensorID引脚状态,有3个状态,悬空,接电源,接地。
- * 形 参: 无
- * 返 回 值: 显示模块类别, 0, 1, 2
- *********************************************************************************************************
- */
- uint8_t GT811_ReadSensorID(void)
- {
- uint8_t value;
-
- /* 0x721 R TouchpointFlag Sensor_ID key tp4 tp3 tp2 tp1 tp0 */
- GT811_ReadReg(g_GT811.i2c_addr, 0x721, &value, 1);
-
- return (value >> 6);
- }
复制代码
所有资料51hei提供下载:
GFX_DEMO.rar
(4.65 MB, 下载次数: 69)
|