智能电子密码锁毕业设计

2023-11-16 16:18:00 来源 : haohaofanwen.com 投稿人 : admin

下面是好好范文网小编收集整理的智能电子密码锁毕业设计,仅供参考,欢迎大家阅读!

智能电子密码锁毕业设计

一、基本介绍

项目名:

基于单片机的电子密码锁系统设计

基于单片机的智能锁系统设计

基于单片机的多功能锁系统设计

基于单片机的智能门锁系统设计

项目名:电子密码锁

单片机类型:STC89C52

具体功能:

1、通过4*4的矩阵键盘中的0-9为数字键,*为删除键,#为确定键,A为重置密码键,B为一键还原密码键

2、重置密码过程:管理员密码–>旧密码–>新密码–>再次新密码

3、一键还原:输入管理员密码,直接还原密码123456

4、通过AT24C02存储密码,实现掉电保存密码

5、当输入密码错误次数大于等于3次,进行锁定键盘3分钟,在此期间,每按一次按键都会蜂鸣器报警

6、通过继电器控制门磁锁,模拟开门和关门

7、通过显示屏显示输入的密码(*号表示,防止被偷看),另外,输入密码可以前后加入扰乱码,只要包含正确密码即可

扩展功能:通过蓝牙模块可手机端输入密码

二、资 料总览

实物资料

仿真资料

三、51单片机部分资料展示

1、实物图展示

单片机型号:STC89C52

供电接口:TYPE-C

板子类型:PCB集成板,厚度1.2,两层板(上下层覆铜接地)

器件类型:元器件基本上为插针式,个别降压芯片会使用贴片式。

2、仿真图展示

仿真软件版本:proteus8.9

电路连线方式:网络标号连线方式

注意:部分实物元器件仿真中没有,仿真中会用其他工作原理相似的元件代替,这样可能导致实物程序和仿真程序不一样

3、原理图展示

软件版本:AD2013

电路连线方式:网络标号连线方式

注意:原理图只是画出了模块的引脚图,而并不是模块的内部结构图

4、PCB图展示

由原理图导出,中间有一个项目编号,隐藏在单片机底座下,插入单片机后不会看到。

两层板,上下覆铜接地。

四、32单片机部分资料展示

1、实物图展示

单片机型号:STM32F103C8T6

供电接口:TYPE-C

板子类型:PCB集成板,厚度1.2,两层板(上下层覆铜接地)

器件类型:元器件基本上为插针式,个别降压芯片会使用贴片式。

2、原理图展示

软件版本:AD2013

电路连线方式:网络标号连线方式

注意:原理图只是画出了模块的引脚图,而并不是模块的内部结构原理图

3、PCB图展示

由原理图导出,中间有一个项目编号,隐藏在单片机底座下,插入单片机后不会看到。

两层板,上下覆铜接地。

五、系统框图

绘制软件:VISIO

本设计以单片机为核心控制器,加上其他模块一起组成此次设计的整个系统,其中包括中控部分、输入部分和输出部分。中控部分采用了单片机控制器,其主要作用是获取输入部分的数据,经过内部处理,逻辑判断,最终控制输出部分。输入由三部分组成,第一部分是按键模块,通过该模块可以输入密码、设置密码等;第二部分是供电模块,通过该模块可给整个系统进行供电。输出由三部分组成,第一部分是显示模块,通过该模块可以显示当前操作相关的提示信息;第二部分是继电器模块,通过一个继电器控制门磁锁的开关;第三部分是声音报警模块,当键盘锁定如仍有按下时进行声音报警。除此之外,蓝牙模块和存储芯片既作为输入又作为输出,存储芯片用来储存当前设定的密码,当断电时密码不会丢失;蓝牙模块和手机进行连接,可以将当前操作的提示信息传输到用户手机端,用户也可以通过手机端来输入及设置密码。具体系统框图如图3.1所示。

六、部分程序展示

软件版本:keil5

注意:逻辑程序和驱动程序分开,分布于main.c和其他.c文件

按键函数Key_function	u8 i uart_data 	key_num =Chiclet_Keyboard_ScanUSART1_WaitRecive		uart_data = usart1_bufkey_num  uart_data //当有按键按下时flag_key_en 			BEEP delay_ms			BEEP key_num //按键A:key_num //按键B:key_num  uart_data //按键C:一键还原密码{				flag_reset_password 				password_num Oled_Clear_AllOled_ShowCHinese"还原密码");Oled_ShowCHinese"管理员:");UsartPrintf(USART1,"rn还原密码");UsartPrintf(USART1,"rn管理员:"key_num  uart_data //按键D:重新设置密码{				flag_reset_password 				password_num Oled_Clear_AllOled_ShowCHinese"设置密码");Oled_ShowCHinese"管理员:");UsartPrintf(USART1,"rn设置密码");UsartPrintf(USART1,"rn管理员:"key_num  uart_data //按键 * :删除password_num 					password_num--;Oled_ShowCharpassword_numkey_num  uart_data //按键 # :确认{Oled_Clear_AllEnsure_functionkey_num<12&& key_num key_numuart_data >='0'&& uart_data //按下的是数字键key_num 					key_num =(key_numkey_num					key_num uart_data >='0'&& uart_data 					key_num = uart_datapassword_num //当输入的密码少于12位时,接受输入并保存flag_reset_password  flag_reset_password 						password_input[password_num key_num;//将数字键的码赋值给password_input数组暂存password_num //设置新密码时,只能输入6位flag_reset_password 							password_reset[password_num key_num;//将数字键的码赋值给password_reset数组暂存else							password_input[password_num key_numi i < password_num;i++)Oled_ShowChari//输入数据位数大于12后,忽略前方输入{					password_num i  i  i						password_input[i]= password_input[i					password_input[i]= key_num/***********确认函数*****/voidEnsure_function temp_source temp_sub  u8 i i i i++)//将输入的密码暂存{    temp_source[i]= password_input[ii i i++)//将需要被对比的密码暂存flag_reset_password  flag_reset_password       temp_sub[i]= password[iflag_reset_password  flag_reset_password       temp_sub[i]= admipassword[iflag_reset_password       temp_sub[i]= password_reset[iflag_reset_password //不是重置密码模式strstr(temp_source,temp_sub//用户密码与输入密码相同,进行开门{Oled_ShowCHineseOled_ShowCHinese"门已打开");UsartPrintf(USART1,"rn门已打开");			DOOR delay_msdelay_ms			DOOR Oled_ShowString"        ");Oled_ShowCHinese			flag_error_num memset(password_input//用户密码与输入密码不相同,错误次数+1{Oled_ShowCHineseOled_ShowCHinese"密码错误");UsartPrintf(USART1,"rn密码错误");delay_msOled_ShowString"        ");Oled_ShowCHinese			flag_error_num++;memset(password_inputflag_reset_password //重置密码模式1strstr(temp_source,temp_sub//管理员密码与输入密码相同,进入输入旧密码界面{Oled_ShowCHinese"设置密码");Oled_ShowCHinese"密码正确");UsartPrintf(USART1,"rn密码正确");delay_msOled_ShowCHinese"设置密码");Oled_ShowCHinese"旧密码:");UsartPrintf(USART1,"rn旧密码:");			flag_reset_password++;			flag_error_num memset(password_input//管理员密码与输入密码不相同,错误次数+1{Oled_ShowCHinese"密码错误");UsartPrintf(USART1,"rn密码错误");delay_msOled_ShowCHinese"设置密码");Oled_ShowCHinese"管理员:");UsartPrintf(USART1,"rn管理员:");			flag_error_num++;memset(password_inputflag_reset_password //重置密码模式2strstr(temp_source,temp_sub//旧密码与输入密码相同,进入输入新密码界面{Oled_ShowCHinese"设置密码");Oled_ShowCHinese"密码正确");UsartPrintf(USART1,"rn密码正确");delay_msOled_ShowCHinese"设置密码");Oled_ShowCHinese"新密码:");UsartPrintf(USART1,"rn新密码:");			flag_reset_password++;			flag_error_num memset(password_input//旧密码与输入密码不相同,错误次数+1{Oled_ShowCHinese"密码错误");UsartPrintf(USART1,"rn密码错误");delay_msOled_ShowCHinese"设置密码");Oled_ShowCHinese"旧密码:");UsartPrintf(USART1,"rn旧密码:");			flag_error_num++;memset(password_inputflag_reset_password //重置密码模式3,再次输入新密码{Oled_ShowCHinese"设置密码");Oled_ShowCHinese"新密码:");delay_msOled_ShowCHinese"设置密码");Oled_ShowCHinese"再输入:");UsartPrintf(USART1,"rn再输入:");		flag_reset_passwordflag_reset_password //重置密码模式4strstr(temp_source,temp_sub//两次新密码相同,新密码修改成功{strncpypasswordpassword_reset//更换新密码AT24CXX_WritepasswordOled_ShowCHinese"设置密码");Oled_ShowCHinese"设置完成");UsartPrintf(USART1,"rn设置完成");delay_msOled_ShowString"        ");Oled_ShowString"            ");Oled_ShowCHineseOled_ShowCHinese			flag_reset_password memset(password_inputmemset(password_reset//两次新密码不相同,新密码修改失败{Oled_ShowCHinese"设置失败");UsartPrintf(USART1,"rn设置失败");delay_msOled_ShowString"            ");Oled_ShowString"        ");Oled_ShowCHineseOled_ShowCHinese			flag_reset_password memset(password_inputmemset(password_resetflag_reset_password //还原密码模式strstr(temp_source,temp_sub//管理员密码与输入密码相同,还原密码i i i++)        password[i]= iAT24CXX_WritepasswordOled_ShowCHinese"还原完成");UsartPrintf(USART1,"rn还原完成");delay_msOled_ShowString"        ");Oled_ShowString"            ");Oled_ShowCHineseOled_ShowCHinese			flag_reset_password memset(password_input//管理员密码与输入密码不相同,还原失败{Oled_ShowCHinese"还原失败");UsartPrintf(USART1,"rn还原失败");delay_msOled_ShowString"        ");Oled_ShowString"            ");Oled_ShowCHineseOled_ShowCHinese      flag_error_num++;			flag_reset_password memset(password_input	password_num /***********锁定键盘函数*****/voidKey_lock_functionflag_error_num //三次输入错误{		flag_key_en time_num //3分钟倒计时开始{			flag_error_timeOled_ShowCHinese"按键锁定");sprintf(display_buf,"    %d%d:%d%d:%d%d", flag_error_timeflag_error_time																					flag_error_timeflag_error_time																					flag_error_timeflag_error_timeOled_ShowStringdisplay_bufflag_error_time //倒计时结束{			flag_key_en 			flag_error_time 			flag_error_num 			flag_reset_password Oled_Clear_AllOled_ShowCHineseOled_ShowCHinese


相关文章

专题分类