点击链接获取Keil源码与Project Backups仿真图:
c51的,截图写错了
https://download.csdn.net/download/qq_64505944/87688544?spm=1001.2014.3001.5503
源码获取
主要内容:
设计一个简易的电子密码锁,并进行仿真实验,该系统能够进行密码输入功能、上锁功能、在锁合状态下通过输入密码进行开锁的功能、锁合状态下设置新密码功能、以及在开锁时,如果连续密码错误三次,则产生声、光报警功能。
基本要求:
1、设计一个能够实现上锁、开锁功能的简易电子锁。
2、设计源程序,并在Keil中运行源程序,在proteus中进行仿真。
3、进行方案描述,以及呈现运行截图。
4、对程序所具有的功能进行说明,并进行结果分析。
主要参考资料:
[1]刘瑞新等.单片机原理及应用教程.机械工业出版社,2021.7
[2]吴国经等.单片机应用技术.中国电力出版社,2021.1
[3]霍孟友等.单片机原理与应用学习概要及题解.机械工业出版社,2021.3
[4]夏继强.单片机实验[M].北京: 航空航天大学出版社,2001.
[5]马忠梅等.单片机的C语言应用程序设计.北京航空航天大学出版社,2021.
完 成 期 限:12 月 11 日 - 12 月 26 日
指导教师签名:
课程负责人签名:
摘 要
电子密码锁在当前市场运用较为广泛,其主要通过对外接密码输入来实现对系统或电路的控制,并进一步控制系统机械开关的操作。相关电子产品通过系统编程控制能够以电子密码锁的形式来实现系统的开关,尤其是对机械产品而言具有较高的安全性与可靠性。电子密码锁系统设计主要以单片机为基础,通过矩阵式键盘、LCD显示、蜂鸣器以及二极管等部件组成主系统。该系统设计编程方便、操作性强、具有较高的实用性,且耗能较低,在市场具有广阔的应用范围。
本设计采用了AT89C51单片机电子锁系统,进行初始化设置,启动密码锁功能,密码输入显示屏幕采用了七段数码管半导体发光器件。系统控制指令通过单片机进行实现,单片机根据实际操作情况分配部件工作内容,程序操作性强、方便简洁。在用户输入密码过程中,单片机将会采用矩阵按键布局模式记录当前输入密码,并将该密码与系统设置密码进行比对,若密码匹配则开启密码锁,若密码错误则需要用户按下删除键重新输入密码。当用户输入密码错误次数超过3次,电子密码锁将会自动锁定。
关 键 词:电子密码锁;单片机;
目 录
摘 要 3
1 概述 4
1.1 选题背景 4
1.2 方案描述 5
1.3 设计的目的 5
2 方案设计 5
2.1 硬件选择 5
2.2 功能介绍 6
2.3 总体设计 6
3 硬件设置 6
3.1 硬件组成 6
3.2 LCD显示器设置 7
3.3 矩阵按键电路设计 7
3.4 报警器设置 8
3.5 系统电路设置 9
4 程序设计 9
4.1 系统流程 10
4.2 源程序 10
5 仿真测试 18
6 心得体会 20
参考文献 21
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),显示数RAM(DDRAM),字符发生器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 <reg51.h>
#include <stdio.h>
#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