51单片机的电子密码锁的设计与仿真

您所在的位置:网站首页 电子锁怎样添加指纹和指纹 51单片机的电子密码锁的设计与仿真

51单片机的电子密码锁的设计与仿真

2023-07-31 18:22| 来源: 网络整理| 查看: 265

51单片机的电子密码锁的设计与仿真

看看效果图 在这里插入图片描述

简介

(1)CPU使用51单片机。 (2)用4x4矩阵键盘作为操作信息输入。 (3)用LCM1602液晶显示模块作为信息显示。 (4)用蜂鸣器及发光二极管作为错误报警及状态显示。

功能 (1)输入密码功能。 输入密码时,用“★”号或“-”代替真实的密码以防密码泄露。在 输入密码时,具有清除前一位/或多位的密码功能(用清除键)。 密码输入完毕,按(确认/开锁键)确认并生效。 (2)上锁功能。 在锁开状态下,通过上锁键上锁。 (3)在锁合的状态下,通过输入密码开锁功能。 开锁时,先按确认/开锁键后,再在键盘上输入六位密码,然后按 确认/开锁键,如果密码正确,进入锁开状态。 (4)在锁开状态下,设置新密码功能。 按设置新密码键,在键盘上输入六位新的密码,按(确认/开锁) 键确认,代替旧密码。 (5)在开锁时,如果输入密码三次错误,产生声、光报警功能。 每错误一次,告警一次, 若连续三次错误,则系统屏蔽输入功能, 直到系统复位后重新开始。 程序设计

定义LCD管脚以及led灯以及蜂鸣器管脚

在这里插入图片描述 定义LCD显示的字符串以及初始化变量 在这里插入图片描述 矩阵键盘扫描

/* * @description : 矩阵键盘扫描 * @param :无 * @return : 无 */ void KeyDown(void) { GPIO_KEY=0x0f; if(GPIO_KEY!=0x0f)//读取按键是否按下 { delay(3);//延时10ms进行消抖 if(GPIO_KEY!=0x0f)//再次检测键盘是否按下 { //TR1=0; //测试列 //LED=~LED; GPIO_KEY=0X0F; switch(GPIO_KEY) { case(0X07): KeyValue=0;break; case(0X0b): KeyValue=1;break; case(0X0d): KeyValue=2;break; case(0X0e): KeyValue=3;break; } //测试行 GPIO_KEY=0XF0; switch(GPIO_KEY) { case(0X70): KeyValue=KeyValue;break; case(0Xb0): KeyValue=KeyValue+4;break; case(0Xd0): KeyValue=KeyValue+8;break; case(0Xe0): KeyValue=KeyValue+12;break; } while(GPIO_KEY!=0xf0); //检测按键松手检测 return ; } } KeyValue = 0xff; } ```扫描按键 ```c /* * @description : 按键扫描 并且执行相应的操作 * @param :无 * @return : 无 */ void Input_Key() { //刷新按键的值若没有按键按下则返回0xff KeyDown(); if(KeyValue == 0xff||pw_errnum>=3)return;//检测是否有按键按下,或者是否有 //当1-9按下时 if(KeyValue>=0&&KeyValue pw_count++;//密码下标 temp_pw[pw_count] = KeyValue;//保存按键值 show_pw(pw_count); //屏幕显示* } } else if(KeyValue == 12)//上锁键 { if(flag == 1) //如果设备在开锁时按下 { flag = 0; show_Status(&input_pw);//显示请输入密码 } } else if(KeyValue == 13)//按下了清除键 { if(pw_count>0)pw_count--;//下标左移 show_pw(pw_count); //刷新屏幕密码 } else if(KeyValue == 14)//按下了确定键 { if(pw_count == 6) //判断数量是否有6位 { if(flag == 0) //锁关闭状态 { if(temp_pw[0] == pw[0]&&temp_pw[1] == pw[1]&&temp_pw[2] == pw[2]&&temp_pw[3] == pw[3]&&temp_pw[4] == pw[4]&&temp_pw[5] == pw[5])//校验密码 { show_Status(&welcome);//显示欢迎您 flag = 1; //切换状态 pw_count = 0; //密码清0 pw_errnum = 0; //错误密码次数清0 show_pw(pw_count); //刷新屏幕密码 open(); //执行开门时的回调函数 } else{ pw_errnum++; //错误次数+1 pw_count = 0; //密码清0 show_pw(pw_count); //刷新屏幕密码 show_Status(&pw_error); //显示密码错误 alarm(); //发出警告 if(pw_errnum>=3) //当密码错误达到3次时 { show_Status(&Lock); //显示设备锁了 Lock_Device(); //报警 轰炸模式 } } } else if(flag == 1)//锁打开状态,按下确定键无反应 { } else if(flag == 2)//设置密码状态 保存新密码 { //保存密码 pw[0] = temp_pw[0]; pw[1] = temp_pw[1]; pw[2] = temp_pw[2]; pw[3] = temp_pw[3]; pw[4] = temp_pw[4]; pw[5] = temp_pw[5]; show_Status(&welcome); //显示欢迎你 flag = 1; //标志位置位 pw_count = 0; //密码清0 show_pw(pw_count); //刷新屏幕密码 } }else{//密码未到6位不能操作 // LED = 0; } } else if(KeyValue == 15)//按下了设置密码键 { if(flag == 1) //判断锁是否已经打开,打开才能设置密码 { show_Status(set_pw);//显示新的标题 flag = 2; //标志位改成设置密码 } } }

需要的可以自己去下载哦! 需要该源码的可以关注公众号:智慧小巷 回复:电子密码锁 即可! 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


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