基本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, 下載次數: 71)
2018-12-10 20:24 上傳
點擊文件名下載附件
touchGFX 下載積分: 黑幣 -5
|