注:获取全套资料,请见文末说明
概要
多功能电子密码锁系统由AT89C52单片机最小系统、4×4矩阵键盘、LCD1602显示、AT24C02存储模块以及报警系统等组成,具有设置、修改六位用户密码、超次报警、超次锁定、密码错误报警等功能。

设计要求

  1. 本设计为了防止密码被窃取要求在输入密码时在LCD屏幕上显示*号;
  2. 设计开锁密码位六位密码的电子密码锁;
  3. 能够LCD显示在密码正确时显示OPEN,密码错误时显示 ERROR,输入密码时显示INPUT PASSWORD;
  4. 实现输入密码错误超过限定的三次电子密码锁定;
  5. 4×4的矩阵键盘其中包括0-9的数字键和确认、重设、清除以及关锁功能键;
  6. 本产品具备报警功能,当输入密码错误时蜂鸣器响并且LED灯亮;
  7. 密码可以由用户自己修改设定(只支持6位密码),修改密码之前必须再次输入密码,在输入新密码时候需要二次确认,以防止误操作;

系统框图

仿真电路图


PCB原理图

运行分析
(1)51单片机加载Lock程序的Hex文件,进行仿真运行,此时LCD显示初始密码输入界面。

(2)输入初始密码6个0后,点击“确认”键,LCD显示Open状态,密码锁打开,继电器动作,绿色LED灯点亮,开锁成功。


(3)重设密码过程为:在密码锁开锁成功的状态下,即LCD显示Open时,再次输入6位旧密码,点击“确认”键,此时LCD显示Set NewWord Enable,重设密码进程激活。


(4)此时,输入6位新密码,点击“重设”键,LCD显示“inputagain”,再次输入6位新密码,点击“重设”键,密码重设成功,此时LCD显示“ResetPassword OK”,新密码被写入AT24C02存储器。即使仿真结束,或单片机复位,AT24C02存储的密码都不会丢失。

(5)如果忘记密码,可输入管理员密码:131420,点击“确认”键后,LCD显示“Init Password”,密码锁密码被重置为:000000。

(6)密码输入过程中,均会产生提示音。一声提示音,表示按键每次的有效输入;两声提示音,表示开锁或密码重设重置成功;三声提示音,表示输入错误等。密码输入错误3次,键盘被锁死,提示音长鸣报警。​

(7)开锁成功后,可以点击“关锁”键,模拟锁密码关锁,此时继电器失电,绿色LED灯熄灭,LCD显示密码输入界面。当密码输入过程中输入错误时,可以通过“清除”清除错误的某位密码数字,重新输入即可。

部分C程序


voidStop(void){Sda=0;Scl=1;Nop();Sda=1;Nop();}voidAck(void){Sda=0;Nop();Scl=1;Nop();Scl=0;}voidNoAck(void){Sda=1;Nop();Scl=1;Nop();Scl=0;}voidSend(uchar Data){ucharBitCounter=8;uchartemp;do{temp=Data;Scl=0;Nop();if((temp&0x80)==0x80)Sda=1;elseSda=0;Scl=1;temp=Data<<1;Data=temp;BitCounter--;}while(BitCounter);Scl=0;}ucharRead(void){uchar temp=0;uchar temp1=0;uchar BitCounter=8;Sda=1;do{Scl=0;Nop();Scl=1;Nop();if(Sda)temp=temp|0x01;elsetemp=temp&0xfe;if(BitCounter-1){temp1=temp<<1;temp=temp1;}BitCounter--;}while(BitCounter);return(temp);}voidWrToROM(uchar Data[],uchar Address,uchar Num){uchar i;uchar *PData;PData=Data;for(i=0;i<Num;i++){Start();Send(0xa0);Ack();Send(Address+i);Ack();Send(*(PData+i));Ack();Stop();mDelay(20);}}voidRdFromROM(uchar Data[],uchar Address,uchar Num){uchar i;uchar *PData;PData=Data;for(i=0;i<Num;i++){Start();Send(0xa0);Ack();Send(Address+i);Ack();Start();Send(0xa1);Ack();*(PData+i)=Read();Scl=0;NoAck();Stop();}}#defineyi 0x80#defineer 0x80+0x40voiddelay(uint xms){uint x,y;for(x=xms;x>0;x--)for(y=110;y>0;y--);}voidwrite_1602com(uchar com){lcd1602_rs=0;lcd1602_rw=0;P0=com;delay(1);lcd1602_en=1;delay(1);lcd1602_en=0; }voidwrite_1602dat(uchar dat){lcd1602_rs=1;lcd1602_rw=0;P0=dat;delay(1);lcd1602_en=1;delay(1);lcd1602_en=0;}voidlcd_init(void){write_1602com(0x38);write_1602com(0x0c);write_1602com(0x06);write_1602com(0x01);}unsignedchar coding(unsigned char m){unsigned char k;switch(m){case (0x11): k=1;break;case (0x21): k=2;break;case (0x41): k=3;break;case (0x81): k='A';break;case (0x12): k=4;break;case (0x22): k=5;break;case (0x42): k=6;break;case (0x82): k='B';break;case (0x14): k=7;break;case (0x24): k=8;break;case (0x44): k=9;break;case (0x84): k='C';break;case (0x18): k='*';break;case (0x28): k=0;break;case (0x48): k='#';break;case (0x88): k='D';break;}return(k);}unsignedchar keynum(void){unsignedchar row,col,i;P1=0xf0;if((P1&0xf0)!=0xf0){Delay5Ms();Delay5Ms();if((P1&0xf0)!=0xf0){row=P1^0xf0;i=0;P1=a;while(i<4){if((P1&0xf0)!=0xf0){col=~(P1&0xff);break;}else{i++;P1=a;}}}else{return 0;}while((P1&0xf0)!=0xf0);return (row|col);}elsereturn 0;}//=====一声提示音,表示有效输入=====//voidOneAlam(void){ALAM=0;Delay5Ms();ALAM=1;}//======二声提示音,表示操作成功=====//voidTwoAlam(void){ALAM=0;Delay5Ms();ALAM=1;Delay5Ms();ALAM=0;Delay5Ms();ALAM=1;}//======三声提示音,表示错误==========//voidThreeAlam(void){ALAM=0;Delay5Ms();ALAM=1;Delay5Ms();ALAM=0;Delay5Ms();ALAM=1;Delay5Ms();ALAM=0;Delay5Ms();ALAM=1;}//========显示提示输入========//voidDisplayChar(void){unsigned char i;if(pass==1){write_1602com(er);for(i=0;i<16;i++){write_1602dat(LockOpen); }}else{if(N==0){//DisplayListChar(0,1,Error);write_1602com(er);for(i=0;i<16;i++){write_1602dat(Error);}}else{write_1602com(er);for(i=0;i<16;i++){write_1602dat(start_line);}}}}//=====重置密码=======//voidResetPassword(void){unsigned char i;unsigned char j;if(pass==0){pass=0;DisplayChar();ThreeAlam();}else{if(ReInputEn==1){if(N==6){ReInputCont++;if(ReInputCont==2){for(i=0;i<6;){if(TempPassword==InputData)i++;else{//DisplayListChar(0,1,Error);write_1602com(er);for(j=0;j<16;j++){write_1602dat(Error[j]);}ThreeAlam();pass=0;ReInputEn=0;ReInputCont=0;DisplayChar();break;}}if(i==6){//DisplayListChar(0,1,ResetOK);write_1602com(er);for(j=0;j<16;j++){write_1602dat(ResetOK[j]);}TwoAlam();WrToROM(TempPassword,0,6);ReInputEn=0;}ReInputCont=0;CorrectCont=0;}else{OneAlam();//DisplayListChar(0, 1,again);write_1602com(er);for(j=0;j<16;j++){write_1602dat(again[j]);}for(i=0;i<6;i++){TempPassword=InputData;}}N=0;}}}}

全套资料分享如下






获取方法
获取方法
获取方法
重要的事情说三遍!!!!!!!!!!!
由于本设计为作者原创设计,获取完整的论文报告、PCB文件及原理图、
Keil C程序、Proteus仿真、Visio流程图文件和参考文献资料。
请微信搜索关注公众号:交院小智

一种基于LCD1602和AT24C02的单片机多功能电子密码锁设计(附论文+Proteus仿真+C程序等)相关推荐

  1. 【毕业设计】单片机和stm32设计选题,proteues仿真、程序完整资料-转发分享

    题目:1854 基于单片机智能充电器系统设计仿真 程序 论文 摘要 在我们的日常生活中,手机已经变得越来越重要了.我们经常需要使用手机,打电话.发短信.上网.看电影.听歌.玩游戏等等.随着大屏幕和高主 ...

  2. 基于51单片机的八路抢答器汇编语言Proteus仿真原理图程序

    功能: 0.本项目采用STC89C52作为单片机系统的控制MCU 1.'开始'按键按下后,进入抢答倒计时,倒计时结束前,按下抢答键,完成抢答,并进入作答时间,作答时间结束返回初始状态,若无人抢答,返回 ...

  3. 一种基于注意力的Few-Shot目标检测统一框架(附论文下载)

    关注并星标 从此不迷路 计算机视觉研究院 公众号ID|ComputerVisionGzq 学习群|扫码在主页获取加入方式 论文地址:https://arxiv.org/pdf/2201.02052.p ...

  4. 基于51单片机的室内温度可燃气体检测报警系统Proteus仿真(源码+仿真+全套资料)

    资料编号:133 讲解视频: 133-基于51单片机的室内温度可燃气体检测报警系统Proteus仿真(源码+仿真+全套资料) 功能介绍: 采用51单片机作为主控,LCD1602显示当前温度和可燃气体浓 ...

  5. 基于stm32单片机的台历日历计时器万年历Proteus仿真(源码+仿真+全套资料)

    资料编号:151 视频讲解: 151-基于stm32单片机的台历日历计时器万年历Proteus仿真(源码+仿真+全套资料) 采用stm32单片机作为主控,LCD屏幕上部分显示电子日历,下半屏幕显示台历 ...

  6. 一种基于加密域的数字图像水印算法的设计与实现(附Matlab源码)

    一种基于加密域的数字图像水印算法的设计与实现 项目介绍 毕设项目 题目:一种基于加密域的数字图像水印算法的设计与实现 随着数字媒体技术的发展,数字媒体版权的保护得到了越来越多人的重视,数字水印技术作为 ...

  7. 基于51单片机有害气体浓度检测超限报警Proteus仿真

    资料编号:157  下面是相关功能视频演示: 157-基于51单片机有害气体浓度检测超限报警Proteus仿真(源码+仿真+全套资料) 功能介绍: 采用51单片机作为CPU,ADC0832作为AD转换 ...

  8. 基于51单片机的全自动智能洗衣机控制系统Proteus仿真(仿真+源码+全套资料)

     资料编号:108 设计功能: 1.对水温实时显示 2.显示滚筒转速 3.显示运行倒计时 4.能通过按钮分别设置洗涤时间和脱水时间 5.运行过程为:加热--洗涤--脱水 具体功能请看下方演示视频 10 ...

  9. 51单片机应用开发25例—基于Proteus仿真(电路图+程序)

    51单片机应用开发25例-基于Proteus仿真(电路图+程序) 分享的51单片机应用开发25例-基于Proteus仿真非常全面,里面仿真工程文件和源程序都有. 目录: 应用实例1  呼吸灯\ 应用实 ...

  10. 【036】基于51单片机的电子时钟与秒表Proteus仿真设计

    一.压缩包资料内容 (1).基于51单片机的电子时钟与秒表proteus仿真设计一份: (2).基于51单片机的电子时钟与秒表proteus仿真设计keli源代码一份: (3).基于51单片机的电子时 ...

最新文章

  1. BeanShell中的Java指令和表达式
  2. 前端学习笔记2017.6.21-引入JS文件的方法
  3. Codeforces Round #355 (Div. 2) D. Vanya and Treasure dp+分块
  4. XenDesktop7.12配置StoreFront使用HTTPS
  5. JavaWeb学习之路——SSM框架之Spring(六)
  6. kafka配置文件 中文乱码_Kafka学习之配置文件详解
  7. MSSQL 标量函数
  8. 【学习笔记】整体二分
  9. Python 之数据类型
  10. requirejs的用法(二)
  11. mongodb spring 超时时间_mongoDB(spring 部分配置)
  12. 简单梳理帆软报表即决策系统的登录步骤 二
  13. 2021大同高考成绩查询,大同高考分数查询(查询方法+入口)
  14. 艺术签名设计软件3.0汉化破解版 软件下载
  15. android .9图片如何引用,Android调用相机拍照并返回路径和调用系统图库选择图片...
  16. 自动化运维工具 puppet
  17. windowns定时关机命令
  18. 基于Keras+YOLOv3的口罩佩戴情况检测系统【超详细!!!保姆级教程】
  19. 伺服控制的三环控制原理及整定仿真和Simulink模型
  20. 想知道如何批量压缩图片?来试试这几个图片压缩工具

热门文章

  1. android 浏览器 内核版本,Android集成三方浏览器之X5内核
  2. 小白入,告诉你.ssh新建config文件究竟是哪种文件!
  3. 指南|七步搞定研控E总线驱动器与欧姆龙PLC主站连接
  4. 电路中常用的拉普拉斯变换
  5. 基于SSM框架图书馆预约占座系统的设计与实现(附源码、论文)
  6. PRML第三章3.3贝叶斯线性回归
  7. 元宇宙NFT商城系统|艺术数字藏品平台源码部署
  8. c++课设作业之课程信息管理系统
  9. html输入能自动计算器,HTML自制计算器
  10. Java8 实战系列-05-lambda 类型推断