基于51单片机密码锁课程设计报告
- 格式:docx
- 大小:552.57 KB
- 文档页数:29
一.设计目的
在日常的生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。若使用传统的机械式钥匙开锁,人们常需要携带多把钥匙,使用极不方便,且钥匙丢失后安全性即大打折扣。随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。为了满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。密码锁具有安全性高、成本低、功耗低、易操作等优点。
在安全技术防范领域,具有防盗报警功能的电子密码锁逐渐代替传统的机械式密码锁,克服了机械式密码锁密码量少,安全性能差的缺点,使密码锁无论在技术上还是在性能上都大大提高一步。随着大规模集成电路技术的发展,特别是单片机的问世,出现了带微处理器的只能密码锁,它除了具有电子密码锁的功能外,还引入了智能化管理、专家分析系统等功能,从而使密码锁具有很高的安全性、可靠性,应用日益广泛。
本设计采用单片机为主控芯片,结合外围电路,组成电子密码锁,用户想要打开锁,必先通过提供的键盘输入正确的密码才能将锁打开,密码输入错误就有提示,为了提高安全性,当密码输入错误次将报警。密码可以由用户自己修改设定,锁开后才能修改密码。修改密码前必须再次输入密码,在输入新密码时候需要二次确认,以防止误操作。
二.设计要求和方案选择
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];