单片机实现触摸按钮执行自定义任务组件

news2025/4/17 9:49:55

触摸按钮执行自定义任务组件

在这里插入图片描述

项目简介

本项目基于RT8H8K001开发板 + RT6809CNN01开发板 + TFT显示屏(1024x600) + GT911触摸屏实现了一个多功能触摸按钮组件。系统具备按钮控制后执行任务的功能,可用于各类触摸屏人机交互场景。

硬件平台

  • MCU: STC8H8K64U(51单片机)(注:51 / ARM等单片机皆可)
  • 显示控制器: 瑞佑科技 RA8889或者RA6809
  • 显示屏: TFT 1024x600分辨率
  • 触摸屏: GT911电容触摸屏
  • MCU–显示控制器的通信方式: SPI-4

软件架构

软件主要包含以下几个模块:

  1. 主程序模块: 实现系统初始化、主循环和事件处理
  2. 按钮控件模块: 实现按钮的创建、绘制和交互处理
  3. 触摸屏模块: 实现触摸事件的扫描和处理
  4. 扩展:文字滚动模块: 实现文字的滚动显示效果

主要功能

系统提供四种测试按钮,分别实现不同的功能:

  1. Flat Button: 平面按钮,点击后执行绘图,显示字符串两个任务
  2. Round Button: 圆角按钮,点击后执行绘图,显示字符串两个任务
  3. Disabled Button: 禁用按钮,禁用后按钮不可使用的显示状态
  4. Standard Button: 标准按钮,3D效果,点击后执行弹跳球动画与滚动显示的字符串两个任务

功能流程图

1. 主程序流程

在这里插入图片描述

2. 文字滚动功能流程 (Test_Click4)

在这里插入图片描述

代码详解

1. 主程序初始化

主程序在初始化阶段完成以下工作:

  • 配置MCU的I/O口
  • 初始化SPI通信
  • 初始化RA8889/RA6809显示控制器
  • 初始化GT911触摸屏
  • 加载背景图像
  • 创建和配置按钮控件
  • 显示提示信息
void main()
{
    // 声明按钮指针
    BUTTON* btn1;
    BUTTON* btn2;
    BUTTON* btn3;
    BUTTON* btn4;
    
    // MCU I/O口配置
    P0M0 = 0xff & cClrb5; 	// 设置P0.5为双向口模式(SPI_MISO)
    P0M1 = 0x00;
    // 更多I/O配置...
    
    // SPI初始化
    SPI4_Init();
    
    // RA8889硬件复位和初始化
    RA8889_RST = 1;
    delay_ms(1);
    RA8889_RST = 0;
    delay_ms(1);
    RA8889_RST = 1;
    RA8889_Initial();
    
    // 初始化触摸屏
    GT911_Init();
    
    // 加载背景图像
    SPI_NOR_initial_JPG_AVI(1,0,BUS1,CS1,1);
    JPG_NOR(BINARY_INFO[0].start_addr, BINARY_INFO[0].img_size, canvas_image_width, 0,0);
    
    // 显示PNG图片
    SPI_NOR_initial_DMA (4,BUS1,CS1,1,0);
    SPI_NOR_DMA_png (BINARY_INFO[2].start_addr,Layer1,0,BINARY_INFO[2].img_width,BINARY_INFO[2].img_height);
    BTE_alpha_blending_32bit_Pixel_mode(BINARY_INFO[2].img_width,BINARY_INFO[2].img_width,BINARY_INFO[2].img_height,
                                      800,530,Layer0,canvas_image_width,
                                      800,530,Layer0,canvas_image_width,
                                      Layer1);
                                      
    // 显示标题文字
    Foreground_color_16M(color16M_white);
    Select_Font_Height_WxN_HxN_ChromaKey_Alignment(24,2,2,1,0);
    Goto_Text_XY(280,20);    
    Show_String("Button Control Example");
    
    // 初始化按钮控件
    Button_Init();
    
    // 创建并配置4个按钮
    // ...创建按钮代码...
    
    // 绘制所有按钮
    Button_DrawAll();
    
    // 显示提示信息
    // ...显示提示代码...
    
    // 主循环
    while(1) {
        // 检测触摸屏
        if(CTP_INT == 0){
            GT911_Scan();
        }
        // 处理按钮触摸
        Button_HandleTouch();
        // 延时
        delay_ms(10);
    }
}

2. 文字滚动功能 (Test_Click4)

文字滚动功能实现了一个从左向右滚动的文本显示效果,同时展示了一个弹跳球动画:

  • 文本从右向左滚入屏幕,然后向右滚动
  • 两段文本之间有10个空格的间隔,形成循环显示
  • 弹跳球在固定区域内自由运动,碰到边界会改变方向
void Test_Click4(void)
{
    // 变量声明
    char str[] = " Button 4 custom function executed!";
    char display_buffer[100];  // 滚动文本缓冲区
    char temp[41];            // 临时缓冲区
    int str_len;               // 字符串长度
    int display_width = 40;    // 显示区域宽度
    int start_pos = -display_width + 5;  // 起始位置
    int i, j;
    int x, y, dir_x, dir_y;    // 球的位置和方向

    // 初始化文本和区域
    // ...初始化代码...
    
    // 准备滚动文本:原文本 + 10空格 + 原文本
    str_len = strlen(str);
    strcpy(display_buffer, str);
    
    // 添加空格
    for(i = str_len; i < str_len + 10; i++) {
        display_buffer[i] = ' ';
    }
    
    // 添加第二段文本
    strcpy(&display_buffer[str_len + 10], str);
    display_buffer[str_len * 2 + 10] = '\0';
    
    // 初始化弹跳球参数
    x = 38;
    y = 15;
    dir_x = 1;
    dir_y = 1;
    i = 0;
    
    // 动画循环
    while(1){
        // 清空区域
        BTE_Solid_Fill(0,canvas_image_width,0,LCD_Height,color16M_white,300,150);
        
        // 更新球位置并绘制
        // ...球位置更新代码...
        
        // 显示滚动文本
        memset(temp, ' ', display_width); // 用空格填充临时缓冲区
        temp[display_width] = '\0';       // 确保字符串正确终止
        
        // 处理负值的start_pos
        if(start_pos < 0) {
            // 先填充部分空格
            for(j = 0; j < -start_pos && j < display_width; j++) {
                temp[j] = ' ';
            }
            // 再填充可见的字符串部分
            for(; j < display_width && j + start_pos < strlen(display_buffer); j++) {
                temp[j] = display_buffer[j + start_pos];
            }
        } else {
            // 正常填充
            for(j = 0; j < display_width && j + start_pos < strlen(display_buffer); j++) {
                temp[j] = display_buffer[j + start_pos];
            }
        }
        temp[display_width] = '\0'; // 确保字符串终止
        
        // ...显示文本代码...
        
        // 更新滚动位置
        start_pos++;
        if(start_pos > str_len + 10) {
            start_pos = -display_width + 5;
        }
        
        // 检测退出条件
        if(CTP_INT == 0) break;
    }
}

使用说明

程序操作流程

  1. 程序启动后,会显示四个按钮和提示信息
  2. 点击不同的按钮可以进入不同的功能模式:
    • Flat Button: 绘图和显示一串字符
    • Round Button: 绘图和显示一串字符
    • Disabled Button: 绘图和显示一串字符
    • Standard Button: 显示弹跳球和滚动文字效果

文字滚动模式使用说明

  1. 点击"Standard Button"进入文字滚动和弹跳球模式
  2. 观察文字从左向右滚动效果和弹跳球动画
  3. 触摸屏幕任意位置可以退出该模式

注意事项

  1. 触摸坐标可能需要根据实际屏幕分辨率进行换算
  2. 文字滚动功能中,如果出现末尾显示多余字符的问题,请检查temp缓冲区的初始化和终止符设置

源码下载

请看到视频末尾。

实际效果展示

单片机-RAIO液晶控制芯片-触摸按钮组件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2330631.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ai云防护技术解析——服务器数据安全的智能防御体系

本文深度解析AI云防护技术如何通过智能流量分析、动态行为建模、自适应防御策略构建服务器安全体系。结合2023年群联科技实战案例,揭示机器学习算法在识别新型DDoS攻击、加密流量检测、零日漏洞防御中的技术突破,并附Gartner最新防护效果验证数据。 AI驱动的流量特征建模技术…

JSONP跨域访问漏洞

一、漏洞一:利用回调GetCookie <?php$conn new mysqli(127.0.0.1,root,root,learn) or die("数据库连接不成功"); $conn->set_charset(utf8); $sql "select articleid,author,viewcount,creattime from learn3 where articleid < 5"; $result…

图形裁剪算法

1.学习目标 理解区域编码(Region Code&#xff0c;RC) 设计Cohen-Sutherland直线裁剪算法 编程实现Cohen-Sutherland直线裁剪算法 2.具体代码 1.具体算法 /*** Cohen-Sutherland直线裁剪算法 - 优化版* author AI Assistant* license MIT*/// 区域编码常量 - 使用对象枚举…

R 语言科研绘图第 36 期 --- 饼状图-基础

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…

vue 3 从零开始到掌握

vue3从零开始一篇文章带你学习 升级vue CLI 使用命令 ## 查看vue/cli版本&#xff0c;确保vue/cli版本在4.5.0以上 vue --version ## 安装或者升级你的vue/cli npm install -g vue/cli ## 创建 vue create vue_test ## 启动 cd vue_test npm run servenvm管理node版本&#…

【R语言绘图】圈图绘制代码

绘制代码 rm(list ls())# 加载必要包 library(data.table) library(circlize) library(ComplexHeatmap) library(rtracklayer) library(GenomicRanges) library(BSgenome) library(GenomicFeatures) library(dplyr)### 数据准备阶段 ### # 1. 读取染色体长度信息 df <- re…

Python爬虫第6节-requests库的基本用法

目录 前言 一、准备工作 二、实例引入 三、GET请求 3.1 基本示例 3.2 抓取网页 3.3 抓取二进制数据 3.4 添加headers 四、POST请求 五、响应 前言 前面我们学习了urllib的基础使用方法。不过&#xff0c;urllib在实际应用中存在一些不便之处。以网页验证和Cookies处理…

什么是可靠性工程师?

一、什么是可靠性工程师&#xff1f; 可靠性工程师就是负责确保产品在使用过程中不出故障、不给客户添麻烦。 你可以理解为是那种“挑毛病的人”&#xff0c;但不是事后挑&#xff0c;是提前想清楚产品在哪些情况下可能会出问题&#xff0c;然后解决掉。 比如&#xff1a; …

如何根据设计稿进行移动端适配:全面详解

如何根据设计稿进行移动端适配&#xff1a;全面详解 文章目录 如何根据设计稿进行移动端适配&#xff1a;全面详解1. **理解设计稿**1.1 设计稿的尺寸1.2 设计稿的单位 2. **移动端适配的核心技术**2.1 使用 viewport 元标签2.1.1 代码示例2.1.2 参数说明 2.2 使用相对单位2.2.…

【Kafka基础】Kafka 2.8以下版本的安装与配置指南:传统ZooKeeper依赖版详解

对于仍在使用Kafka 2.8之前版本的团队来说&#xff0c;需要特别注意其强依赖外部ZooKeeper的特性。本文将完整演示传统架构下的安装流程&#xff0c;并对比新旧版本差异。 1 版本特性差异说明 1.1 2.8 vs 2.8-核心区别 特性 2.8版本 2.8-版本 协调服务 可选内置KRaft模式 …

Redis-x64-3.2.100.msi : Windows 安装包(MSI 格式)安装步骤

Redis-x64-3.2.100.msi 是 Redis 的 Windows 安装包&#xff08;MSI 格式&#xff09;&#xff0c;适用于 64 位系统。 在由于一些环境需要低版本的Redis的安装包。 Redis-x64-3.2.100.msi 安装包下载&#xff1a;https://pan.quark.cn/s/cc4d38262a15 Redis 是一个开源的 内…

【云计算】打造高效容器云平台:规划、部署与架构设计

引言 随着移动互联网时代的大步跃进&#xff0c;互联网公司业务的爆炸式增长发展给传统行业带来了巨大的冲击和挑战&#xff0c;被迫考虑转型和调整。对于我们传统的航空行业来说&#xff0c;还存在传统的思维、落后的技术。一项新业务从提出需求到立项审批、公开招标、项目实…

DeepSeek底层揭秘——《推理时Scaling方法》内容理解

4月初&#xff0c;DeepSeek 提交到 arXiv 上的最新论文正在 AI 社区逐渐升温。 论文核心内容理解 DeepSeek与清华大学联合发布的论文《奖励模型的推理时Scaling方法及其在大规模语言模型中的应用》&#xff0c;核心在于提出一种新的推理时Scaling方法&#xff0c;即通过动态调…

JavaScript之Json数据格式

介绍 JavaScript Object Notation&#xff0c; js对象标注法&#xff0c;是轻量级的数据交换格式完全独立于编程语言文本字符集必须用UTF-8格式&#xff0c;必须用“”任何支持的数据类型都可以用JSON表示JS内内置JSON解析JSON本质就是字符串 Json对象和JS对象互相转化 前端…

使用 Rsync + Lsyncd 实现 CentOS 7 实时文件同步

文章目录 &#x1f300;使用 Rsync Lsyncd 实现 CentOS 7 实时文件同步前言介绍架构图&#x1f9f1;系统环境&#x1f527;Rsync配置&#xff08;两台都需安装&#xff09;关闭SELinux&#xff08;两台都需&#xff09; &#x1f4e6;配置目标端&#xff08;client&#xff09…

Android studio学习之路(六)--真机的调试以及多媒体照相的使用

多媒体应用&#xff08;语言识别&#xff0c;照相&#xff0c;拍视频&#xff09;在生活的各个方面都具有非常大的作用&#xff0c;所以接下来将会逐步介绍多媒体的使用&#xff0c;但是在使用多媒体之前&#xff0c;使用模拟器肯定是不行的&#xff0c;所以我们必须要使用真机…

Qt 资源文件(.qrc 文件)

Qt 资源文件&#xff08;.qrc 文件&#xff09;是 Qt 提供的一种机制&#xff0c;用来将文件&#xff08;如图像、音频、文本文件等&#xff09;嵌入到应用程序中&#xff0c;使得这些文件不需要依赖外部文件路径&#xff0c;而是直接打包到程序的可执行文件中。通过使用 Qt 资…

PandaAI:一个基于AI的对话式数据分析工具

PandaAI 是一个基于 Python 开发的自然语言处理和数据分析工具&#xff0c;支持问答式&#xff08;ChatGPT&#xff09;的数据分析和报告生成功能。PandaAI 提供了一个开源的框架&#xff0c;主要核心组件包含用于数据处理的数据准备层&#xff08;Pandas&#xff09;以及实现 …

【C++算法】50.分治_归并_翻转对

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;图解 题目链接&#xff1a; 493. 翻转对 题目描述&#xff1a; 解法 分治 策略一&#xff1a;计算当前元素cur1后面&#xff0c;有多少元素的两倍比我cur1小&#xff08;降序&#xff09; 利用单…

基于pycatia的CATIA层级式BOM生成器开发全解析

引言:BOM生成技术的革新之路 在高端装备制造领域,CATIA的BOM管理直接影响着研发效率和成本控制。传统VBA方案 虽能实现基础功能,但存在代码维护困难、跨版本兼容性差等痛点。本文基于pycatia框架,提出一种支持动态层级识别、智能查重、Excel联动的BOM生成方案,其核心突破…