IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> Touch_GUI(基于STM32触摸屏) -> 正文阅读

[嵌入式]Touch_GUI(基于STM32触摸屏)

Touch_GUI(基于STM32触摸屏)

提示:基于STM32触摸屏的简易GUI设计(主要涉及逻辑控制,界面较为简化)
涉及的硬件为STM32F427VGT6,触摸屏驱动芯片为TP2046
触摸屏驱动代码请查看我之前的文章
STM32F427V系列的触摸屏驱动



前言

一、程序介绍&说明

  • 程序中分别有三个结构体
    分别控制程序的工作状态、触摸效果和触摸事件处理等
    在这里插入图片描述

  • 用户需要先调用初始化函数
    可根据需要进行按键(触摸热区)数量进行加减
    在这里插入图片描述
    这是设置触摸热区范围
    在这里插入图片描述

  • 用户只需在主函数里面调用逻辑控制函数即可
    在这里插入图片描述
    具体位置根据使用情况定
    在这里插入图片描述

  • 用户根据需要进行重写弱函数
    在这里插入图片描述

  • 其代码核心为触摸区域判断

/*****************************************
 * 函数名:		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仓库下载
提示:点击上面的CSDNGitHub即可跳转。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-07-28 00:17:54  更:2021-07-28 00:17:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 10:08:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计