Touch_GUI(基于STM32触摸屏)
2021/7/26 23:10:06
本文主要是介绍Touch_GUI(基于STM32触摸屏),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Touch_GUI(基于STM32触摸屏)
提示:基于STM32
触摸屏的简易GUI设计(主要涉及逻辑控制,界面较为简化)
涉及的硬件为STM32F427VGT6
,触摸屏驱动芯片为TP2046
触摸屏驱动代码请查看我之前的文章
STM32F427V系列的触摸屏驱动
文章目录
- Touch_GUI(基于STM32触摸屏)
- 前言
- 一、程序介绍&说明
- 二,程序下载说明
前言
一、程序介绍&说明
-
程序中分别有三个结构体
分别控制程序的工作状态、触摸效果和触摸事件处理等
-
用户需要先调用初始化函数
可根据需要进行按键(触摸热区)数量进行加减
这是设置触摸热区范围
-
用户只需在主函数里面调用逻辑控制函数即可
具体位置根据使用情况定
-
用户根据需要进行重写弱函数
-
其代码核心为触摸区域判断
/***************************************** * 函数名: Judge_Touch * 函数功能: 判断所绘制的区域是否被按下 * 形参: num:矩形框的位置坐标。x1,y1,x2,y2 * 返回值: 1:按下的是该区域。0:按下的不是该区域 ******************************************/ static uint8_t Judge_Touch(uint16_t num[]) //判断触摸区域 若是该区域返回 1,否则返回 0 { if((tp_dev.x[0]>num[0]) && (tp_dev.x[0]<num[2]) && (tp_dev.y[0]>num[1]) && (tp_dev.y[0]<num[3])) //目标区域 { return 1; } else return 0; } /***************************************** * 函数名: Gui_TouchAdjust * 函数功能: 获取所有被按下触摸热区的名称。所有触摸热区归一处理,传入触摸热区,并获取触摸热区名称 * 形参: ButtonArea:按钮区域 TouchName所触发的区域名称 * 返回值: 无 ******************************************/ static void Gui_TouchAdjust(uint16_t *ButtonArea[ButtonNumSIZE][LocationSize],uint16_t *TouchName) { static uint8_t i = 0; tp_dev.scan(0); //触摸扫描 if(tp_dev.sta&TP_PRES_DOWN) //触摸屏被按下 { if(tp_dev.x[0]<lcd_Width&&tp_dev.y[0]<lcd_height) //判断按下区域是否在显示屏内 { for(i = 0;i < User_Gui.ButtonNumber;i++) //循环遍历寻找触摸区域 { if(Judge_Touch(*ButtonArea[i])) //判断触摸区域 { if(User_Gui.Control.State != Start || i == 0) //程序正在执行 { EffectView(User_Gui.Interface,i+1); while(!PEN); EffectView(User_Gui.Interface,User_Gui.Interface); //触摸热区效果显示 *TouchName = i+1; //触摸热区名称 } } } if(User_Gui.Interface == DepuInterface) //副页面的触摸热区名称变换 *TouchName += 3; } } }
- 绘框函数
/***************************************** * 函数名: DrawRectangle_num * 函数功能: 绘制矩形框并填充字符 * 形参: num:矩形框的位置坐标。x1,y1,x2,y2 * *string: 字符 * StrColor: 字符颜色 * StrBlaColor: 字符背景色 * RecColor: 框的颜色 * 返回值: 无 ******************************************/ static void DrawRectangle_num(uint16_t num[], uint8_t *string, uint16_t StrColor, uint16_t StrBlaColor,uint16_t RecColor) //画矩形并显示字符 (数组形式) { uint8_t length; //长度(字符) uint8_t breadth; //宽度 length = strlen((char*)string); //计算字符串数组长度 breadth = 16; if(length > (num[2] - num[0])) //当所画的矩形长度小于所要显示的字符时,自动增加长度 { num[2] = length+2; if(breadth > num[3] - num[1]) //当所画的矩形宽度小于所要显示的字符时,自动增加宽度 { num[3] = num[1] + breadth+2; LCD_ShowString(num[0]+(num[2]-num[0]-length*8)/2,(num[3]-num[1]-breadth)/2+num[1],string,StrColor,StrBlaColor); //显示字符 } else LCD_ShowString(num[0]+(num[2]-num[0]-length*8)/2,(num[2]-num[1]-breadth)/2+num[1],string,StrColor,StrBlaColor); //显示字符 } else { LCD_Fill(num[0],num[1],num[2],num[1]+1,RecColor); //上方的线 LCD_Fill(num[0],num[3],num[2],num[3]+1,RecColor); //下方的线 LCD_Fill(num[0],num[1],num[0]+1,num[3],RecColor); //左方的线 LCD_Fill(num[2],num[1],num[2]+1,num[3]+1,RecColor); //右方的线 画线 LCD_ShowString(num[0]+(num[2]-num[0]-length*8)/2,(num[3]-num[1]-breadth)/2+num[1],string,StrColor,StrBlaColor); //中间的字符 } }
二,程序下载说明
其完整代码可在CSDN上下载或去我GitHub仓库下载
提示:点击上面的CSDN
和GitHub
即可跳转。
这篇关于Touch_GUI(基于STM32触摸屏)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享