標題:
STM32F429 TOUCHGFX例程 GT811電容觸摸芯片驅(qū)動
[打印本頁]
作者:
waddy8066
時間:
2018-12-10 18:55
標題:
STM32F429 TOUCHGFX例程 GT811電容觸摸芯片驅(qū)動
基本stm32f429的 touchGFX例程, 炫酷GUI
單片機源程序如下:
/*
*********************************************************************************************************
*
* 模塊名稱 : 電容觸摸芯片GT811驅(qū)動程序
* 文件名稱 : bsp_ct811.c
* 版 本 : V1.0
* 說 明 : GT811觸摸芯片驅(qū)動程序。
*********************************************************************************************************
*/
#include "gt811.h"
#include "usart.h"
#include "i2c.h"
//#include "GUI.h"
#define GT811_READ_XY_REG 0x721 /* 坐標寄存器 */
#define GT811_CONFIG_REG 0x6A2 /* 配置參數(shù)寄存器 */
/* GT811配置參數(shù),一次性寫入 */
//const uint8_t s_GT811_CfgParams[]=
uint8_t s_GT811_CfgParams[]=
{
/*
0x6A2 R/W Sen_CH0 觸摸屏 1 號感應(yīng)線對應(yīng)的 IC 感應(yīng)線
0x6A3 R/W Sen_CH1 觸摸屏 2 號感應(yīng)線對應(yīng)的 IC 感應(yīng)線
0x6A4 R/W Sen_CH2 觸摸屏 3 號感應(yīng)線對應(yīng)的 IC 感應(yīng)線
0x6A5 R/W Sen_CH3 觸摸屏 4 號感應(yīng)線對應(yīng)的 IC 感應(yīng)線
0x6A6 R/W Sen_CH4 觸摸屏 5 號感應(yīng)線對應(yīng)的 IC 感應(yīng)線
0x6A7 R/W Sen_CH5 觸摸屏 6 號感應(yīng)線對應(yīng)的 IC 感應(yīng)線
0x6A8 R/W Sen_CH6 觸摸屏 7 號感應(yīng)線對應(yīng)的 IC 感應(yīng)線
0x6A9 R/W Sen_CH7 觸摸屏 8 號感應(yīng)線對應(yīng)的 IC 感應(yīng)線
0x6AA R/W Sen_CH8 觸摸屏 9 號感應(yīng)線對應(yīng)的 IC 感應(yīng)線
0x6AB R/W Sen_CH9 觸摸屏 10 號感應(yīng)線對應(yīng)的 IC 感應(yīng)線
*/
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 芯片掃描控制參數(shù)
0x6CD R/W SCAN 芯片掃描控制參數(shù)
*/
0x1B,0x03,
/*
0x6CE R/W F1SET 驅(qū)動脈沖 1 頻率
0x6CF R/W F2SET 驅(qū)動脈沖 2 頻率
0x6D0 R/W F3SET 驅(qū)動脈沖 3 頻率
0x6D1 R/W F1PNUM 驅(qū)動脈沖 1 個數(shù)
0x6D2 R/W F2PNUM 驅(qū)動脈沖 2 個數(shù)
0x6D3 R/W F3PNUM 驅(qū)動脈沖 3 個數(shù)
*/
0x00,0x00,0x00,0x13,0x13,0x13,
/* 0x6D4 R/W TOTALROW 全部使用的驅(qū)動通道數(shù)(屏的驅(qū)動線+按鍵驅(qū)動線) */
0x0F,
/*
0x6D5 R/W TSROW 用在屏上的驅(qū)動線
0x6D6 R/W TOTALCOL 用在屏上的感應(yīng)線
*/
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 觸摸刷新速率控制參數(shù)(50Hz~100Hz):0-100 有效 */
0x64,
/* 0x6DC R/W Touch_N 保留 使能觸摸點個數(shù):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 表示關(guān)
0x6E4 R/W Y_Co_Sm Y 方向平滑控制變量,0-255 可配置,0 表示關(guān)
0x6E5 R/W X_Sp_Lim X 方向平滑上限速度:0-255 可配置,0 表示關(guān)
0x6E6 R/W Y_Sp_ Lim Y 方向平滑上限速度:0-255 可配置,0 表示關(guān)
*/
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 丟棄數(shù)據(jù)幀數(shù) 坐標窗口濾波值,以 4 為基數(shù) */
0x04,
/* 0x6EA R/W Large_Tc 0-255 有效:單一觸摸區(qū)包含結(jié)點數(shù)大于此數(shù)會判為大面積觸摸 */
0x14,
/* 0x6EB R/W Shake_Cu Touch 事件建立去抖 手指個數(shù)從多到少去抖 */
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;
/*
*********************************************************************************************************
* 函 數(shù) 名: GT811_InitHard
* 功能說明: 配置觸摸芯片. 在調(diào)用該函數(shù)前,請先執(zhí)行 bsp_touch.c 中的函數(shù) 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));
/* 根據(jù)模組類型重置分辨率寄存器 */
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);
}
}
/*
*********************************************************************************************************
* 函 數(shù) 名: 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];
}
/*
*********************************************************************************************************
* 函 數(shù) 名: GT811_OnePiontScan
* 功能說明: 讀取GT811觸摸數(shù)據(jù),這里僅讀取一個觸摸點。
* 形 參: 無
* 返 回 值: 無
*********************************************************************************************************
*/
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];
/* 檢測按下 */
/* 坐標轉(zhuǎn)換 :
電容觸摸板左下角是 (0,0); 右上角是 (479,799)
需要轉(zhuǎn)到LCD的像素坐標 (左上角是 (0,0), 右下角是 (799,479)
*/
x = g_GT811.Y0;
y = 479 - g_GT811.X0;
/*
有時候I2C通信出問題,有觸摸值,但是壓力參數(shù)是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;
}
/*
*********************************************************************************************************
* 函 數(shù) 名: GT811_ReadSensorID
* 功能說明: 識別顯示模塊類別。讀取GT811 SensorID引腳狀態(tài),有3個狀態(tài),懸空,接電源,接地。
* 形 參: 無
* 返 回 值: 顯示模塊類別, 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, 下載次數(shù): 71)
2018-12-10 20:24 上傳
點擊文件名下載附件
touchGFX
下載積分: 黑幣 -5
作者:
chaoking
時間:
2019-3-11 13:53
感謝分享
作者:
shanji
時間:
2019-4-10 11:35
贊
作者:
yjwpm
時間:
2019-4-13 22:58
正需要呢,十分感謝你的分享,謝
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1