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 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 基于STM32的TFT触摸屏虚拟按键 -> 正文阅读

[嵌入式]基于STM32的TFT触摸屏虚拟按键

TFT触摸屏虚拟按键功能展示

虚拟按键的代码是基于触摸屏的(这里触摸屏详细可以去看正点原子官方例程这里不过多赘述)

这里主要复习复习本例程中用到的LCD、触摸屏功能函数

并讲讲触摸屏虚拟按键相较于基础的触摸屏多了哪些函数

一、LCD、触摸屏功能函数复习

①清屏函数(一般用于界面的刷新或切换)

void LCD_Clear(u16 Color);	 //清屏

②在指定区域填充颜色(用于设置按键捕获状态)

void LCD_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 color);//在指定区域填充颜色

③画矩形函数(用于构造界面)

void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2);		 //画矩形

④显示字符串函数(用于显示信息 注意size仅可选择16/12)

LCD_ShowString(u16 x,u16 y,u16 width,u16 height,u8 size,u8 *p); //显示字符串

⑤触摸屏校准函数(TFT是电阻屏 一定要记得校准!!)

void TP_Adjust(void);	//触摸屏校准

二、虚拟按键功能函数

在触摸屏的基础上,触摸屏虚拟按键主要多了三个函数,以下一一讲解。

变量及函数定义:

u8** keycontent;
const  u8* key_menu[15]={"Ret"," : "," None","1","2","3","4","5","6","7","8","9","DEL","0","Enter",};  //按键界面菜单
void Load_keyboard(u16 x,u16 y,u8 **key_content);  //加载按键界面
void Key_staset(u16 x,u16 y,u8 keyx,u8 sta);  //设置按键捕获状态
u8 Get_keynum(u16 x,u16 y);  //得到按键的输入

①按键界面加载函数

void Load_keyboard(u16 x,u16 y,u8 **key_content)
{
	u16 i;
	POINT_COLOR=RED; //字体颜色为红色
	keycontent=key_content;
	LCD_Fill(x,y,x+240,y+150,WHITE);
	LCD_DrawRectangle(x,y,x+240,y+150);						   
	LCD_DrawRectangle(x+80,y,x+160,y+150);	 
	LCD_DrawRectangle(x,y+30,x+240,y+60);
	LCD_DrawRectangle(x,y+90,x+240,y+120);
	POINT_COLOR=BLUE;
	for(i=0;i<15;i++)
	{
		if(i==1) //":"不需要中间显示
			LCD_ShowString(x+(i%3)*80+2,y+7+30*(i/3),16,16,16,(u8*)keycontent[i]);	
		else
			Show_Str_Mid(x+(i%3)*80,y+7+30*(i/3),(u8*)keycontent[i],16,80);
	} 
}

这个函数主要用于显示出如下按键界面

第三个空白是因为我当时烧程序的时候还是“ ”而不是“None”?

为什么选用画矩形的函数而不是画直线的函数来构建界面的原因以及很明朗啦(代码更少,更方便,更简单

这里额外讲一下,方便大家去构建自己的界面

TFT显示屏X轴像素点最大为240,Y轴像素点最大为320(简而言之就是坐标的值)

至于Show_Str_Mid函数是我额外写的一个? 意在让字符串在所要求位置的中间显示

②设置按键捕获状态函数

void Key_staset(u16 x,u16 y,u8 keyx,u8 sta)
{		  
	u16 i=keyx/3,j=keyx%3;
	if(keyx>16)return;
	if(sta &&keyx!=1)  //":"区域不捕获
		LCD_Fill(x+j*80+1,y+i*30+1,x+j*80+78,y+i*30+28,GREEN);  //当该区域被按下 区域被绿色填充
	else if(keyx!=1)  //松手后区域恢复白色 
		LCD_Fill(x+j*80+1,y+i*30+1,x+j*80+78,y+i*30+28,WHITE);
	if(keyx!=1)  //区域被填色后重新显示
		Show_Str_Mid(x+j*80,y+7+30*i,(u8*)keycontent[keyx],16,80);
}

?? ?else if(keyx!=1) ?//松手后区域恢复白色?
?? ??? ?LCD_Fill(x+j*80+1,y+i*30+1,x+j*80+78,y+i*30+28,WHITE);

这个函数一定要有 它决定这个按键能不能连按

此函数流程框图如下

?③得到按键的输入函数

//返回值:1-15
u8 Get_keynum(u16 x,u16 y)
{
	u16 i,j;
	static u8 key_x=0;
	u8 key=0;
	tp_dev.scan(0); 		 
	if(tp_dev.sta&TP_PRES_DOWN)  //触摸屏被按下
	{	
		for(i=0;i<5;i++)
		{
			for(j=0;j<3;j++)
			{
			 	if(tp_dev.x[0]<(x+j*80+80)&&tp_dev.x[0]>(x+j*80)&&tp_dev.y[0]<(y+i*30+30)&&tp_dev.y[0]>(y+i*30))  //决定每一块区域所代表的值
				{	
					key=i*3+j+1;	//i代表行 每一行的变化需要变化三个值 j代表列 每一列变化仅需要变化一个值
					break;	 		   
				}
			}
			if(key) //key!=0
			{	   
				if(key_x==key)key=0; 
				else 
				{
					Key_staset(x,y,key_x-1,0);  
					key_x=key;
					Key_staset(x,y,key_x-1,1);  //决定哪一块区域发生按键捕获
				}
				break;
			}
	  }  
	}
	else if(key_x)  //每次从0开始 不记录上次的状态
	{
		Key_staset(x,y,key_x-1,0);
		key_x=0;
	} 
	return key; 
}

虚拟按键可供大家完成更加完备和体验感更好的功能开发

最后分享触摸屏虚拟按键的完整工程√

https://download.csdn.net/download/weixin_54057317/20430541

希望大家点个赞呀~

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-07-24 11:39:31  更:2021-07-24 11:41:48 
 
开发: 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年11日历 -2024/11/25 18:31:55-

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