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

点击链接获取Keil源码与Project Backups仿真图:
https://download.csdn.net/download/qq_64505944/87848194?spm=1001.2014.3001.5503
在这里插入图片描述

源码获取

摘 要
随着经济社会发展,人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出。传统的机械锁,由于其构造简单,安全性能低,无法满足人们的需要。随着电子产品向智能化和微型化的不断发展,数字密码锁作为防盗卫士的作用显得尤为重要。而单片机以其实用,功能强大,价格低廉等功能,已成为电子产品研制和开发中首选的控制器。
本文从经济实用的角度出发,阐述一个基于单片机的液晶显示电子密码锁的设计与实现。系统采用ATMEL 公司的AT89C51单片机作为系统核心,液晶显示器LCD1作为输出设备显示系统提示信息,4*4矩阵键盘作为输入设备,CMOS 串行E2PROM存储器AT24C02作为数据存储器,配合蜂鸣器、继电器等电路构成整个系统硬件;系统软件采用C语言编写。设计的系统液晶显示,密码修改方便,具有报警、锁定等功能,使用便捷简单,符合住宅、办公用锁需求,具有一定的实用价值。
关 键 词:单片机;密码锁;AT89C51;

目录
摘 要 1
1 概述 1
1.1课题背景与意义 1
1.2课题研究内容 1
2 方案论证与设计 2
2.1系统方案论证 2
2.2设计方案 2
2.3总体设计原理 2
3 系统硬件设计 3
3.1主要元器件介绍 3
3.2系统硬件部分 5
4 系统调试 5
4.1 KEIL 5
4.2 Proteus软件 5
4.3系统结构图 6
4.4程序代码 6
5 总结 22
6. 参考文献 22

1 概述

1.1课题背景与意义
随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤为突出,传统的机械锁由于其构造简单,被撬的事件屡见不鲜。现在安防监控系统是一门被人们日益重视的新兴专业,就目前发展看,应用普与越来越广,科技含量越来越高。其中,数字密码锁电路简单,易于安装维护,而且价格便宜,因而被广泛应用于家庭防盗,银行,保险柜等场合。
数字密码锁是由电子电路控制锁体的新型锁具,它采用触摸按键方式输入开锁密码,操作方便,灵活性好,保密性强,安全系数高,不会磨损,寿命长,成本低、功能全和可连网的等优点。正是这些优点使它广泛地被用于小区楼道的安全管理中。这种成本相对低的安全措施却提供了不小的安全作用。它的功能强,成本低和无钥匙等特点注定了它的成功。

1.2课题研究内容
设计制作一个数字密码锁,替代传统的机械锁。
①电子密码锁可以根据设定好的密码,当密码输入正确之后,锁就打开,如果输入的三次的密码不正确,就锁定按键一定时间,比如3秒钟,同时发出报警声,直到没有按键按下,3秒钟后,再打开按键锁定功能;否则在3秒钟内仍有按键按下,就重新锁定按键3秒时间并报警。
②要求液晶显示,在输入密码时,显示“*”。
③以单片机为主控芯片,完成密码输入键盘设计。
④时钟复位电路、密码复位电路设计。
⑤电子阀的使用和设计。

2 方案论证与设计
2.1系统方案论证
随着电子产品向智能化和微型化的不断发展,数字密码锁的种类也不断增多,本节主要讨论了目前较为常见的数字密码锁,有采用数字电路为控制核心和采用以单片机为控制核心的两种数字密码锁。

2.2设计方案
用以AT89C51为核心的单片机控制万案:利用单片机灵活的编程设计和丰富的IO端口,与其控制的准确性,不但能实现基本的密码锁功能,还能添加掉电存储、声光提示甚至添加遥控控制功能。
由于单片机种类繁多,因此在选用时要多加比较合理选择,以期获得最佳的性价比。
一般来说在选取单片机时从下面几个方面考虑:
①性能、存储器、运行速度、I/0口、定时/计数器、串行接口、模拟电路功能、工作电压、功耗、封装形式、抗干扰性、保密性。
②除了以上的一些的还有一些最基本的比如:中断源的数量和优先级、工作温度范围、有没有低电压检测功能、单片机内有无时钟振荡器、有无电复位功能等。
③在开发过程中单片机还受到:开发工具、编程器、开发成本、开发人员的适应性、技术支持和服务等因素。
基于以上因素本设计选用单片机AT89C51作为本设计的核心元件,利用单片机灵活的编程设计和丰富的I/0端口,与其控制的准确性,实现基本的密码锁功能。在单片机的外围电路外接输入键盘用于密码的输入和一些功能的控制,外接AT24CO2芯片用于密码的存储,外接液晶显示器用于显示作用。

2.3总体设计原理
本设计主要由单片机、矩阵键盘、液晶显示器和密码存储等部分组成。用户通过矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路或者报警电路控制开锁还是报警。
本系统共有两部分构成,即硬件部分与软件部分。
硬件部分由电源输入部分、键盘输入部分、密码存储部分、复位部分、晶振部分、显示部分、报警部分、开锁部分组成。
软件部分对应的由主程序、初始化程序、LCD显示程序、键盘扫描程序、启动程序、关闭程序、键功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。
设计原理如图2.1所示:

图2.1基于单片机的电子密码锁的设计原理图

3 系统硬件设计
3.1主要元器件介绍
AT89C51单片机
本次毕业设计选用的是AT89C51,AT89C51是一种带4K字节FLASH存储器〔FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除1000次以上。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位.CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
AT89C51主要特性:
(1)与 MCS-51兼容,4K字节可编程FLASH存储器
(2)寿命: 1000写/擦循环以上,数据保留时间:10年
(3)全静态工作: 0Hz-24MHz
(4)三级程序存储器锁定
(5)128×8位内部 RAM
(6)32可编程I/0线
(7)两个16位定时器/计数器,5个中断源
(8)可编程串行通道
(9)低功耗的闲置和掉电模式
(10)片内振荡器和时钟电路AT89C51单片机引脚:vCC:供电电压。GND:接地。
PO口:PO口为一个8位漏级开路双向I/0口,每脚可吸收8TTL门电流。当PO口的管脚第一次写1时,被定义为高阻输入。PO能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FLASH编程时,PO口作为原码输入口,当FLASH进行校验时,P0输出原码,此时PO外部必须接上拉电阻。
P1口:P1口是一个内部提供上拉电阻的8位双向I/0口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/0口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向Ⅰ/0口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流〔ILL〕这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:口管脚备选功能
P3.O RXD〔串行输入口)
P3.1 TXD〔串行输出口〕
P3.2/INTO〔外部中断0〕
P3.3/INT1〔外部中断1)
P3.4 To〔记时器0外部输入)
P3.5 T1〔记时器1外部输入〕
P3.6/WR〔外部数据存储器写选通〕P3.7/RD〔外部数据存储器读选通〕
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/ PROG:当迈回外部仔储器时,地址锁仔冗许的输出电平用寸锁仔地址的低位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是 ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
EA/VPP:当/EA 保持低电平时,则在此期间外部程序存储器( 0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在 FLASH编程期间,此引脚也用于施加12V编程电源〔 VPP)。
XTAL1:反向振荡放大器的输入与内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。
振荡器特性:XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。

3.2系统硬件部分
数字密码锁系统的硬件部分主要有:系统电源、键盘输入、密码存储、复位、显示、报警、开锁等部分。
为了提高密码锁的密码显示效果能力。本设计的显示部分由液晶显示器LCD1602取代普通的数码管完成。
开启电源时,显示器即处于开启状态。当按下关闭电源键后显示器才处于关闭状态。否则显示器将一直处于初始状态,当需要对密码锁进行开锁时,按下键盘上的开锁按键后利用键盘上的数字键0一9输入密码,每按下一个数字键后在显示器上显示一个*,输入多少位就显示多少个*。
当密码输入完成时,按下确认键,如果输入的密码正确的话,LCD 则显示“TRUE",电子密码锁被打开。如果密码不正确,LCD 显示屏会显示“ERROR " ,P1.0输出的是高电平,电子密码锁不能被打开。通过LCD 显示屏,可以清楚的判断出锁所处的状态。

4 系统调试
4.1 KEIL
Keil C51是一款兼容单片机C语言软件开发系统,与汇编相比,c语言在功能上、结构性、可读性、可维护性上有明显的优势,3因而易学易用。Kei1提供了包括c编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境( u Vision)将这些部分组合在一起。运行Kei1软件需要ⅢIN98、NT、VIN2000、INXP等操作系统。如果你使用c语言编程,那么Kei1几乎就是你的不二之选,即使不使用c语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。Kei1 C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Kei1的优势。
4.2 Proteus软件
Proteus 软件是英国Labcenter electronics公司出版的EDA工具软件〔该软件中国总代理为#风标电子技术##)。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机与外围器件。它是目前最好的仿真单片机与外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,20##又增加了Cortex和 DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持ISR、Keil和 Mtlab 等多种编译器。
4.3系统结构图

在这里插入图片描述

图4.1数字密码锁仿真图
4.4程序代码

#include<reg52.h>//头文件
#include<intrins.h>
#define LCM_Data  P0
#define uchar unsigned char 
#define uint  unsigned int
#define w 6				//定义密码位数
sbit lcd1602_rs=P2^3;
sbit lcd1602_rw=P2^4;
sbit lcd1602_en=P2^5;

sbit Scl=P3^4;			//24C02串行时钟
sbit Sda=P3^5;			//24C02串行数据

sbit ALAM = P3^2;		//报警	
sbit KEY = P3^1;		//开锁

sbit open_led=P2^2;		//开锁指示灯

bit  operation=0;		//操作标志位
bit  pass=0;			//密码正确标志
bit  ReInputEn=0;		//重置输入充许标志	
bit  s3_keydown=0;		//3秒按键标志位
bit  key_disable=0;		//锁定键盘标志

unsigned char countt0,second;	//t0中断计数器,秒计数器

void Delay5Ms(void);
unsigned char code a[]={
   0xFE,0xFD,0xFB,0xF7}; 											//控盘扫描控制表
unsigned char code start_line[]	= {
   "password:       "};
unsigned char code name[] 	 	= {
   "Coded Management"};											//显示名称
unsigned char code Correct[] 	= {
   "     correct    "};			 								//输入正确
unsigned char code Error[]   	= {
   "      error     "};  										//输入错误
unsigned char code codepass[]	= {
   "      pass      "}; 
unsigned char code LockOpen[]	= {
   "      true      "};											//OPEN
unsigned char code SetNew[] 	= {
   "SetNewWordEnable"};
unsigned char code Input[
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柒月玖.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值