找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4|回復(fù): 0
收起左側(cè)

單片機 觸摸按鈕 執(zhí)行自定義任務(wù)組件

[復(fù)制鏈接]
ID:65967 發(fā)表于 2025-4-7 22:17 | 顯示全部樓層 |閱讀模式
觸摸按鈕執(zhí)行自定義任務(wù)組件
51hei圖片_20250407110211.jpg


項目簡介
本項目基于RT8H8K001開發(fā)板 + RT6809CNN01開發(fā)板 + TFT顯示屏(1024x600) + GT911觸摸屏實現(xiàn)了一個多功能觸摸按鈕組件。系統(tǒng)具備按鈕控制后執(zhí)行任務(wù)的功能,可用于各類觸摸屏人機交互場景。

硬件平臺
  • MCU: STC8H8K64U(51單片機)(注:51 / ARM等單片機皆可)
  • 顯示控制器: 瑞佑科技 RA8889或者RA6809
  • 顯示屏: TFT 1024x600分辨率
  • 觸摸屏: GT911電容觸摸屏
  • MCU--顯示控制器的通信方式: SPI-4

軟件架構(gòu)
軟件主要包含以下幾個模塊:
  • 主程序模塊: 實現(xiàn)系統(tǒng)初始化、主循環(huán)和事件處理
  • 按鈕控件模塊: 實現(xiàn)按鈕的創(chuàng)建、繪制和交互處理
  • 觸摸屏模塊: 實現(xiàn)觸摸事件的掃描和處理
  • 擴展:文字滾動模塊: 實現(xiàn)文字的滾動顯示效果

主要功能
系統(tǒng)提供四種測試按鈕,分別實現(xiàn)不同的功能:
  • Flat Button: 平面按鈕,點擊后執(zhí)行繪圖,顯示字符串兩個任務(wù)
  • Round Button: 圓角按鈕,點擊后執(zhí)行繪圖,顯示字符串兩個任務(wù)
  • Disabled Button: 禁用按鈕,禁用后按鈕不可使用的顯示狀態(tài)
  • Standard Button: 標準按鈕,3D效果,點擊后執(zhí)行彈跳球動畫與滾動顯示的字符串兩個任務(wù)

功能流程圖

1. 主程序流程
1.png
2. 文字滾動功能流程 (Test_Click4)
2.png


代碼詳解


1. 主程序初始化
主程序在初始化階段完成以下工作:
  • 配置MCU的I/O口
  • 初始化SPI通信
  • 初始化RA8889/RA6809顯示控制器
  • 初始化GT911觸摸屏
  • 加載背景圖像
  • 創(chuàng)建和配置按鈕控件
  • 顯示提示信息
  1. void main()
  2. {
  3.     // 聲明按鈕指針
  4.     BUTTON* btn1;
  5.     BUTTON* btn2;
  6.     BUTTON* btn3;
  7.     BUTTON* btn4;
  8.    
  9.     // MCU I/O口配置
  10.     P0M0 = 0xff & cClrb5;         // 設(shè)置P0.5為雙向口模式(SPI_MISO)
  11.     P0M1 = 0x00;
  12.     // 更多I/O配置...
  13.    
  14.     // SPI初始化
  15.     SPI4_Init();
  16.    
  17.     // RA8889硬件復(fù)位和初始化
  18.     RA8889_RST = 1;
  19.     delay_ms(1);
  20.     RA8889_RST = 0;
  21.     delay_ms(1);
  22.     RA8889_RST = 1;
  23.     RA8889_Initial();
  24.    
  25.     // 初始化觸摸屏
  26.     GT911_Init();
  27.    
  28.     // 加載背景圖像
  29.     SPI_NOR_initial_JPG_AVI(1,0,BUS1,CS1,1);
  30.     JPG_NOR(BINARY_INFO[0].start_addr, BINARY_INFO[0].img_size, canvas_image_width, 0,0);
  31.    
  32.     // 顯示PNG圖片
  33.     SPI_NOR_initial_DMA (4,BUS1,CS1,1,0);
  34.     SPI_NOR_DMA_png (BINARY_INFO[2].start_addr,Layer1,0,BINARY_INFO[2].img_width,BINARY_INFO[2].img_height);
  35.     BTE_alpha_blending_32bit_Pixel_mode(BINARY_INFO[2].img_width,BINARY_INFO[2].img_width,BINARY_INFO[2].img_height,
  36.                                       800,530,Layer0,canvas_image_width,
  37.                                       800,530,Layer0,canvas_image_width,
  38.                                       Layer1);
  39.                                       
  40.     // 顯示標題文字
  41.     Foreground_color_16M(color16M_white);
  42.     Select_Font_Height_WxN_HxN_ChromaKey_Alignment(24,2,2,1,0);
  43.     Goto_Text_XY(280,20);   
  44.     Show_String("Button Control Example");
  45.    
  46.     // 初始化按鈕控件
  47.     Button_Init();
  48.    
  49.     // 創(chuàng)建并配置4個按鈕
  50.     // ...創(chuàng)建按鈕代碼...
  51.    
  52.     // 繪制所有按鈕
  53.     Button_DrawAll();
  54.    
  55.     // 顯示提示信息
  56.     // ...顯示提示代碼...
  57.    
  58.     // 主循環(huán)
  59.     while(1) {
  60.         // 檢測觸摸屏
  61.         if(CTP_INT == 0){
  62.             GT911_Scan();
  63.         }
  64.         // 處理按鈕觸摸
  65.         Button_HandleTouch();
  66.         // 延時
  67.         delay_ms(10);
  68.     }
  69. }
復(fù)制代碼



使用說明程序操作流程
  • 程序啟動后,會顯示四個按鈕和提示信息
  • 點擊不同的按鈕可以進入不同的功能模式:
    • Flat Button: 繪圖和顯示一串字符
    • Round Button: 繪圖和顯示一串字符
    • Disabled Button: 繪圖和顯示一串字符
    • Standard Button: 顯示彈跳球和滾動文字效


文字滾動模式使用說明
  • 點擊"Standard Button"進入文字滾動和彈跳球模式
  • 觀察文字從左向右滾動效果和彈跳球動畫
  • 觸摸屏幕任意位置可以退出該模式
  1. void Test_Click4(void)
  2. {
  3.     // 變量聲明
  4.     char str[] = " Button 4 custom function executed!";
  5.     char display_buffer[100];  // 滾動文本緩沖區(qū)
  6.     char temp[41];            // 臨時緩沖區(qū)
  7.     int str_len;               // 字符串長度
  8.     int display_width = 40;    // 顯示區(qū)域?qū)挾?br />
  9.     int start_pos = -display_width + 5;  // 起始位置
  10.     int i, j;
  11.     int x, y, dir_x, dir_y;    // 球的位置和方向

  12.     // 初始化文本和區(qū)域
  13.     // ...初始化代碼...
  14.    
  15.     // 準備滾動文本:原文本 + 10空格 + 原文本
  16.     str_len = strlen(str);
  17.     strcpy(display_buffer, str);
  18.    
  19.     // 添加空格
  20.     for(i = str_len; i < str_len + 10; i++) {
  21.         display_buffer[i] = ' ';
  22.     }
  23.    
  24.     // 添加第二段文本
  25.     strcpy(&display_buffer[str_len + 10], str);
  26.     display_buffer[str_len * 2 + 10] = '\0';
  27.    
  28.     // 初始化彈跳球參數(shù)
  29.     x = 38;
  30.     y = 15;
  31.     dir_x = 1;
  32.     dir_y = 1;
  33.     i = 0;
  34.    
  35.     // 動畫循環(huán)
  36.     while(1){
  37.         // 清空區(qū)域
  38.         BTE_Solid_Fill(0,canvas_image_width,0,LCD_Height,color16M_white,300,150);
  39.         
  40.         // 更新球位置并繪制
  41.         // ...球位置更新代碼...
  42.         
  43.         // 顯示滾動文本
  44.         memset(temp, ' ', display_width); // 用空格填充臨時緩沖區(qū)
  45.         temp[display_width] = '\0';       // 確保字符串正確終止
  46.         
  47.         // 處理負值的start_pos
  48.         if(start_pos < 0) {
  49.             // 先填充部分空格
  50.             for(j = 0; j < -start_pos && j < display_width; j++) {
  51.                 temp[j] = ' ';
  52.             }
  53.             // 再填充可見的字符串部分
  54.             for(; j < display_width && j + start_pos < strlen(display_buffer); j++) {
  55.                 temp[j] = display_buffer[j + start_pos];
  56.             }
  57.         } else {
  58.             // 正常填充
  59.             for(j = 0; j < display_width && j + start_pos < strlen(display_buffer); j++) {
  60.                 temp[j] = display_buffer[j + start_pos];
  61.             }
  62.         }
  63.         temp[display_width] = '\0'; // 確保字符串終止
  64.         
  65.         // ...顯示文本代碼...
  66.         
  67.         // 更新滾動位置
  68.         start_pos++;
  69.         if(start_pos > str_len + 10) {
  70.             start_pos = -display_width + 5;
  71.         }
  72.         
  73.         // 檢測退出條件
  74.         if(CTP_INT == 0) break;
  75.     }
  76. }
復(fù)制代碼




注意事項
  • 觸摸坐標可能需要根據(jù)實際屏幕分辨率進行換算
  • 文字滾動功能中,如果出現(xiàn)末尾顯示多余字符的問題,請檢查temp緩沖區(qū)的初始化和終止符設(shè)置

范例演示介紹
https://www.bilibili.com/video/BV12nRzYPEH4/?share_source=copy_web&amp;vd_source=c0cd4c87f6dcc19bcebab2f4cf3c40db



回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表