0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎么设计一个能够实现上锁开锁功能的简易电子锁?

冬至子 来源:好呐好呐 作者:好呐好呐 2023-05-02 16:02 次阅读

1 概述

1.1 选题背景

安全是现代社会更加关注的现象之一。盗窃事件常有发生,因此更需要一种工具来维护门户安全。在此之前,挂锁、子弹锁和插入式锁被广泛使用。这些锁结构简单、安全性低。撬锁入室和入室盗窃的案件越来越多。因此,我们的团队设计了一款电子智能密码锁。产品的设计主要考虑了保证人们安全使用、使用方便、使用方便等综合因素。电路产品设计包括防探键盘输入、智能控制解锁、锁定、报警、密码重置等功能。其次,由于采用多位密钥设置,具有保密性好、灵敏度高等优点。

1.2 方案描述

(1)输入密码功能。输入密码时,用“*”代替真实的密码以防密码泄露。在输入密码时,具有清除前一位/或多位的密码功能(用清除键)。密码输入完毕,按(确认/开锁键)确认并生效。

(2)上锁功能。在锁开状态下,通过上锁键上锁。

(3)在锁合的状态下,通过输入密码开锁功能。开锁时,先按确认/开锁键后,再在键盘上输入六位密码,然后按确认/开锁键,如果密码正确,进入锁开状态。

(4)在锁开状态下,设置新密码功能。按设置新密码键,在键盘上输入六位新的密码,按(确认/开锁)键确认,代替旧密码。

(5)在开锁时,如果输入密码三次错误,产生声、光报警功能。每错误一次,告警一次, 若连续三次错误,则系统屏蔽输入功能,直到系统复位后重新开始。

1.3 设计的目的

信息产业迅速发展的今天,我们生活中必不可少的设备都向着小型化、微型化、智能化、自动化的方向发展。避免用钥匙开启旋芯式锁的一切烦恼。安全性能高,成本低,功耗低,易操作,从而实现了对锁的电子控制,突破了传统的机械锁的单一性,保密性低,易撬性的缺点,具有使用灵活性好,安全系数高的优点。它的主要工作部分是将输入密码与设定密码进行比较,密码正确时,控制继电器开锁,密码错误时,数码管清屏,继电器保持关闭状态。它的电路结构简单,密码破译难度较大,操作简单。

2 方案设计

2.1 硬件选择

基于AT89C51单片机的电子密码锁硬件设计选用AT89C51单片机作为本设计的核心元件, 于AT89C51单片机的电子密码锁硬件设计利用AT89C51单片机灵活的编程设计和丰富的I/O端口, 及其控制的准确性, 基于AT89C51单片机的电子密码锁实现基本的密码锁功能。在AT89C51单片机的外围电路外接输入键盘用于密码的输入和一些功能的控制,基于AT89C51单片机的电子密码锁硬件设计选用LM016L用于显示作用。

2.2 功能介绍

当用户需要开锁时, 先按基于AT89C51单片机的电子密码锁的键盘开锁键之后按键盘的数字键0-9输入密码。基于AT89C51单片机的电子密码锁的密码输完后按下确认键, 如果基于AT89C51单片机的电子密码锁的密码输入正确则开锁, 不正确显示密码错误重新输入密码, 当三次密码错误则发出报警;当用户需要修改基于AT89C51单片机的电子密码锁的密码时, 先按下基于AT89C51单片机的电子密码锁的键盘设置键后可以设置新密码。新密码输入无误后按基于AT89C51单片机的电子密码锁的确认键使新密码将得到存储, 密码修改成功。

2.3 总体设计

图片

图2-1 电子密码锁结构框架图

3 硬件设置

3.1 硬件组成

基于AT89C51单片机的电子密码锁的外围电路包括基于AT89C51单片机的电子密码锁键盘输入部分、基于AT89C51单片机的电子密码锁的显示部分、基于AT89C51单片机的电子密码锁的报警部分、基于AT89C51单片机的电子密码锁的开锁知识部分组成, 根据基于AT89C51单片机的电子密码锁的实际情况键盘输入部分选择4*4矩阵键盘, 基于AT89C51单片机的电子密码锁的显示部分选择字符型液晶显示LM016L。

3.2 LCD显示器设置

LM016L液晶模块采用HD44780控制器,hd44780具有简单而功能较强的指令集,可以实现字符移动,闪烁等功能,LM016L与单片机MCU通讯可采用8位或4位并行传输两种方式,hd44780控制器由两个8位寄存器,指令寄存器(IR)和数据寄存器(DR)忙标志(BF),显示数RAMDDRAM),字符发生器ROMA(CGOROM)字符发生器RAM(CGRAM),地址计数器RAM(AC)。

图片

图3-1 LCD显示器

3.3 矩阵按键电路设计

本设计中采用的4*4矩阵共有16个键位,4根行线连PI口低4位,4根列线连PI口高4位。在按键未被按下时,每条行线与列线的交叉处互不相通,当莫格按键被按下后,该键所在的行线和列线连通。这样PI口的高4位和低4位中各有一位互相连通。通过行列扫描检测出这两位,即可识别出被按下的键。

图片

图3-2 矩阵按键设计

基于AT89C51单片机的电子密码锁的输入密码输入过程中可以进行退格, 输入完成后按下确认键, 电子密码锁会将所输入与系统密码进行比对。若输入密码正确则显示“Open”开锁, 按下电子密码锁的B选择上锁, 锁重新回到闭锁状态, 电子密码锁LCD液晶显示回到初始化状态。电子密码锁如果密码输入错误, 基于AT89C51单片机的电子密码锁的错误警告灯亮,电子密码锁的LCD液晶显示器会显示错误, 并显示输入错误限制次数。一段时间后, 进入闭锁状态。若连续在电子密码锁上操作错误超过3次, 一定时间内电子密码锁的系统会锁定键盘, 并报警用以防止恶意试探密码。如果在规定次数以内密码输入正确, 则锁开, 且错误次数清空, 不会影响到下一次的开锁。

3.4 报警器设置

蜂鸣器模块部分的电路如下图3-2 报警器设置,就是用P2.1口控制一个有源蜂鸣器发声,作为提示音或报警音。蜂鸣器有两个引脚,其中长脚为正极,短脚为负极。其发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它。由于单片机I/O引脚输出的电流较小,基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路,一般使用三极管来放大电流就可以了。本设计中使用三极管,P2.1口高电平时三极管截至,蜂鸣器不发声;P2.1口低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。因此,我们可以通过程序控制P2.1脚的电平来使蜂鸣器发出声音和关闭。

图片

图3-3 报警器设置

3.5 系统电路设置

下图为基于AT89C51单片机的电子密码锁的系统主电路图:

图片

图3-4 电子密码锁主电路

4 程序设计

4.1 系统流程

系统初始化并读取密码完成后,液晶显示"Password:”,提示用户可以输入密码。此时程序即不断测试按键,检査是否有按鍵被按下。如果有,则进行按键识别:行列扫描法识别出的键位与对应BUFF的值。如果没有按键按下,或者按下的按键没有被识别,BUFF赋值0FFH,并跳转至按键测试。

图片

4.2 源程序

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define GPIO_KEY P1

sbit RS=P2^2;

sbit RW=P2^3;

sbit E=P2^4;

sbit LED = P2^0;

sbit BEEZ = P2^1;

uchar welcome[]="Hello Welcom";

uchar pw_error[]="Password Error";

uchar Lock[]="XXXXXXXXXXXXXXXX";

uchar set_pw[]="Set PassWord";

uchar input_pw[]="Please Input";

uchar pw[6]={0,0,0,0,0,0};

uchar temp_pw[6]={0,0,0,0,0,0};

uchar KeyValue;

uchar flag=0;

uchar pw_count;

uchar pw_errnum=0;

void lcd_int();

void lcd_w_cmd(unsigned char com);

void lcd_w_dat(unsigned char dat);

unsigned char lcd_r_start();

void show_Status(uchar *str);

void show_pw(uchar num);

void Input_Key();

void KeyDown(void);

void open();

void alarm();

void Lock_Device();

void delay(uint j)

{ uint x;

for(x=0;x

}

void main()

{ lcd_int();

show_Status(&input_pw);

show_pw(0);

while(1){

Input_Key();

}

}

void KeyDown(void)

{

GPIO_KEY=0x0f;

if(GPIO_KEY!=0x0f)

{ delay(3);

if(GPIO_KEY!=0x0f)

{ 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;

}

void open() { }

void alarm()

{ uchar i;

LED = 0;

for(i = 0;i<100;i++)

{ BEEZ = ~BEEZ;

delay(100);

}

LED = 1;

}

void Lock_Device()

{ while(1)

{ alarm();

}

}

void Input_Key()

{ KeyDown();

if(KeyValue == 0xff||pw_errnum>=3)return;

if(KeyValue>=0&&KeyValue<=9)

{ if((flag == 0 || flag ==2)&&pw_count<6)

{ 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)

{ 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;

pw_errnum = 0;

show_pw(pw_count);

open();

}

else{ pw_errnum++;

pw_count = 0;

show_pw(pw_count);

show_Status(&pw_error);

alarm();

if(pw_errnum>=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; show_pw(pw_count);

}

}else{ LED = 0;

}

}

else if(KeyValue == 15)

{ if(flag == 1)

{ show_Status(set_pw);

flag = 2;

}

}

}

void show_pw(uchar num)

{ uchar i;

lcd_w_cmd(0xC5);

for(i=0;i<6;i++)

{ lcd_w_dat(' ');

}

lcd_w_cmd(0xC5);

for(i=0;i

{ lcd_w_dat('*');

}

}

void show_Status(uchar *str)

{ uchar i=0;

lcd_w_cmd(0x80);

for(i=0;str[i]!='\\0';i++)

{ lcd_w_dat(str[i]);

}

}

void lcd_int()

{ lcd_w_cmd(0x3c);

lcd_w_cmd(0x0c);

lcd_w_cmd(0x01);

lcd_w_cmd(0x06);

lcd_w_cmd(0x80);

}

void lcd_w_cmd(unsigned char com)

{ unsigned char i;

do

{i=lcd_r_start();

i&=0x80;

delay(2);

}while(i!=0);

RW=0;

delay(1);

RS=0;

delay(1);

E=1;

delay(1);

P0=com;

delay(1);

E=0;

delay(1);

RW=1;

delay(2);

}

void lcd_w_dat(unsigned char dat)

{ unsigned char i;

do

{i=lcd_r_start();

i&=0x80;

delay(2);

}while(i!=0);

RW=0;

delay(1);

RS=1;

delay(1);

E=1;

delay(1);

P0=dat;

delay(1)

E=0;

delay(1);

RW=1;

delay(2);

}

unsigned char lcd_r_start()

{ unsigned char s;

RW=1;

delay(1);

RS=0;

delay(1);

E=1;

delay(1);

s=P0;

delay(1);

E=0;

delay(1);

RW=0;

delay(1);

return(s);

}

5 仿真测试

(1)点击proteus软件下方最左边按钮,使电路开始运行,图5-1为电路运行后状态,LCD液晶显示出Please Input,输入密码进行开锁:

图片

图5-1 初始化界面

(2)通过矩阵按键,输入数据,会显示在LCD液晶上,按C按键可以删除上个输入数字。连续输入6个数后,按D键系统自动判断密码的对错,如图 5-2输入错误密码后,会提示密码错误,并提示点击任意按键退出:

图片

图5-2 输入错误密码

(3)按键输入000000后,LCD液晶会显示密码正确,同时LED“锁”被打开,LED显示Hello Welcome:

图片

图5-3 输入正确密码

(4)在开锁状态下,点击F键,此时听到两声提示,输入新的六位密码并按“D”(重设)键,会听到两声提示音,表示重设密码成功。

图片

图5-4 重新设置密码

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 继电器
    +关注

    关注

    131

    文章

    5024

    浏览量

    146007
  • 控制器
    +关注

    关注

    112

    文章

    15200

    浏览量

    171120
  • LCD显示器
    +关注

    关注

    0

    文章

    85

    浏览量

    19979
  • AT89C51单片机

    关注

    1

    文章

    56

    浏览量

    17466
收藏 人收藏

    评论

    相关推荐

    电子密码常见性能特点

    `  电子密码种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。它的种类很多,有
    发表于 01-06 10:46

    谁能告诉我 做一个语音电子锁,就能够用特定人的声音开...

    谁能告诉我 ,设计语音电子锁,要能够用特定人的声音开锁,用什么语音识别芯片可以做到呢?
    发表于 11-15 20:46

    智能电子锁

    控,大家随时随地都会带着手机,但是钥匙不定会每次都带,在很多时候钥匙忘记带的时候很难讲门打开,但是我就是想通过手机的控制去打开锁,目前只是想法的阶段,还没有想好具体的技术路线,希
    发表于 04-25 11:38

    【FireBLE申请】磁性智能电子锁

    申请理由:磁性智能电子锁可以采用FireBLE开发,需要套这样的开发板。项目描述:电子锁种更方便的形式出现在人们面前,平时拿着大串钥匙找锁眼、扭动等程序十分繁琐,其实安全系数并不
    发表于 07-07 09:48

    电路设计,简易电子锁

    求高人指点:简易电子锁(二)功能要求如下:插入电子“钥匙”后“”打开(LED灯亮),钥匙拔出或插入的钥匙不对
    发表于 11-22 17:17

    基于AT24c02de 电子锁设计程序?

    {:2:}项目做成了渣渣,求基于AT24c02de 电子锁设计程序
    发表于 12-25 17:46

    编码电子锁

    求4位密码报警电子锁的Multisim原理图,越简单越好,谢谢大家。
    发表于 12-19 23:16

    求编码电子锁原理图

    急!!!求四位密码报警电子锁的Multisim电路原理图,帮帮忙,小女子必有重谢!
    发表于 12-19 23:24

    急求编码电子锁

    急!!!求四位密码报警电子锁的Multisim电路原理图,帮帮忙,小女子必有重谢!
    发表于 12-19 23:31

    采用STC89C52单片机实现智能电子密码的控制功能

    安全性,电子密码应运而生,它具有防试探按键输入,智能控制上锁开锁、报警、修改密码等多种功能。鉴于以往单片机的内部程序存储器不能由单片机自
    发表于 07-19 02:04

    怎么利用FPGA设计语音密码系统?

    电子密码系统主要由电子锁体、电子密匙等部分组成,电子密匙里能存放多组
    发表于 08-15 07:44

    汽车电子锁有什么功能

    汽车电子锁有多种形式,常见的是电子钥匙式电子锁。这种电子锁的钥匙内藏电子电路存储密码,通过光、电和磁性等多种形式和主控电路联系。
    发表于 03-19 09:01

    智能开锁功能实现

    通过发送信号给服务端,实现开锁功能。。。大家好,我是学嵌入式 我想请问要实现智能
    发表于 05-01 05:55

    基于stm32c8t6的电子锁设计

    基于stm32的电子锁项目总结所做的小项目,记录下出现的问题项目材料1、stm32f103c8t6最小系统板2、1.8寸LCD屏幕3、四位二相步进电机4、MPU6050六轴陀螺仪
    发表于 08-06 09:14

    智能家居电子锁方案原理电路

    智能家居电子锁是当代物联网(LOT)的智能产品之一,目前的智能锁功能包括远程开锁、智能防盗、指纹开锁、密码开锁、刷卡
    的头像 发表于 06-29 10:59 5491次阅读