毕设——基于STM32的智能密码锁

1. 单片机开发环境

KEIL5——百度网盘链接:点击此处
推荐微信搜索KEIL5下载,下载资源很多,自行搜索下载安装

2. 主要材料清单

STM32F103C8T6最小系统 x 1指纹模块 x 1
红外遥控收发模块 x 1HC-05蓝牙模块 x 1
0.96寸OLED屏幕 x 1继电器模块 x 1
矩阵键盘 x 112V-5V降压模块 x 1
J-LINK下载器 x 1USB-TTL x 1

3. 实物图

3.1 控制板实物图

在这里插入图片描述

3.2 控制板原理图

在这里插入图片描述

原理图PDF源文件:点击此处
注意:部分管脚可能连接错误,实际管脚连接与代码对应一致。

4. 代码

4.1 主控代码

int main(void)
{
	uint8_t i = 0 , error = 0;
	char shuzu[5];
	Device_Init();//初始化
	while (1)
	{
		if(KeyValueCount()){
			
			if(keyvalue == Enter){//确定键
				if(GateLockStates != 3){
					for(i = 0;i < 5;i++){
						if(PasswordNow[i] != PasswordBase[i]){
							error ++;
						}
					}
					if(error == 0 && PasswordLeight == 5){
						GateLockStates = 1;//密码正确
						memset(PasswordNow,0,5);
					}
					else{
						GateLockStates = 2;//密码错误
						memset(PasswordNow,0,5);
						error = 0;
					}
				}
				else{
					shuzu[0] = PasswordNow[0]+48;
					shuzu[1] = PasswordNow[1]+48;
					shuzu[2] = PasswordNow[2]+48;
					shuzu[3] = PasswordNow[3]+48;
					shuzu[4] = PasswordNow[4]+48;
					sprintf(TEXT_Buffer,"%c%c%c%c%c",shuzu[0],shuzu[1],shuzu[2],shuzu[3],shuzu[4]);
					STMFLASH_Write(FLASH_SAVE_ADDR,(u16*)TEXT_Buffer,5);
					STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)datatemp,5);
					PasswordBase[0] = datatemp[0]-48;
					PasswordBase[1] = datatemp[1]-48;
					PasswordBase[2] = datatemp[2]-48;
					PasswordBase[3] = datatemp[3]-48;
					PasswordBase[4] = datatemp[4]-48;
					GateLockStates = 4;
				}
			}
			else if(keyvalue == User){
				GateLockStates = 3;//修改密码
			}
			else if(keyvalue == Delete){//删除键
				if(PasswordLeight > 0){
					PasswordNow[PasswordLeight] = 0;
					PasswordLeight--;
					OLED_Clear();
				}
			}
			else if(keyvalue == Clear){//清除键
				memset(PasswordNow,0,5);
				PasswordLeight = 0;
				OLED_Clear();
			}
			else{
				ViewSign = 0;k=0;
				PasswordNow[PasswordLeight] = keyvalue;//数字键
				PasswordLeight++;
			}
		}
		else if(BTValueCount()){
			if(BTReadData == 11){
				for(i = 0;i < 5;i++){
					if(PasswordNow[i] != PasswordBase[i]){
						error ++;
					}
				}
				if(error == 0 && PasswordLeight == 5){
					GateLockStates = 1;//密码正确
					memset(PasswordNow,0,5);
					BTReadData = 99;
				}
				else{
					GateLockStates = 2;//密码错误
					memset(PasswordNow,0,5);
					error = 0;
					BTReadData = 99;
				}
			}
			else if(BTReadData == 12){
				if(PasswordLeight > 0){
					PasswordNow[PasswordLeight] = 0;
					PasswordLeight--;
					OLED_Clear();
					BTReadData = 99;
				}
			}
			else if(BTReadData == 13){
				memset(PasswordNow,0,5);
				PasswordLeight = 0;
				OLED_Clear();
				BTReadData = 99;
			}
			else{
				ViewSign = 0;k=0;
				PasswordNow[PasswordLeight] = BTReadData;//数字键
				BTReadData = 99;
				PasswordLeight++;
			}
		}
		else if(RemoteValueCount()){
			if(RemoteValue == 12){
				for(i = 0;i < 5;i++){
					if(PasswordNow[i] != PasswordBase[i]){
						error ++;
					}
				}
				if(error == 0 && PasswordLeight == 5){
					GateLockStates = 1;//密码正确
					memset(PasswordNow,0,5);
				}
				else{
					GateLockStates = 2;//密码错误
					memset(PasswordNow,0,5);
					error = 0;
				}
			}
			else if(RemoteValue == 10){
				if(PasswordLeight > 0){
					PasswordNow[PasswordLeight] = 0;
					PasswordLeight--;
					OLED_Clear();
				}
			}
			else if(RemoteValue == 11){
				memset(PasswordNow,0,5);
				PasswordLeight = 0;
				OLED_Clear();
			}
			else{
				ViewSign = 0;k=0;
				PasswordNow[PasswordLeight] = RemoteValue;//数字键
				PasswordLeight++;
			}
		}
		else if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8) == 1){
			if(++j >= 100){
				if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8) == 1){
					GateLockStates = 1;//密码正确
					memset(PasswordNow,0,5);
					j = 0;
				}
			}
		}
		Oled_Display();//屏幕显示
	}
}

4.2 代码烧录

完整代码下载:点击此处

魔术棒配置下载器,点击下载即可。不会下载,自行搜索教程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ElecMie丶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值