你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32的简易密码锁

[复制链接]
STMCU小助手 发布时间:2022-12-28 16:00
前言:
朋友做毕设需要用到密码锁这个功能,帮忙设计了一个简单的。因为自己也忙于毕设,所以很多功能也没有完善。

有兴趣的朋友可以看下这个,也能实现扫码开锁功能 扫码点灯

实现功能:

1、密码保存到STM32内部flash中,掉电不丢失。
2、 通过按键修改密码

简易密码锁功能说明:
4位密码 密码全是数字和非0值
A按键:展示密码
B按键:撤销1位数字
C按键:清屏
D按键:进入和退出修改密码

所需材料:
1、stm32f103c8t6单片机
2、4*4矩阵键盘
3、OLED显示屏
4、ST-LINK下载器

接线事项:
OLED显示屏:VCC–3V3 GND–GND SCL–PB5 SDA–PB7
矩阵键盘:PA0~PA7的8个引脚

实物图:

bd27de6ba89d4f6b9cf2163cc51464e4.jpg


部分代码:
main.c文件
  1. /*
  2. 简易密码锁功能说明:
  3. 4位密码
  4. 密码全是数字和非0值
  5. A按键展示密码
  6. B按键退格
  7. C按键清屏
  8. D按键进入和退出修改密码
  9. */

  10. #include "stm32f10x.h" //STM32头文件
  11. #include "system.h"
  12. #include "SysTick.h"
  13. #include "oled.h"
  14. #include "stdio.h"
  15. #include "stm32_flash.h"
  16. #include "KEYPAD4x4.h"
  17. #include "NVIC.h"
  18. #include "usart.h"       
  19. #include "mypwd.h"

  20. //已放在system.h文件中
  21. //#define STM32_FLASH_SAVE_ADDR  0X08009990                //设置FLASH 保存地址(必须为偶数,且其值要大于本代码所占用FLASH的大小+0X08000000)

  22. char dataBuf1[16];                   //数据缓冲区
  23. unsigned char myPwd[4]={1,2,3,4};    //第一次要写入的密码   
  24. unsigned char readPwd[4]={0};       //从flash中读取的密码存放于此
  25. unsigned char inputPwdArr[4]={0};  //用户输入的密码存放于此
  26. unsigned char newPwdArr[4]={0};    //新密码存放于此
  27. u8 g_count = 0;     //密码位数,目前4位密码
  28. u16 inputPwd = 0;   //输入的密码值  
  29. bool modifyFlag = false;  //修改密码的标志
  30. //主程序
  31. int main (void)
  32. {
  33.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中断优先级分组 分2组
  34.         SysTick_Init(72);
  35.         OLED_Init();
  36.         OLED_Clear();
  37.         INT_MARK=0;//中断标志位清0

  38.         KEYPAD4x4_Init();//阵列键盘初始化
  39.         KEYPAD4x4_INT_INIT();//阵列键盘的中断初始化
  40.        
  41.         //写入myPwd数组中的密码
  42.         //STM32_FLASH_Write(STM32_FLASH_SAVE_ADDR,(u16*)myPwd,sizeof(myPwd));
  43.         //delay_ms(1000);
  44.        
  45.         //读取密码,并存放在readPwd数组中
  46.         STM32_FLASH_Read(STM32_FLASH_SAVE_ADDR,(u16*)readPwd,sizeof(readPwd));

  47.         OLED_ShowString(0,16,(u8*)"input:",16);
  48.        
  49.         OLED_Refresh();  //更新显存到OLED       
  50.         while(1)
  51.         {       
  52.                 if(INT_MARK)  //按键按下,发生中断
  53.                 {
  54.                         if(modifyFlag==false) //中断标志位为1表示有按键中断
  55.                         {
  56.                                 INT_MARK=0;     //标志位清0
  57.                                 OLED_ShowString(0,16,(u8*)"input:",16);
  58.                                 inputPwdFun();  //输入密码并显示
  59.                                 jugePwdFun();    //判断输入的密码
  60.                         }

  61.                         else if(modifyFlag==true)
  62.                         {
  63.                                 modifyPwdFun();                  //修改密码
  64.                         }
  65.                 }
  66.                 //delay_ms(1000); //延时会影响键盘的输入       
  67.         }
  68. }
复制代码

最后:
下载操作:

5c3a05c4a8994abfa7d697da42696970.png

————————————————
版权声明:⁽⁽ଘ晴空万里ଓ⁾⁾


收藏 评论0 发布时间:2022-12-28 16:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版