Touch_GUI(基于STM32触摸屏)

Touch_GUI(基于STM32触摸屏)Touch_GUI(基于STM32触摸屏)
提⽰:基于STM32触摸屏的简易GUI设计(主要涉及逻辑控制,界⾯较为简化)
涉及的硬件为STM32F427VGT6,触摸屏驱动芯⽚为TP2046
触摸屏驱动代码请查看我之前的⽂章
⽂章⽬录
前⾔
⼀、程序介绍&说明
程序中分别有三个结构体
分别控制程序的⼯作状态、触摸效果和触摸事件处理等
⽤户需要先调⽤初始化函数
可根据需要进⾏按键(触摸热区)数量进⾏加减
这是设置触摸热区范围
⽤户只需在主函数⾥⾯调⽤逻辑控制函数即可
具体位置根据使⽤情况定
⽤户根据需要进⾏重写弱函数
其代码核⼼为触摸区域判断
/*****************************************
* 函数名:  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]))//⽬标区域{古代蹴鞠用什么做的
return1;
}
else
return0;
}
/*****************************************
* 函数名:  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)//画矩形并显⽰字符(数组形式){pvc绝缘材料
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即可跳转。

本文发布于:2024-09-23 22:33:21,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/283549.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:触摸   区域   热区   名称   函数   字符
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议