基于STM32单片机的密码锁(Proteus仿真、程序)

基于STM32单片机的密码锁

功能描述:

由STM32F103单片机最小系统+ 4*4矩阵键盘+LCD1602液晶显示+蜂鸣器+继电器模块
1、采用STM32F103为主控芯片
2、通过4*4矩阵键盘实现密码输入、功能键等排列如下
1     2    3     删除
4     5    6     修改密码
7     8    9     重新输入
返回  0   确认   紧急开锁键
3、每按下一次按键蜂鸣器会有‘滴’提示音
4、按任意数字键键,进入密码输入界面 输入正确密码开锁,继电器打开,2秒都自动关锁;输入密码错误三次,系统锁死一分钟后才可再次尝试;
5、按“修改密码”键,进入密码修改界面,首先输入原始密码才可进行修改,输错三次同样锁死一分钟后才可再次修改密码。
6、按“删除”键可删除退格。
7、按“重新输入”键可重新输入。
8、按“紧急开锁”键可直接一键开锁并重置密码。

视频演示链接:

3、基于STM32单片机的密码锁

仿真图:

基于STM32单片机的密码锁(Proteus仿真、程序)_第1张图片

程序源码:


#include "delay.h"
#include "LCD1602.h" 
#include "key4.h"
#include "led.h"
#include "timer.h"
#include "dht11.h"
#include "password.h"

#include "stdio.h" 	
#include "stdlib.h" 	

int main(void)
{	
	char buf[18];
	unsigned char cnt=0;
	
	unsigned char key_value = 0;	//按键返回值
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);	//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
	Lcd1602_Init();									//液晶1602初始化

	
	Key_Init(); 			 		//矩阵按键初始化
	TIM2_Int_Init(499,7199);		//10Khz的计数频率,计数到500为50ms 
    LED_Init();		  				//初始化与控制设备连接的硬件接口

    Password_Right = 0;
 	while(1)
	{	
		Lcd1602_String(0,0," Password Lock !");
		if(Lock_Flag==1)						//键盘可用
		{
			cnt=KeyScan();						//扫描按键键值 值赋给cnt
			
			if(cnt!=0xff)  						//如果有按键按下
			{
				if(cnt>='0'&&cnt<='9')		  	//如果按下了0-9之间的数字键 则直接输入密码开锁
				{
					Beep_Alram(40);
					Password_Insert();			//输入密码
				}
				else if(cnt=='B')				//如果按下了'B'键	修改密码
				{
					Beep_Alram(40);
					Password_Changed();			//密码修改函数
				}
				else if(cnt=='D')				//如果按下了'D'键	紧急开锁并重置密码
				{
					Beep_Alram(40);
					Password_Open();
					Password_Right = 1;
				}
			}
			if(Password_Right==1)				//输入密码正确?
			{	
				Jd0_Set(GPIO_ON);			   	//开继电器
				Password_Right = 0;	  			//清除标志
				Lcd1602_String(0,0,"  Openning...   ");
				delay_ms(300);					//延时一会儿
				Jd0_Set(GPIO_OFF);				//关继电器 由于电磁锁不能长时间通电并且由于门锁的特性,并不需要一直开着继电器。
			}
			if(Password_Error3 == 1)			//密码输错误3次标志位
			{
				Password_Error3 = 0;			//清除标志
				Lock_Flag = 0;					//锁死键盘不可用
				TIM_Cmd(TIM2, ENABLE);  		//使能TIMx	使能中断
			}
		}
		else
		{
			Lcd1602_Write_Com(0xc0+1);		 	//第二行0xc0开头
			Lcd1602_Write_Data(0+0x30);
			Lcd1602_Write_Data(0+0x30);
			Lcd1602_Write_Data(':');
			Lcd1602_Write_Data(Sec/10+0x30);
			Lcd1602_Write_Data(Sec%10+0x30);
			if(Sec<=0)							//达到1分钟 后 键盘恢复
			{
				Sec = 60;
				Lcd1602_String(0,1,"                ");
				Lock_Flag = 1;					//键盘恢复可用
			}				
		}
		
	}	
}

软件免费下载地址:

1、Proteus仿真软件
文件内容:Proteus7.8安装包、Proteus8.6安装包、Proteus.8.10安装包、Proteus Professional 8.11 SP0安装包

链接:https://pan.baidu.com/s/11LNUZ9BJXWvXf1C4dPc3_w 
提取码:2756 


3、KEIL5 MDK软件(STM32开发软件)
链接:https://pan.baidu.com/s/1t3eY-3yRdTa7jZMlijq_jg 

提取码:ab58 

代码下载:

https://pan.baidu.com/s/1v-56waF5QUdZzMMlBYDD6Q?pwd=ockn

你可能感兴趣的:(项目合集,单片机,stm32,proteus)