STM32学习记录——触摸屏虚拟按键
视频演示:(有点粗糙,很多没细节没去弄了)
电子锁触摸屏
直接使用正点原子实验26触摸屏实验进行添加:
这里借用了博客基于STM32的TFT触摸屏虚拟按键_鱼鱼不秃头的博客-CSDN博客_stm32触摸屏设置按键的代码
①设置显示界面
只需根据你所用lcd的大小来改变参数即可;
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);LCD_DrawRectangle(x,y-46,x+240,y+150);LCD_ShowString(x+5, y-30, 200, 16, 16,"secret = "); POINT_COLOR=BLUE;for(i=0;i<15;i++){//if(i==1) //":"不需要中间显示LCD_ShowString(x+(i%3)*80+2,y+7+30*(i/3),40,16,16,(u8*)keycontent[i]); //else//Show_Str_Mid(x+(i%3)*80,y+7+30*(i/3),(u8*)keycontent[i],16,80);} }
②设置按键显示存储函数
// x, y 为显示的初始坐标, keyx, keyy 为触摸坐标
void Press_down_Fill(u16 x, u16 y, int keyx, int keyy)
{int i, j, status, ii1, ii2, jj1, jj2;int ret=0, mean, del=0, enter=0, a, b;i = keyx / 80;j = (keyy - 150) / 30;ii1 = x+80*i;jj1 = y+30*j;ii2 = x+80*(i+1);jj2 = y+30*(j+1);status = j*3 + i + 1;if (keyy>150&&keyy<300){if(tp_dev.sta&TP_PRES_DOWN){LCD_Fill(ii1+2, jj1+2, ii2-2, jj2-2, GREEN); POINT_COLOR=BLUE;LCD_ShowString(ii1+2, jj1+7, 40, 16, 16, (u8*)keycontent[status-1]);delay_ms(500);LCD_Fill(ii1+2, jj1+2, ii2-2, jj2-2, WHITE); POINT_COLOR=BLUE;LCD_ShowString(ii1+2, jj1+7, 40, 16, 16, (u8*)keycontent[status-1]);tp_dev.x[0] = 65536;tp_dev.y[0] = 65536;}/*else{LCD_Fill(ii1+2, jj1+2, ii2-2, jj2-2, WHITE); POINT_COLOR=BLUE;LCD_ShowString(ii1+2, jj1+7, 40, 16, 16, (u8*)keycontent[status-1]);tp_dev.x[0] = 65536;tp_dev.y[0] = 65536;}*/switch(status-1){case 0: ret = 1; break;case 3: mean = 1; break;case 4: mean = 2; break;case 5: mean = 3; break;case 6: mean = 4; break;case 7: mean = 5; break;case 8: mean = 6; break;case 9: mean = 7; break;case 10: mean = 8; break;case 11: mean = 9; break;case 12: del = 1; break;case 13: mean = 0; break;case 14: enter = 1; break;}if (ret == 1){for(a=0;a<=num;a++)input[a] = 0;num = 0;LCD_Fill(70, 110, 180, 140, WHITE);ret = 0;}else if (del == 1){num = num-1;input[num] = ' '; //LCD_ShowNum(80+num*10, 120, 0, 1, 16);LCD_Fill(80+num*10, 110, 180, 140, WHITE);del = 0;}else if (enter == 1){for(a=0;a<num;a++){if (secret[a] == input[a]){bingo = 1;LCD_ShowString(100, 90, 200, 16, 16,"secret yes"); }else {bingo = 0;LCD_ShowString(100, 90, 200, 16, 16,"secret no"); }}num = 0;enter = 0;}else{LCD_ShowNum(60, 90, num, 1, 16);LCD_ShowNum(70, 90, num, 1, 16);input[num] = mean;switch(num){case 0: LCD_ShowNum(60+20, 120, input[num], 1, 16); break;case 1: {LCD_ShowNum(60+20, 120, input[0], 1, 16);LCD_ShowNum(70+20, 120, input[num], 1, 16);} break;case 2: {LCD_ShowNum(60+20, 120, input[0], 1, 16);LCD_ShowNum(70+20, 120, input[1], 1, 16);LCD_ShowNum(80+20, 120, input[num], 1, 16);} break;case 3: {LCD_ShowNum(60+20, 120, input[0], 1, 16);LCD_ShowNum(70+20, 120, input[1], 1, 16);LCD_ShowNum(80+20, 120, input[2], 1, 16);LCD_ShowNum(90+20, 120, input[num], 1, 16);} break;case 4: {LCD_ShowNum(60+20, 120, input[0], 1, 16);LCD_ShowNum(70+20, 120, input[1], 1, 16);LCD_ShowNum(80+20, 120, input[2], 1, 16);LCD_ShowNum(90+20, 120, input[3], 1, 16);LCD_ShowNum(100+20, 120, input[num], 1, 16);} break;case 5: {LCD_ShowNum(60+20, 120, input[0], 1, 16);LCD_ShowNum(70+20, 120, input[1], 1, 16);LCD_ShowNum(80+20, 120, input[2], 1, 16);LCD_ShowNum(90+20, 120, input[3], 1, 16);LCD_ShowNum(100+20, 120, input[4], 1, 16);LCD_ShowNum(110+20, 120, input[num], 1, 16);} break;case 6: {LCD_ShowNum(60+20, 120, input[0], 1, 16);LCD_ShowNum(70+20, 120, input[1], 1, 16);LCD_ShowNum(80+20, 120, input[2], 1, 16);LCD_ShowNum(90+20, 120, input[3], 1, 16);LCD_ShowNum(100+20, 120, input[4], 1, 16);LCD_ShowNum(110+20, 120, input[5], 1, 16);LCD_ShowNum(120+20, 120, input[num], 1, 16);} break;case 7: {LCD_ShowNum(60+20, 120, input[0], 1, 16);LCD_ShowNum(70+20, 120, input[1], 1, 16);LCD_ShowNum(80+20, 120, input[2], 1, 16);LCD_ShowNum(90+20, 120, input[3], 1, 16);LCD_ShowNum(100+20, 120, input[4], 1, 16);LCD_ShowNum(110+20, 120, input[5], 1, 16);LCD_ShowNum(120+20, 120, input[6], 1, 16);LCD_ShowNum(130+20, 120, input[num], 1, 16);} break;case 8: {LCD_ShowNum(60+20, 120, input[0], 1, 16);LCD_ShowNum(70+20, 120, input[1], 1, 16);LCD_ShowNum(80+20, 120, input[2], 1, 16);LCD_ShowNum(90+20, 120, input[3], 1, 16);LCD_ShowNum(100+20, 120, input[4], 1, 16);LCD_ShowNum(110+20, 120, input[5], 1, 16);LCD_ShowNum(120+20, 120, input[6], 1, 16);LCD_ShowNum(130+20, 120, input[7], 1, 16);LCD_ShowNum(140+20, 120, input[num], 1, 16);} break;case 9: {LCD_ShowNum(60+20, 120, input[0], 1, 16);LCD_ShowNum(70+20, 120, input[1], 1, 16);LCD_ShowNum(80+20, 120, input[2], 1, 16);LCD_ShowNum(90+20, 120, input[3], 1, 16);LCD_ShowNum(100+20, 120, input[4], 1, 16);LCD_ShowNum(110+20, 120, input[5], 1, 16);LCD_ShowNum(120+20, 120, input[6], 1, 16);LCD_ShowNum(130+20, 120, input[7], 1, 16);LCD_ShowNum(140+20, 120, input[8], 1, 16);LCD_ShowNum(150+20, 120, input[num], 1, 16);} break;}num++;delay_ms(2000);if (num==10)num = 0;}}
}
其中 tp_dev.x[x]、tp_dev.y[y] 为触摸坐标,点击数字按钮可以输入十位以内的密码,若与设置的密码相同则密码正确,显示“secret yes”,否则“secret no”,要注意TFT时电阻屏,博主一开始在测试的时候,将许多显示代码写到了电容屏测试函数中,导致没有任何测试效果,还卡了一会。在显示密码的时候直接用了笨办法,就是输入的几位数字就显示几位。
STM32学习记录——触摸屏虚拟按键相关推荐
- 基于STM32的TFT触摸屏虚拟按键
TFT触摸屏虚拟按键功能展示 虚拟按键的代码是基于触摸屏的(这里触摸屏详细可以去看正点原子官方例程这里不过多赘述) 这里主要复习复习本例程中用到的LCD.触摸屏功能函数 并讲讲触摸屏虚拟按键相较于基础 ...
- android系统触摸屏虚拟按键
(一)虚拟按键的描述可以见 韩超和梁泉的 <Android系统级深入开发--移植与调试>的第八章: 虚拟按键(Virtual Key)是Eclair版本开始增加的新特性.Virtual ...
- STM32学习记录——光敏传感器的使用
文章目录 前言 一.学习目的 二.模块介绍 三.代码记录 总结 前言 只做学习记录,记录自己如何从零学会使用一个模块,仅仅只是会用,缺乏专业知识.如果需要了解更多原理,可以从我推荐的技术大佬的文章中获 ...
- STM32学习记录--关于按键配置(PB3 PB4)
目录 问题 解决方案 问题 有一个项目需要用到PB3与PB4配置成按键输入,这原理图的引脚配置可以看到,因为PB3和PB4在默认情况下是做JTAG调试用的.如果需要将其当普通GPIO使用,需要关闭JT ...
- STM32学习记录:输入捕获应用
目录 前言 一.输入捕获的应用 1.1.测量脉宽或者频率 1.2.测量频率的步骤方法 1.3.测量脉宽的步骤方法 二. 输入捕获工作过程 2.1.CH1为例,输入捕获工作过程 2.2.输入通道 2.3 ...
- STM32学习记录——烟雾传感器的使用
文章目录 前言 一.学习目的 二.模块介绍 三.代码记录 总结 前言 这次记录一下烟雾传感器的学习,由于烟雾传感器的资料比较杂,算法比较多,对我来说也比较难,所以我的代码中算法部分是不太具有参考价值, ...
- STM32学习记录0002-STM32初探
一.为什么选择STM32 1.1 什么是STM32 是一种新的基于ARM内核的32位MCU系列 1.内核为ARM公司为要求高性能.低成本.低功耗的嵌入式专门设计的Cortex-M内核,是一种标准的AR ...
- STM32学习记录——声音传感器的使用
文章目录 前言 一.学习目的 二.模块介绍 三.代码记录 前言 今天记录的是声音传感器模块的学习 一.学习目的 我的学习目的是学会使用声音传感器模块,并通过检测声音的有无控制LED的亮灭.我使用的是S ...
- 学习记录:TIM—电容按键检测
目录 前言 一.电容按键原理 1.1.无手指触摸电容按键 1.2.有手指触摸电容按键 1.3.Vc 电压与充电时间关系 二.程序设计 2.1.设计思路 2.2.检测电容按键按下的具体过程 2.3.工程 ...
最新文章
- 双链表(插入节点操作)
- 为你详细解读HTTP请求头(header)的具体含意
- 史上赚钱最快的十位商业奇才,他1年赚10亿美金!
- python 多图一窗口 打乱列表排序
- inet_ntop函数和inet_pton函数
- 天天鉴宝联手网易智企,开创直播鉴定服务电商平台
- 【转】解决svn Authorization failed错误
- 得物App联合Zippo推出限量款打火机 首批开售十分钟即售罄
- 钢琴专业打谱软件 Overture 4.02
- 树莓派(0) : 树莓派4系统烧录、开机配置、网络连接、静态ip、开启root账号及ssh
- 文件服务器 配额,文件服务器配额邮件通知
- 一首记忆深刻的诗:《昭君出塞》
- 【智能手环APP for Android 】01 百度地图展示行动轨迹
- GPS RTK测量定位原理
- Android 读取本地Word/Pdf/Txt文件转文本输出
- 12306python源码抢票(亲测可用)
- 超详细的WMS仓储管理系统介绍——出库篇
- 周易六十四卦——蹇卦
- 发布订阅模式,在工作中它的能量超乎你的想象
- Ae 中英文版本切换批处理文件
热门文章
- 谈谈Xilinx UltraScale的6输入LUTS(查找表)和SLICE(二)
- qq空间做营销操作方法
- 华为荣耀路由如何虚拟服务器,华为荣耀路由Pro无线桥接怎么设置
- 纹理贴图找不到合适的?自学 Photoshop 2022 Mac版,试试PS制作常见纹理贴图
- Apaceh的访问控制 日志分割 分析
- Linux运维入门快捷命令设置说明大全
- npm ERR! cb() never called! npm ERR! This is an error with npm itself. Pleas
- Windows下编译安装SALOME
- Greedy:Stripes(POJ 1826)
- 白山云荣获信通院“2021年度SASE优秀案例”奖