电路如下图所示。采用Atmel公司的89S51单片机作控制芯片。用EEPROM,芯片AT24C02存储密码。键盘用废弃电话机的。数码管采用废弃的数显计时器上的拆除品。并在红色数码管前加红色滤镜以增强清晰度。调整R3和R4的阻值,让无动作时(P2.0为高电平)Q1、Q2截止;P2.0为低电平时,Q2导通,继电器输出。下图中。S1为复位键,S2为屋内开锁键。同时用作调整Q1、Q2的工作状态。C6与C3的作用是防止电磁干扰,避免继电器动作影响数字电路。
若无C6、C3,单片机则易受干扰导致程序跑飞。并影响EEPROM存储器内存储的内容。
程序采用C51编写。具有通俗易懂的特点。其主程序流程见右图.
初始化子函数见左图。
空白的AT24C02在使用之前需初始化,在相应地址装入原始数据中。可在程序初始化子函数的装密码入修改密码变量之前加入以下程序语句来进行AT24C02的初始化。
for (j=0;j<6;j++){wr_24c01(j,k);k++ :
}
初始化后的密码为:
123456。但正常使用密码锁时,需把上述语句删掉,以免每次启动后密码都变成123456。
键盘扫描采用定时器T0,在1OOms中断服务程序的30次计数中的第二次进行处理。
该中断服务程序如下:
void T0_ZD(void)inter-
rupt 1 using 2
{
THO=Oxd8;
TLO=OxfO;
if(q==1)
{
p++;}
if(p>=30)
{
p=0;
q=0;}
P1=OxfO;=0xf0
if(P1 != 0xfO)
{
if(p==0)q=1;
if(p==1)
{
sCAN_keyO;
if(Key_date>=OxOd)
{key_date=O;}
if(Key_date==OxOa)
{getpass=1;}
else
{getpass=0;}
if(getpass)
{
pass=!pass;}
if(pass)
{ one=Ox61;}
//第一位显示S
else
{one=Ox6e; }
//第一位显示J delay(1);
if(key_date==OxOc)
{
ok=l;
one=Ox28;
}
else
{ok=O;
}
if((ok ll getpass)==0)
∥不是按确认键和设定键
{
inmima[0]=inmima[1];
inmima[1]=inmima[2];
inmima[2]=inmima[3];
inmima[3]=inmima[4];
inmima[4]=inmima[5];
inmima[5]=key_date; }
two=SEG_7[key_date];
display0;
}}
}
该电路比较简单,按原理图接好并调整好R3和R4,就可以正常工作。