基于51单片机密码锁课程设计报告

  • 格式:docx
  • 大小:552.57 KB
  • 文档页数:29

下载文档原格式

  / 29
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一.设计目的

在日常的生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。若使用传统的机械式钥匙开锁,人们常需要携带多把钥匙,使用极不方便,且钥匙丢失后安全性即大打折扣。随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。为了满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。密码锁具有安全性高、成本低、功耗低、易操作等优点。

在安全技术防范领域,具有防盗报警功能的电子密码锁逐渐代替传统的机械式密码锁,克服了机械式密码锁密码量少,安全性能差的缺点,使密码锁无论在技术上还是在性能上都大大提高一步。随着大规模集成电路技术的发展,特别是单片机的问世,出现了带微处理器的只能密码锁,它除了具有电子密码锁的功能外,还引入了智能化管理、专家分析系统等功能,从而使密码锁具有很高的安全性、可靠性,应用日益广泛。

本设计采用单片机为主控芯片,结合外围电路,组成电子密码锁,用户想要打开锁,必先通过提供的键盘输入正确的密码才能将锁打开,密码输入错误就有提示,为了提高安全性,当密码输入错误次将报警。密码可以由用户自己修改设定,锁开后才能修改密码。修改密码前必须再次输入密码,在输入新密码时候需要二次确认,以防止误操作。

二.设计要求和方案选择

1、方案:用AT89C52设计的多功能密码锁。以单片机作为微控制器,可以实现

基于以上优点,按键有效指示、输入错误、控制开锁、错误报警、密码修改等功能,工作稳定可靠,保密性高,实用性强。

2、电子密码锁总体设计

三.硬件部分

AT89C52简介:

单片机AT89C52简介

AT89C52是美国ATMEL 公司生产的低电压,高性能CMOS 8位单片机,片内含4K bytes 的可反复擦写的只读程序存储器(EPROM )和128bytes 的随机存取数据序存器(RAM ),器件采用ATMEL 公司的高密度/非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU )和FLASH 存储单元,AT89C52单片机为许多嵌入式控制系统提供了一种灵活

行高且价廉的方案。

主要特性:

• 与MCS-51 兼容

• 4K 字节可编程FLASH 存储器(寿命:1000写/

擦循环)

• 全静态工作:0Hz-24KHz

• 三级程序存储器保密锁定

• 128*8位内部RAM

• 32条可编程I/O 线

• 两个16位定时器/计数器

• 5个中断源 • 可编程串行通道

• 低功耗的闲置和掉电模式

• 片内振荡器和时钟电路

1. 总电路图

2. 键盘电路

AT89C52

按键与家庭电话式的按键方式3.复位电路

4.晶振电路

5.显示电路

6.报警电路

7.开锁电路

四.软件设计1.程序设计流程图

2.程序代码

#include

#include

#define LCM_Data P0

#define uchar unsigned char

#define uint unsignedint

#define w 6 //定义密码位数

sbit lcd1602_rs=P2^5;

sbit lcd1602_rw=P2^6;

sbit lcd1602_en=P2^7;

sbitScl=P3^4; //24C02串行时钟

sbitSda=P3^5; //24C02串行数据

sbit ALAM = P2^1; //报警

sbit KEY = P2^0; //开锁

sbitopen_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 b[]={"0123456789"};

unsigned char code start_line[] = {"password: "};

unsigned char code name[] = {"===Coded Lock==="}; //显示名称

unsigned char code Correct[] = {" correct "}; //输入正确

unsigned char code Error[] = {" error "}; //输入错误

unsigned char code codepass[] = {" pass "};

unsigned char code LockOpen[] = {" open "}; //OPEN unsigned char code SetNew[] = {"SetNewWordEnable"};

unsigned char code Input[] = {"input: "};

//INPUT

unsigned char code ResetOK[] = {"ResetPasswordOK "};

unsigned char code initword[] = {"Init password..."};

unsigned char code Er_try[] = {"error,try again!"};

unsigned char code again[] = {"input again "};

unsigned char InputData[6]; //输入密码暂存区unsigned char CurrentPassword[6]={1,3,1,4,2,0};

//当前密码值

unsigned char TempPassword[6];