Touch_GUI(基于STM32触摸屏)
提示:基于STM32 触摸屏的简易GUI设计(主要涉及逻辑控制,界面较为简化) 涉及的硬件为STM32F427VGT6 ,触摸屏驱动芯片为TP2046 触摸屏驱动代码请查看我之前的文章 STM32F427V系列的触摸屏驱动
前言
一、程序介绍&说明
-
程序中分别有三个结构体 分别控制程序的工作状态、触摸效果和触摸事件处理等 -
用户需要先调用初始化函数 可根据需要进行按键(触摸热区)数量进行加减 这是设置触摸热区范围 -
用户只需在主函数里面调用逻辑控制函数即可 具体位置根据使用情况定 -
用户根据需要进行重写弱函数 -
其代码核心为触摸区域判断
static uint8_t Judge_Touch(uint16_t num[])
{
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;
}
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;
}
}
}
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 即可跳转。
|