视频演示:(有点粗糙,很多没细节没去弄了)

电子锁触摸屏

直接使用正点原子实验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学习记录——触摸屏虚拟按键相关推荐

  1. 基于STM32的TFT触摸屏虚拟按键

    TFT触摸屏虚拟按键功能展示 虚拟按键的代码是基于触摸屏的(这里触摸屏详细可以去看正点原子官方例程这里不过多赘述) 这里主要复习复习本例程中用到的LCD.触摸屏功能函数 并讲讲触摸屏虚拟按键相较于基础 ...

  2. android系统触摸屏虚拟按键

     (一)虚拟按键的描述可以见 韩超和梁泉的 <Android系统级深入开发--移植与调试>的第八章: 虚拟按键(Virtual Key)是Eclair版本开始增加的新特性.Virtual  ...

  3. STM32学习记录——光敏传感器的使用

    文章目录 前言 一.学习目的 二.模块介绍 三.代码记录 总结 前言 只做学习记录,记录自己如何从零学会使用一个模块,仅仅只是会用,缺乏专业知识.如果需要了解更多原理,可以从我推荐的技术大佬的文章中获 ...

  4. STM32学习记录--关于按键配置(PB3 PB4)

    目录 问题 解决方案 问题 有一个项目需要用到PB3与PB4配置成按键输入,这原理图的引脚配置可以看到,因为PB3和PB4在默认情况下是做JTAG调试用的.如果需要将其当普通GPIO使用,需要关闭JT ...

  5. STM32学习记录:输入捕获应用

    目录 前言 一.输入捕获的应用 1.1.测量脉宽或者频率 1.2.测量频率的步骤方法 1.3.测量脉宽的步骤方法 二. 输入捕获工作过程 2.1.CH1为例,输入捕获工作过程 2.2.输入通道 2.3 ...

  6. STM32学习记录——烟雾传感器的使用

    文章目录 前言 一.学习目的 二.模块介绍 三.代码记录 总结 前言 这次记录一下烟雾传感器的学习,由于烟雾传感器的资料比较杂,算法比较多,对我来说也比较难,所以我的代码中算法部分是不太具有参考价值, ...

  7. STM32学习记录0002-STM32初探

    一.为什么选择STM32 1.1 什么是STM32 是一种新的基于ARM内核的32位MCU系列 1.内核为ARM公司为要求高性能.低成本.低功耗的嵌入式专门设计的Cortex-M内核,是一种标准的AR ...

  8. STM32学习记录——声音传感器的使用

    文章目录 前言 一.学习目的 二.模块介绍 三.代码记录 前言 今天记录的是声音传感器模块的学习 一.学习目的 我的学习目的是学会使用声音传感器模块,并通过检测声音的有无控制LED的亮灭.我使用的是S ...

  9. 学习记录:TIM—电容按键检测

    目录 前言 一.电容按键原理 1.1.无手指触摸电容按键 1.2.有手指触摸电容按键 1.3.Vc 电压与充电时间关系 二.程序设计 2.1.设计思路 2.2.检测电容按键按下的具体过程 2.3.工程 ...

最新文章

  1. 双链表(插入节点操作)
  2. 为你详细解读HTTP请求头(header)的具体含意
  3. 史上赚钱最快的十位商业奇才,他1年赚10亿美金!
  4. python 多图一窗口 打乱列表排序
  5. inet_ntop函数和inet_pton函数
  6. 天天鉴宝联手网易智企,开创直播鉴定服务电商平台
  7. 【转】解决svn Authorization failed错误
  8. 得物App联合Zippo推出限量款打火机 首批开售十分钟即售罄
  9. 钢琴专业打谱软件 Overture 4.02
  10. 树莓派(0) : 树莓派4系统烧录、开机配置、网络连接、静态ip、开启root账号及ssh
  11. 文件服务器 配额,文件服务器配额邮件通知
  12. 一首记忆深刻的诗:《昭君出塞》
  13. 【智能手环APP for Android 】01 百度地图展示行动轨迹
  14. GPS RTK测量定位原理
  15. Android 读取本地Word/Pdf/Txt文件转文本输出
  16. 12306python源码抢票(亲测可用)
  17. 超详细的WMS仓储管理系统介绍——出库篇
  18. 周易六十四卦——蹇卦
  19. 发布订阅模式,在工作中它的能量超乎你的想象
  20. Ae 中英文版本切换批处理文件

热门文章

  1. 谈谈Xilinx UltraScale的6输入LUTS(查找表)和SLICE(二)
  2. qq空间做营销操作方法
  3. 华为荣耀路由如何虚拟服务器,华为荣耀路由Pro无线桥接怎么设置
  4. 纹理贴图找不到合适的?自学 Photoshop 2022 Mac版,试试PS制作常见纹理贴图
  5. Apaceh的访问控制 日志分割 分析
  6. Linux运维入门快捷命令设置说明大全
  7. npm ERR! cb() never called! npm ERR! This is an error with npm itself. Pleas
  8. Windows下编译安装SALOME
  9. Greedy:Stripes(POJ 1826)
  10. 白山云荣获信通院“2021年度SASE优秀案例”奖