本文采用7针脚0.96的OLED屏作为输出显示,以矩形按键作为输入,做一个简易的密码锁。
不同于其他文章,本文所介绍的密码锁,就单纯使用OLED屏与矩形按键,但由于本人也是初学者,还有一些功能没有实现,目前本工程仅实按键输入、OLED屏输出以及一个密码判断。
源码链接:https://pan.baidu.com/s/1E82SN-HPMLp5h7-E-d7T1Q?pwd=vk7n
提取码:vk7n
目录
一、硬件接线
1、矩形按键
本文采用的是4*4的矩形按键,关于矩形按键详细大家可以看我先前发布的这篇文章:STM32矩形(矩阵)按键(键盘)输入控制LED灯 ——4*4矩阵按键源码解析-CSDN博客
在这里矩形按键接在GPIOA中,具体接线也跟上篇文章相同。
2、OLED显示屏
OLED屏作为本实验显示输出,详细使用的内容可参考上一篇文章:STM32+7针脚0.96OLED屏显示数字汉字符号英文(入门级)-CSDN博客
本文OLED屏接线也与上一篇文章相同,如下
二、思路讲解
本文实现的功能是在矩形按键上输0~9十位数,然后进行一个确认密码,若密码错误,提示后3s重新回到输入密码那块。
矩形按键S1~S9分别对应输入1~9,S10输入0,S11在输入密码时,可以进行删除单个密码,但密码输入完后按下S12进行确定密码。
一开始我的想法是每输入一个密码数字,就将其输出到显示屏上,确认密码时,只要将显示屏输出的数跟正确密码进行对比即可,但在单独删除密码单位数时出现了问题,而且OLED屏官方提供的代码中也没有读取显示内容的功能。
后面我采用数组的方法来存储输入密码,然后修改官方提供的OLED屏中的OLED_clear()清屏函数块,将其该成对某行进行清屏,然后每次输入完密码后执行清屏再重新遍历数组进行显示,删除功能的话就是将最后一位置0后再将数组现有的长度减1,这样就完成了输入功能。
但是由于本人也是C的初学者,所以在设定密码时,本来是打算用字符串的,但keil中好像没有string这个定义,后面就用了数组代替。确定密码时则是使用遍历对两个数组对应的元素进行对比。
三、代码介绍
1、文件总体介绍
文件中key.c为矩形按键的驱动函数文件,矩形按键的引脚定义及扫描识别等均在这个文件中;OLED.c为显示屏的驱动文件,同样的里面是引脚的定义跟驱动函数,这个官方有提供,我这是在官方的基础上增多一个OLED_delete()某行清屏函数。user.c为自定义的一些子函数段文件,里面主要是连续显示汉字、按键输入值等函数。
同样的这里将所有的声明函数放在了main.h文件中。
2、代码介绍
在user.c中可以看到有以下内容,这个设定密码是采用数组的方式,如果大家有兴趣,可以完善这个实验,可以由输入来修改密码。
由于官方提供的汉字输出只能时每次调用输入一个,所以这个我定义了一个函数,可以一次性输入多个汉字。
在主函数中,这里是将按键输入放在了while循环中,然后给一个变量pdz(默认为1),但密码输入正确后将变量pdz赋值为0,结束这个循环。故这个实验也有没密码正确后可以退出到返回界面的功能。
其余的代码大家有兴趣可以在文章开头处百度网盘链接下载源码进行查看,源码内大部分的内容我都有进行注释。
四、现象展示
stm32矩形按键7针脚oled屏密码锁
文章中的实验还有许多待完善的功能,如输入密码显示为***等,大家有兴趣也可做优化。
本人也是stm32的初学者,对于本实验的思路,如果大家有更好的建议也希望大家多多指点。
若文章中有错误的地方也请大家多多指正!!!