基于STM32的简易密码锁

前言:
朋友做毕设需要用到密码锁这个功能,帮忙设计了一个简单的。因为自己也忙于毕设,所以很多功能也没有完善。

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

实现功能:
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个引脚

实物图:
在这里插入图片描述

部分代码:
main.c文件

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

#include "stm32f10x.h" //STM32头文件
#include "system.h"
#include "SysTick.h"
#include "oled.h"
#include "stdio.h"
#include "stm32_flash.h"
#include "KEYPAD4x4.h"
#include "NVIC.h"
#include "usart.h"	
#include "mypwd.h"

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

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

	KEYPAD4x4_Init();//阵列键盘初始化
	KEYPAD4x4_INT_INIT();//阵列键盘的中断初始化
	
	//写入myPwd数组中的密码
	//STM32_FLASH_Write(STM32_FLASH_SAVE_ADDR,(u16*)myPwd,sizeof(myPwd));
	//delay_ms(1000);
	
	//读取密码,并存放在readPwd数组中
	STM32_FLASH_Read(STM32_FLASH_SAVE_ADDR,(u16*)readPwd,sizeof(readPwd));

	OLED_ShowString(0,16,(u8*)"input:",16);
	
	OLED_Refresh();  //更新显存到OLED	
	while(1)
	{	
		if(INT_MARK)  //按键按下,发生中断
		{
			if(modifyFlag==false) //中断标志位为1表示有按键中断
			{ 
				INT_MARK=0;     //标志位清0
				OLED_ShowString(0,16,(u8*)"input:",16);
				inputPwdFun();  //输入密码并显示
				jugePwdFun();    //判断输入的密码
			}

			else if(modifyFlag==true)
			{
				modifyPwdFun();  		//修改密码
			}
		}
		//delay_ms(1000); //延时会影响键盘的输入	
	}
}

最后:
需要源码的可以自行下载。代码下载链接
下载操作:
在这里插入图片描述

  • 26
    点赞
  • 312
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 38
    评论
基于stm32f103的密码锁是一种基于单片机技术的电子锁系统。该系统使用STM32F103单片机作为核心处理器,实现锁门和解锁的功能控制。 该密码锁系统主要由以下几个模块组成: 1. 键盘模块:通过按键输入密码,把按键输入与单片机进行连接,将输入的密码传输给单片机处理。 2. 显示模块:使用液晶显示屏,将密码输入和解锁结果以字符形式显示出来。 3. 存储模块:用于存储密码,在该模块中,可以将正确的密码预先设置并保存。 4. 控制模块:由单片机控制整个密码锁的工作流程,包括密码验证、门锁状态控制等。 在实际使用中,当用户通过键盘模块输入密码后,控制模块会首先从存储模块读取保存的正确密码进行比对。如果密码正确,控制模块会向显示模块发送密码正确的信息,并通过控制门锁电路进行解锁,使门打开。如果密码错误,显示模块会显示密码错误的信息,并不会进行解锁。 通过基于STM32F103的密码锁系统,可以实现对房间、仓库等的安全控制。相对于传统的机械锁,它具有使用方便、安全性高的优点。同时,基于单片机的设计和实现也使得该系统具有更强的可扩展性和灵活性,可以根据需求进行二次开发和优化。 总结起来,基于STM32F103的密码锁是一种智能安全锁系统,在现代社会中具有广泛的应用前景。
评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

⁽⁽ଘ晴空万里ଓ⁾⁾

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

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

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

打赏作者

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

抵扣说明:

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

余额充值