久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6358|回復: 3
打印 上一主題 下一主題
收起左側

STM32F429 TOUCHGFX例程 GT811電容觸摸芯片驅動

[復制鏈接]
跳轉到指定樓層
樓主
ID:216130 發表于 2018-12-10 18:55 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
基本stm32f429的 touchGFX例程, 炫酷GUI

單片機源程序如下:
  1. /*
  2. *********************************************************************************************************
  3. *
  4. *        模塊名稱 : 電容觸摸芯片GT811驅動程序
  5. *        文件名稱 : bsp_ct811.c
  6. *        版    本 : V1.0
  7. *        說    明 : GT811觸摸芯片驅動程序。

  8. *********************************************************************************************************
  9. */
  10. #include "gt811.h"
  11. #include "usart.h"
  12. #include "i2c.h"
  13. //#include "GUI.h"



  14. #define GT811_READ_XY_REG         0x721        /* 坐標寄存器 */
  15. #define GT811_CONFIG_REG        0x6A2        /* 配置參數寄存器 */

  16. /* GT811配置參數,一次性寫入 */
  17. //const uint8_t s_GT811_CfgParams[]=
  18. uint8_t s_GT811_CfgParams[]=
  19. {
  20.         /*
  21.                 0x6A2  R/W  Sen_CH0    觸摸屏 1 號感應線對應的 IC 感應線
  22.                 0x6A3  R/W  Sen_CH1    觸摸屏 2 號感應線對應的 IC 感應線
  23.                 0x6A4  R/W  Sen_CH2    觸摸屏 3 號感應線對應的 IC 感應線
  24.                 0x6A5  R/W  Sen_CH3    觸摸屏 4 號感應線對應的 IC 感應線
  25.                 0x6A6  R/W  Sen_CH4    觸摸屏 5 號感應線對應的 IC 感應線
  26.                 0x6A7  R/W  Sen_CH5    觸摸屏 6 號感應線對應的 IC 感應線
  27.                 0x6A8  R/W  Sen_CH6    觸摸屏 7 號感應線對應的 IC 感應線
  28.                 0x6A9  R/W  Sen_CH7    觸摸屏 8 號感應線對應的 IC 感應線
  29.                 0x6AA  R/W  Sen_CH8    觸摸屏 9 號感應線對應的 IC 感應線
  30.                 0x6AB  R/W  Sen_CH9    觸摸屏 10 號感應線對應的 IC 感應線
  31.         */
  32.     0x12,0x10,0x0E,0x0C,0x0A,0x08,0x06,0x04,0x02,0x00,

  33.         /*
  34.         0x6AC  R/W  Dr0_Con  CHSELEF0  F1DELAY0
  35.         0x6AD  R/W  Dr0_Con  F2DELAY0  F3DELAY0
  36.        
  37.         0x6AE  R/W  Dr1_Con  CHSELEF1  F1DELAY1
  38.         0x6AF  R/W  Dr1_Con  F2DELAY1  F3DELAY1
  39.        
  40.         0x6B0  R/W  Dr2_Con  CHSELEF2  F1DELAY2
  41.         0x6B1  R/W  Dr2_Con  F2DELAY2  F3DELAY2
  42.        
  43.         0x6B2  R/W  Dr3_Con  CHSELEF3  F1DELAY3
  44.         0x6B3  R/W  Dr3_Con  F2DELAY3  F3DELAY3
  45.        
  46.         0x6B4  R/W  Dr4_Con  CHSELEF4  F1DELAY4
  47.         0x6B5  R/W  Dr4_Con  F2DELAY4  F3DELAY4
  48.        
  49.         0x6B6  R/W  Dr5_Con  CHSELEF5  F1DELAY5
  50.         0x6B7  R/W  Dr5_Con  F2DELAY5  F3DELAY5
  51.        
  52.         0x6B8  R/W  Dr6_Con  CHSELEF6  F1DELAY6
  53.         0x6B9  R/W  Dr6_Con  F2DELAY6  F3DELAY6
  54.        
  55.         0x6BA  R/W  Dr7_Con  CHSELEF7  F1DELAY7
  56.         0x6BB  R/W  Dr7_Con  F2DELAY7  F3DELAY7
  57.        
  58.         0x6BC  R/W  Dr8_Con  CHSELEF8  F1DELAY8
  59.         0x6BD  R/W  Dr8_Con  F2DELAY8  F3DELAY8
  60.        
  61.         0x6BE  R/W  Dr9_Con  CHSELEF9  F1DELAY9
  62.         0x6BF  R/W  Dr9_Con  F2DELAY9  F3DELAY9
  63.        
  64.         0x6C0  R/W  Dr10_Con  CHSELEF10  F1DELAY10
  65.         0x6C1  R/W  Dr10_Con  F2DELAY10  F3DELAY10
  66.        
  67.         0x6C2  R/W  Dr11_Con  CHSELEF11  F1DELAY11
  68.         0x6C3  R/W  Dr11_Con  F2DELAY11  F3DELAY11
  69.        
  70.         0x6C4  R/W  Dr12_Con  CHSELEF12  F1DELAY12
  71.         0x6C5  R/W  Dr12_Con  F2DELAY12  F3DELAY12
  72.        
  73.         0x6C6  R/W  Dr13_Con  CHSELEF13  F1DELAY13
  74.         0x6C7  R/W  Dr13_Con  F2DELAY13  F3DELAY13
  75.        
  76.         0x6C8  R/W  Dr14_Con  CHSELEF14  F1DELAY14
  77.         0x6C9  R/W  Dr14_Con  F2DELAY14  F3DELAY14
  78.        
  79.         0x6CA  R/W  Dr15_Con  CHSELEF15  F1DELAY15
  80.         0x6CB  R/W  Dr15_Con  F2DELAY15  F3DELAY15
  81.         */
  82.         0x05,0x55,0x15,0x55,0x25,0x55,0x35,0x55,0x45,0x55,0x55,0x55,0x65,0x55,0x75,0x55,
  83.         0x85,0x55,0x95,0x55,0xA5,0x55,0xB5,0x55,0xC5,0x55,0xD5,0x55,0xE5,0x55,0xF5,0x55,       
  84.        
  85.         /*
  86.         0x6CC  R/W  ADCCFG  芯片掃描控制參數
  87.         0x6CD  R/W  SCAN    芯片掃描控制參數
  88.         */
  89.         0x1B,0x03,
  90.        
  91.         /*
  92.         0x6CE  R/W  F1SET  驅動脈沖 1 頻率
  93.         0x6CF  R/W  F2SET  驅動脈沖 2 頻率
  94.         0x6D0  R/W  F3SET  驅動脈沖 3 頻率
  95.         0x6D1  R/W  F1PNUM  驅動脈沖 1 個數
  96.         0x6D2  R/W  F2PNUM  驅動脈沖 2 個數
  97.         0x6D3  R/W  F3PNUM  驅動脈沖 3 個數
  98.         */
  99.         0x00,0x00,0x00,0x13,0x13,0x13,
  100.        
  101.         /* 0x6D4  R/W  TOTALROW  全部使用的驅動通道數(屏的驅動線+按鍵驅動線) */
  102.         0x0F,
  103.        
  104.         /*
  105.         0x6D5  R/W  TSROW  用在屏上的驅動線
  106.         0x6D6  R/W  TOTALCOL  用在屏上的感應線
  107.         */
  108.         0x0F,0x0A,
  109.        
  110.         /*
  111.         0x6D7  R/W  Sc_Touch  屏幕按鍵閾值
  112.         0x6D8  R/W  Sc_Leave  屏幕松鍵閾值
  113.         */
  114.         0x50,0x30,
  115.        
  116.         /*
  117.         0x6D9  R/W  Md_Switch  保留  DD2    R1  R0  INT    SITO    RT    ST
  118.         0x6DA  R/W  LPower_C  保留  Auto 無按鍵進低功耗時間,0-63 有效,以 s 為單位
  119.         */
  120.         0x05,0x03,
  121.        
  122.         /* 0x6DB  R/W  Refresh  觸摸刷新速率控制參數(50Hz~100Hz):0-100 有效 */       
  123.         0x64,
  124.        
  125.         /* 0x6DC  R/W  Touch_N  保留  使能觸摸點個數:1-5 有效 */
  126.         0x05,
  127.        
  128.         /*
  129.         0x6DD  R/W  X_Ou_Max_L X 坐標輸出最大值  480
  130.         0x6DE  R/W  X_Ou_Max_H
  131.        
  132.         0x6DF  R/W  Y_Ou_Max_L  Y 坐標輸出最大值  800
  133.         0x6E0  R/W  Y_Ou_Max_H
  134.         */
  135. #if 1
  136.         0x58,0x02,
  137.         0x00,0x04,
  138. #else
  139.         0xe0,0x01,
  140.         0x20,0x03,
  141. #endif

  142.         /*
  143.         0x6E1  R/W  X _Th  X 坐標輸出門限:0-255,以 4 個原始坐標點為單位
  144.         0x6E2  R/W  Y_Th  Y 坐標輸出門限:0-255,以 4 個原始坐標點為單位
  145.         */
  146.         0x00,  0x00,
  147.        
  148.         /*
  149.         0x6E3  R/W  X_Co_Sm  X 方向平滑控制變量,0-255 可配置,0 表示關
  150.         0x6E4  R/W  Y_Co_Sm  Y 方向平滑控制變量,0-255 可配置,0 表示關
  151.         0x6E5  R/W  X_Sp_Lim  X 方向平滑上限速度:0-255 可配置,0 表示關
  152.         0x6E6  R/W  Y_Sp_ Lim  Y 方向平滑上限速度:0-255 可配置,0 表示關
  153.         */
  154.         0x32,0x2C,0x34,0x2E,
  155.        
  156.         /*
  157.         0x6E7  R/W  X_Bor_Lim  Reserved  Reserved
  158.         0x6E8  R/W  Y_Bor_Lim  Reserved  Reserved
  159.         */
  160.         0x00,0x00,
  161.        
  162.         /* 0x6E9  R/W  Filter  丟棄數據幀數  坐標窗口濾波值,以 4 為基數 */
  163.         0x04,
  164.        
  165.         /* 0x6EA  R/W  Large_Tc  0-255 有效:單一觸摸區包含結點數大于此數會判為大面積觸摸 */
  166.         0x14,
  167.        
  168.         /* 0x6EB  R/W  Shake_Cu  Touch 事件建立去抖  手指個數從多到少去抖 */
  169.         0x22,
  170.        
  171.         /* 0x6EC  R/W  Noise_R  保留  白噪聲削減量(低 nibble)有效 */
  172.         0x04,
  173.        
  174.         /* 0x6ED~0x6F1 R/W    保留 */
  175.         0x00,0x00,0x00,0x00,0x00,
  176.        
  177.        
  178.     0x20,0x14,0xEC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x30,
  179.     0x25,0x28,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
  180. };

  181. #define GT811_WriteReg I2C1_Write
  182. #define GT811_ReadReg I2C1_Read

  183. GT811_T g_GT811;

  184. /*
  185. *********************************************************************************************************
  186. *        函 數 名: GT811_InitHard
  187. *        功能說明: 配置觸摸芯片.  在調用該函數前,請先執行 bsp_touch.c 中的函數 bsp_DetectLcdType() 識別id
  188. *        形    參:  無
  189. *        返 回 值: 無
  190. *********************************************************************************************************
  191. */
  192. void GT811_Init(void)
  193. {
  194.         g_GT811.i2c_addr = GT811_I2C_ADDR1;
  195.        
  196.         GT811_WriteReg(g_GT811.i2c_addr, GT811_CONFIG_REG, (uint8_t *)s_GT811_CfgParams, sizeof(s_GT811_CfgParams));
  197.        
  198.         /* 根據模組類型重置分辨率寄存器 */
  199.         if (g_GT811.i2c_addr == GT811_I2C_ADDR1)
  200.         {
  201.                 const uint8_t tab[4] = {0xe0, 0x01, 0x20, 0x03};
  202.                 GT811_WriteReg(g_GT811.i2c_addr, 0x6DD, (uint8_t *)tab, 4);
  203.         }
  204.         else        /* GT811_I2C_ADDR3 */
  205.         {
  206.                 const uint8_t tab[4] = {0x58, 0x02, 0x00, 0x04};
  207.                 GT811_WriteReg(g_GT811.i2c_addr, 0x6DD, (uint8_t *)tab, 4);
  208.         }
  209. }

  210. /*
  211. *********************************************************************************************************
  212. *        函 數 名: GT811_ReadVersion
  213. *        功能說明: 獲得GT811的芯片版本
  214. *        形    參: 無
  215. *        返 回 值: 16位版本
  216. *********************************************************************************************************
  217. */
  218. uint16_t GT811_ReadVersion(void)
  219. {
  220.         uint8_t buf[2];

  221.         GT811_ReadReg(g_GT811.i2c_addr, 0x717, buf, 2);

  222.         return ((uint16_t)buf[0] << 8) + buf[1];
  223. }

  224. /*
  225. *********************************************************************************************************
  226. *        函 數 名: GT811_OnePiontScan
  227. *        功能說明: 讀取GT811觸摸數據,這里僅讀取一個觸摸點。
  228. *        形    參: 無
  229. *        返 回 值: 無
  230. *********************************************************************************************************
  231. */
  232. bool GT811_ReadOnePiont(uint16_t *px, uint16_t *py)
  233. {
  234.         uint8_t buf[7] = {0}; /* 將其都初始化為 0 */
  235.         uint16_t x, y;
  236.         uint8_t res;
  237.        
  238.         /* 讀取寄存器:0x721  R  TouchpointFlag  Sensor_ID  key  tp4  tp3  tp2  tp1  tp0 */
  239.         res = GT811_ReadReg(g_GT811.i2c_addr, GT811_READ_XY_REG, buf, 1);
  240.         if(res != 0)
  241.         {
  242.                 //uprintf("1.failed\r\n");
  243.                 return false;
  244.         }
  245.        
  246.         /* 判斷是否按下,沒有按下,直接退出 */
  247.         if ((buf[0] & 0x01) == 0)
  248.         {
  249.                 return false;
  250.         }
  251.        
  252.         /* 讀取第一個觸摸點0 */
  253.         res = GT811_ReadReg(g_GT811.i2c_addr, GT811_READ_XY_REG + 1, &buf[1], 6);
  254.         if(res != 0)
  255.         {
  256.                 //uprintf("2.failed\r\n");
  257.                 return false;
  258.         }
  259.        
  260.         /*
  261.         0x721  R  TouchpointFlag  Sensor_ID  key  tp4  tp3  tp2  tp1  tp0
  262.         0x722  R  Touchkeystate     0  0  0  0  key4  key3  key2  key1

  263.         0x723  R  Point0Xh  觸摸點 0,X 坐標高 8 位
  264.         0x724  R  Point0Xl  觸摸點 0,X 坐標低 8 位
  265.         0x725  R  Point0Yh  觸摸點 0,Y 坐標高 8 位
  266.         0x726  R  Point0Yl  觸摸點 0,Y 坐標低 8 位
  267.         0x727  R  Point0Pressure  觸摸點 0,觸摸壓力
  268.         */
  269.         g_GT811.X0 = ((uint16_t)buf[2] << 8) + buf[3];
  270.         g_GT811.Y0 = ((uint16_t)buf[4] << 8) + buf[5];
  271.         g_GT811.P0 = buf[6];
  272.        
  273.         /* 檢測按下 */
  274.         /* 坐標轉換 :
  275.                 電容觸摸板左下角是 (0,0);  右上角是 (479,799)
  276.                 需要轉到LCD的像素坐標 (左上角是 (0,0), 右下角是 (799,479)
  277.         */
  278.         x = g_GT811.Y0;
  279.         y = 479 - g_GT811.X0;
  280.        
  281.         /*
  282.                 有時候I2C通信出問題,有觸摸值,但是壓力參數是0,通過這種方法可以將其排除。
  283.                 x     y   p
  284.                 0,    0,  0
  285.                 0,    0,  0
  286.            24,    0,  0
  287.                 0,    0,  0
  288.            11,  323,  0
  289.                 0,    0,  0
  290.                 0,    0,  0
  291.                 6,  235,  0
  292.            38,  230,  0
  293.                 0,    0,  0
  294. //        */
  295. //        if(g_GT811.P0 == 0)
  296. //        {
  297. //                uprintf("%5d,%5d,%3d\r\n",  g_GT811.X0, g_GT811.Y0, g_GT811.P0);
  298. //                return false;
  299. //        }

  300.         *px = x;
  301.         *py = y;
  302.        
  303.         return true;
  304. }

  305. /*
  306. *********************************************************************************************************
  307. *        函 數 名: GT811_ReadSensorID
  308. *        功能說明: 識別顯示模塊類別。讀取GT811 SensorID引腳狀態,有3個狀態,懸空,接電源,接地。
  309. *        形    參: 無
  310. *        返 回 值: 顯示模塊類別, 0, 1, 2
  311. *********************************************************************************************************
  312. */
  313. uint8_t GT811_ReadSensorID(void)
  314. {
  315.         uint8_t value;
  316.        
  317.         /*         0x721  R  TouchpointFlag      Sensor_ID  key  tp4  tp3  tp2  tp1  tp0 */
  318.         GT811_ReadReg(g_GT811.i2c_addr, 0x721, &value, 1);
  319.        
  320.         return (value >> 6);
  321. }
復制代碼

所有資料51hei提供下載:
GFX_DEMO.rar (4.65 MB, 下載次數: 71)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:267839 發表于 2019-3-11 13:53 | 只看該作者
感謝分享
回復

使用道具 舉報

板凳
ID:113953 發表于 2019-4-10 11:35 | 只看該作者
贊           
回復

使用道具 舉報

地板
ID:128321 發表于 2019-4-13 22:58 | 只看該作者
正需要呢,十分感謝你的分享,謝
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99九色| av网站在线免费观看 | 欧美成人一级 | 日本不卡高字幕在线2019 | 精品久久久久久亚洲精品 | 亚洲综合在线视频 | 亚洲精品一区二区三区在线 | 在线视频91 | 亚洲三级在线观看 | 欧美精品一区二区三区四区 在线 | 国产精品一区二区在线 | 亚洲精品字幕 | 亚洲国产精品va在线看黑人 | 天天射中文 | 天天操 夜夜操 | 国产精品一区二区三区久久 | 国产精品一区免费 | 免费一区二区三区 | 国产精品一区二区在线播放 | 国产精品久久久久久久久久久免费看 | 国产精品一区二区三区在线 | 亚洲超碰在线观看 | 欧美一区在线视频 | 欧美xxxx做受欧美 | 欧美一级网站 | 黄频视频 | 天天综合久久 | 国产精品一区二区三区久久久 | 成人日批视频 | 91久久精品国产 | 一区二区高清在线观看 | 日本欧美黄色片 | 免费能直接在线观看黄的视频 | 国产免费观看视频 | 亚洲成人精品一区二区 | 日本视频免费观看 | 麻豆一区二区三区 | 精品一区二区三区四区 | 国产综合网站 | 亚洲精品资源 | 欧美日韩成人网 |