【资源下载】下载地址如下1582:
https://docs.qq.com/doc/DTlRSd01BZXNpRUxl
在日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。若使用传统的机械式钥匙开锁,人们常需携带多把钥匙, 使用极不方便, 且钥匙丢失后安全性即大打折扣。具有防盗报警等功能的电子密码锁代替密码量少、安全性差的机械式密码锁已是必然趋势。随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。密码锁具有安全性高、成本低、功耗低、易操作、记住密码即可开锁等优点。
目前使用的电子密码锁大部分是基于单片机技术,以单片机为主要器件,其编码器与解码器的生成为软件方式。
本系统由STC89C51单片机系统(主要是STC89C51单片机最小系统)、4×4矩阵键盘、LCD1602显示和报警系统等组成,具有设置、修改六位用户密码、超次报警、超次锁定、密码错误报警等功能(本设计由P0口控制LCD显示,密码正确显示OPEN! 密码错误显示error!超过三次输入错误自动锁定。由P1口控制矩阵键盘含有0-9数字键和A-D功能键。)。除上述基本的密码锁功能外,依据实际的情况还可以添加遥控功能。本系统成本低廉,功能实用。
//包含头文件
#include <REG51.h>
#include<intrins.h>
//宏定义
#define LCM_Data P0 //将P0口定义为LCM_Data
#define uchar unsigned char
#define uint unsigned int
//1602的控制脚
sbit lcd1602_rs=P2^5;
sbit lcd1602_rw=P2^6;
sbit lcd1602_en=P2^7;
sbit Scl=P3^4; //24C02串行时钟
sbit Sda=P3^5; //24C02串行数据
sbit ALAM = P2^1; //报警
sbit KEY = P3^6; //开锁
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 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]={0,0,0,0,0,0}; //读取EEPROM密码暂存数组
unsigned char TempPassword[6];
unsigned char N=0; //密码输入位数记数
unsigned char ErrorCont; //错误次数计数
unsigned char CorrectCont; //正确输入计数
unsigned char ReInputCont; //重新输入计数
unsigned char code initpassword[6]={0,0,0,0,0,0}; //输入管理员密码后将密码初始为000000
unsigned char code adminpassword[6]={1,3,1,4,2,0}; //输入管理员密码后将密码初始为000000