基于STM32设计的电子密码锁电路方案

您所在的位置:网站首页 stm32指纹密码锁设计全套资料 基于STM32设计的电子密码锁电路方案

基于STM32设计的电子密码锁电路方案

2024-07-16 22:34| 来源: 网络整理| 查看: 265

基于STM32设计的电子密码锁电路方案

STM32设计的电子密码锁 基于STM32设计的电子密码锁电路方案一级目录二级目录三级目录 设计介绍原理图1按键输入模块2.2 LCD显示模块2.3报警模块2.4开锁模块 PCB程序main函数 设计说明书器件清单资料清单资料下载链接

一级目录 二级目录 三级目录

(程序+原理图+PCB+设计说明书+视频讲解)

原理图PCB:Altium Designer

程序编译器:keil 5

编程语言:C语言

设计编号:C0059

设计介绍

STM32F103C8T6最小系统+LCD1602液晶+蜂鸣器+LED指示灯模块+继电器驱动模块+矩阵键盘模块+AT24C02芯片模块;

具体功能:

1.采用矩阵键盘输入、1602液晶显示、继电器模拟开锁;

2.六位数字密码(0-9),更改密码时需要先验证初始密码,初始密码正确,输入两次新密码,两次输入一致即更改密码成功;

3.开锁时密码输入错误,声光报警提示;

4.如修改的密码忘记,可以通过管理员重置;

imgimg

原理图 1按键输入模块

由于本设计所用到的按键数量较多而不适合用独立按键式键盘。采用的是矩阵式按键键盘,它由行和列组成,也称行列式键盘,按键位于行列的交叉点上,密码锁的密码由键盘输入完成,与独立式按键键盘相比,要节省很多I/O口。本设计中使用的这个4×4键盘不但能完成密码的输入还能作特别功能键使用。键盘的每个按键功能在程序设计中设置。它与单片机的连接如图2-2所示

img

2.2 LCD显示模块

显示部分由液晶显示器LCD1602取代普通的数码管完成。开锁时,按下键盘上的开锁按键后,利用键盘上的数字键0-9输入密码,每按下一个数字键后在显示器上显示一个*,输入多少位就显示多少个*。当密码输入完成时,按下确认键,如果输入的密码正确的话, LCD显示“DOOR OPEN”,单片机其中P2.0引脚会输出低电平,使三极管T2导通,电磁铁吸合,继电器开关跳转,电子密码锁被打开,如果密码不正确,LCD显示屏会显示“CODE WRONG”,P2.0输出的是高电平,电子密码锁不能打开。通过LCD显示屏,可以清楚地判断出密码锁所处的状态。电路图如图2.3所示。

img

2.3报警模块

报警部分由陶瓷压电发声装置及外围电路组成,加电后不发声,当有键按下时,“叮”声,每按一下,发声一次,密码正确时,响两声并开锁,当密码输入错误时,单片机的PC13引脚为高电平,三极管T3导通蜂鸣器发出噪声报警。如图2.4所示。

img

2.4开锁模块

开锁控制电路的功能是当输入正确的密码后将锁打开。系统使用单片机其中一引脚线发出信号,经三极管放大后,由继电器驱动电磁阀动作将锁打开。用户通过键盘任意设置密码,并储存在FLASH中作为锁码指令。开锁步骤如下:利用键盘上的数字键0-9输入密码,最后按下确认键。当用户输入密码后,单片机自动识别密码,如果密码不符,则报警。只有当密码正确,单片机才能使继电器处于开锁状态。具体电路如图2.5所示。

img

img

PCB

img

程序

img

main函数 #include "stm32f10x.h" #include "stm32f10x_gpio.h" #include "sys.h" #include "delay.h" #include "lcd.h" #include "led.h" #include "usart.h" #include "dht11.h" #include "key.h" #include "beep.h" #include #include "stmflash.h" #include "timer.h" #include "exit.h" #define ADDR_hum_up_1 0X0800b000 #define ADDR_hum_up_2 0X0800c000 int key=0; int j=0; u8 k1_flag=1; u8 k2_flag=1; u8 k3_flag=1; u8 k4_flag=1; int setpass_flag11=1;//标识正在设置密码,继电器不关闭 int err3_flag=1; int i=0; int djtime_flag=360; int down_flag=0; static u8 key_up=1;//不支持连按 u8 open_flag=1;//用于标识是否是系统的第一次打开 u8 pass_shuru=0; u8 setpassword_flag=0; u8 setopen_flag=1;//用于标识开机之后是否打开过 u8 setpass_flag=0;//当密码设置成功之后的标志位 u8 err_flag=0;//输出错误次数记录标志位 u8 errtime_flag=0;//用于错误之后延时并重置屏幕的标志位 u8 beep_flag=1;//用于标识当按键按下,蜂鸣器滴一声的时间 u8 password[]={9,9,9,9,9,9};;//记录输入的密码 u8 setpassword1[6]={1,1,1,1,1,1};//设置密码的存放位置 u8 setpassword2[6];//设置密码的存放位置 static u8 ok_flag=0;//记录每次判断密码有几位正确 u8 flag16=1;//标志按键16是第几次按下,做相应的动作 u8 cspassword[]={0,0,0,0,0,0}; u8 cjpassword[]={1,3,1,4,2,0}; u8 table0[]="===Coded Lock==="; u8 table1[]="password: "; u8 table2[]=" open "; u8 table3[]=" error "; u8 table4[]="SetNewWordEnable"; u8 table5[]="input again "; u8 table6[]="ResetPassword OK"; u8 flash1[]={0}; u8 flash2[]={1,0,0,0,0,0}; void show1(void) { LCD1602_Show_dat(0,1,table1[0]); LCD1602_Show_dat(1,1,table1[1]); LCD1602_Show_dat(2,1,table1[2]); LCD1602_Show_dat(3,1,table1[3]); LCD1602_Show_dat(4,1,table1[4]); LCD1602_Show_dat(5,1,table1[5]); LCD1602_Show_dat(6,1,table1[6]); LCD1602_Show_dat(7,1,table1[7]); LCD1602_Show_dat(8,1,table1[8]); LCD1602_Show_dat(9,1,table1[9]); for(j=0;j


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3