该设计基于STC单片机设计,电路主要由51单片机最小系统和按键部分、蜂鸣器报警部分、LCD液晶显示部分等组成。该电路设计简单,单层板加上几根跳线即可完成,适合电子初学者DIY制作。
电子密码锁具体功能介绍:
1、该电子密码锁默认密码为1234567890,密码通过键盘输入,若密码正确,则将锁打开。
2、密码可以由用户自己修改设定(只支持6位密码),锁打开后才能修改密码。修改密码之前必须再次输入密码,在输入新密码时候需要二次确认,以防止误操作。
3、报警、锁定键盘功能。密码输入错误显示器会出现错误提示,若密码输入错误次数超过3次,蜂鸣器报警并且锁定键盘。
4、AT24C02保存密码,支持复位保存,掉电保存功能。
附件内容包括:
整个电子密码锁原理图和PCB源文件,用AD软件打开;
Altium Designer画的原理图和PCB图如下:
单片机源程序如下:
#include
#define uint unsigned int
#define uchar unsigned char
sbit l1=P1^0; //LED指示
sbit bump=P2^2; //蜂鸣器控制
sbit relay=P2^3;//继电器输出
sbit lcden=P2^7;//LCD1602液晶控制端
sbit lcdrs=P2^6;
sbit sda=P2^0; //AT24C02数据端口
sbit scl=P2^1; //时钟端口
/**********显示内容**************************/
uchar code xianshi0[]="input password:";
uchar code xianshi1[]="please come in!";
uchar code xianshi2[]="*";
uchar code xianshi3[]=" you are thief!";
uchar code xianshi4[]=" new password:";
uchar code xianshi5[]=" alter succeed!";
uchar code xianshi6[]=" first error!";
uchar code xianshi7[]=" second error!";
uchar code xianshi8[]=" third error!";
uchar code xianshi9[]=" alter fail!!";
uchar table[8]; //给按键输入留取存储空间
uchar table1[8]; //给密码修改留取存储空间
uchar mima[8]; //给从存储中读取密码留取存储空间
uchar num,num1,num2,num3,etimes,fanhui,kai;
bit alterflog,cpflog,suoflog;//定义各种标志位 修改密码键按下标志 密码比较正确标志 上锁标志
void keyscan(); //声明键盘扫描函数
void init();
void keydeal15();
void keydeal16(); //声明初始化函数
/********************延时一毫秒函数**************/
void delay_xs(uint x)
{ uint i,j;
for(i=x;i>0;i--) for(j=110;j>0;j--);}
void writecom(uchar com) //写命令
{
lcdrs=0; P0=com; delay_xs(5);
lcden=1; delay_xs(5); lcden=0;
}
/*********************液晶写命令数据函数******************/
void writedate(uchar date) //写命令
{
lcdrs=1; P0=date; delay_xs(5);
lcden=1; delay_xs(5); lcden=0;
}
/***************24c02读取写入数据初始化****************/
void delay() //微妙级延时函数
{ ;; }
void start() //开始信号
{
sda=1; delay(); scl=1; delay(); sda=0; delay();
}
void stop() //停止
{
sda=0;delay();scl=1;delay();sda=1;delay();
}
void respons() //应答
{
uchar i;
scl=1; delay();
while((sda==1)&&(i<250)) i++;
scl=0; delay();
}
void write_byte(uchar date) //写一位数据
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0; delay(); sda=CY; delay();
scl=1; delay();
}
scl=0; delay();
sda=1; delay();
}
uchar read_byte() //读一位数据
{
uchar i,k;
scl=0; delay();
sda=1; delay();
for(i=0;i<8;i++)
{
scl=1; delay();
k=(k<<1)|sda;
scl=0; delay();
}
return k;
}
void write24c02(uchar address,uchar date) //写一字节函数
{
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
write_byte(date);
respons();
stop();
}
uchar read24c02(uchar address) //读一字节函数
{
uchar date;
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
start();
write_byte(0xa1);
respons();
date=read_byte();
stop();
return date;
}
/************各按键对应处理函数***************/
/*************各按键功能********************
1-2-3-4-5-6-7-8-9-0-确认-重新输入-未定义-上锁-密码修改
-密码修改确认-未定义*************************/
void keydeal1() //按键1
{
table[num]=1;
num++;
if(alterflog==1){table1[num1]=1;num1++; }
}
void keydeal2() //按键2
{
table[num]=2;
num++;
if(alterflog==1){table1[num1]=2;num1++; }
}
void keydeal3() //按键3
{
table[num]=3;
num++;
if(alterflog==1){table1[num1]=3;num1++; }
}
void keydeal4() //按键4
{
table[num]=4;
num++;
if(alterflog==1){table1[num1]=4;num1++; }
}
void keydeal5() //按键5
{
table[num]=5;
num++;
if(alterflog==1) {table1[num1]=5;num1++;}
}
void keydeal6() //按键6
{
table[num]=6;
num++;
if(alterflog==1){table1[num1]=6;num1++; }
}
void keydeal7() //按键7
{
table[num]=7;
num++;
if(alterflog==1){table1[num1]=7;num1++; }
}
void keydeal8() //按键8
{
table[num]=8;
num++;
if(alterflog==1){table1[num1]=8;num1++; }
}
void keydeal9() //按键9
{
table[num]=9;
num++;
if(alterflog==1){table1[num1]=9; num1++; }
}
void keydeal10() //按键10
{
table[num]=0; num++;
if(alterflog==1){table1[num1]=0;num1++; }
}
void compare() //比较密码正确与否函数
{
uchar j;
for(j=0;j<8;j++)
{
if(table[j]==mima[j]){cpflog=1;l1=0;}
else cpflog=0;
联系客服