基于STM32的简易密码锁

本文介绍了使用STM32F103C8T6单片机和4x4矩阵键盘实现的密码锁系统,具备密码保存、修改、扫码开锁功能。通过OLED显示屏显示操作流程,展示了包括A、B、C、D按键在内的基本操作和密码管理。适合初学者了解嵌入式编程与硬件交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

实现功能:
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); //延时会影响键盘的输入	
	}
}

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

评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

⁽⁽ଘ晴空万里ଓ⁾⁾

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

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

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

打赏作者

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

抵扣说明:

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

余额充值