stm32 oled密码器,内含完整版可烧录文件

STM32密码器代码(校级单片机大赛当场从0到1原创)

2020.12.5,题目是通过oled模块做一个简易的游戏机。

##功能实现要求如下:

  1. 初始界面显示单片机大赛D01组,然后要写一个按键6位密码锁;
    要求密码锁每输入一个按键值则屏幕显示一个 “*”,按A键位为确定,按B键为退格
  2. 界面转换,解锁之后可以按键4选择音乐播放界面,然后选择音乐,要求有三种音乐,按相应的键位值可以用蜂鸣器播放,按B可以退回上层菜单;
  3. 解锁之后按6则为选择游戏界面,按A开始贪吃蛇小游戏,B键位返回上一菜单

密码锁部分

由于小组有四位同学,我负责的任务是oled的显示部分。所以这部分函数的代码是我来写的,其余部分其他同学写,所以就先只更新这么多。

逻辑构思

代码的思路大概是执行一个while死循环,不断检测键位值,然后把键位的值存储到一个密码数组keymima【】里,而正确密码储存在mima【】数组里,赋好值最后进行对比。而至于在屏幕上显示字符*,是用另一个数组X【m】,通过OLED_ShowString函数进行打印 *。

具体判断条件?

*按键有1-9九个键位用于输入密码,A作为确定按钮,B作为退格按钮。

当屏幕上的小于6个的时候,按下1-9的时候,将键位赋给数组keymima【】;
的数量等于6的时候,再输入密码直接显示密码错误回到密码输入阶段,即屏幕上什么都没有的状态,等待输入,所以这里要清空所有数组并且重新初始化。

OLED_ShowPicture(0,0,128,8,wrong_key);
								 delay_ms(800);
							//清屏
							OLED_Clear();		
							OLED_Refresh();
              x[0]=5;								 
							m=0;
							for(j=0;j<20;j++)
							keymima[j]=0;
							j=1;
							//将密码数组和画*位置数组都初始化
							continue;

当*不超过6个的时候,按下B键位会退格,即删去前一个星号,并且将画“雪花号数组的位置前置,把密码数组keymima中的最后一个值置0。
这里我们最开始用的是keymima数组j不断+1,当B按下那么就会将当前值变为0,而j++,继续下面的存储,然后在密码比对的时候,将keymima数组不为0的值全部提取放到另一个数组里,然后进行和正确密码数组的必对。
后来发现没有必要,直接将j–,这样下次的keymima数组存储数据的时候就会进行对最后一位的覆盖,直接将keymima数组和正确密码数组比对就行了。

	if(scan1==12)//B	
		{int extern j;
			m=m-1 ;
      OLED_Clearzf(x[m],25,13,13);
			OLED_Refresh();
			keymima[j]=0;
			j--;
		} 			

3.至于x【m】可以自己做初始化,自己选择间隔就可以了。这样就能画出间隔平均美观的雪花号了。

4.最后,

遍历大法好。

在这里插入图片描述
这里放了一个完整版的例程可供烧录:
链接:https://pan.baidu.com/s/1C-2ktrw9nMDWBfa1QEiUfA
提取码:saan
复制这段内容后打开百度网盘手机App,操作更方便哦

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

河马小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值