电子密码锁的设计
模拟电子密码锁,实现密码设置、密码匹配、开锁,具体内容如下(以4*3键为例):
1.按“*”键清空当前显示。
2.按1~9键可输入密码,每输入一个密码,都在数码管中显示。
3.四位密码输入结束后按“#”键保存(密码设置过程)或判断(密码判断过程)。
4密码输入正确则显示“并开锁(继电器所接LED亮如图一),否则显示“OFF且不开锁(LED不亮,如图二)。
5.如果三次密码错误,锁死30秒。
6.按*0键可重新设置密码。
bit smg2=P3^2;
sbit smg3=P3^3;
sbit smg4=P3^4;
sbit k1=P2^0;//按键
sbit k2=P2^1;
sbit k3=P2^2;
sbit ss1=P2^4;
sbit ss2=P2^5;
sbit ss3=P2^6;
sbit ss4=P2^7;
uchar code smgduan[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xbf,0x7f};
uchar mima0[4]={0,0,0,0};//密码存储
uchar mima1[4]={1,2,3,4};//固定密码
uchar xian[4]={0xff,0xff,0xff,0xff};
uint time=0,time0=0,time1=0;//定时
uint qidong=0;//启动计时
uchar error=0;
uchar shunxu=0;//显示顺序
uchar mode=0;//模式。输入、设置
uint sec=0;
void delay(uint i)//延时
{
while(i--);
}
uchar key_scan()//按键检测
{
uchar i;
i=0xff;
k1=0;k3=1;k2=1;
if(!ss1)
{
i=1;
}
if(!ss2)
{
i=4;
}
if(!ss3)
{
i=7;
}
if(!ss4)
{
i=10;
}
k2=0;k1=1;
if(!ss1)
{
i=2;
}
if(!ss2)
{
i=5;
}
if(!ss3)
{
i=8;
}
if(!ss4)
{
i=0;
}
k3=0;k2=1;
if(!ss1)
{
i=3;
}
if(!ss2)
{
i=6;
}
if(!ss3)
{
i=9;
}
if(!ss4)
{
i=11;
}
k1=0;k2=0;k3=0;
if(i>0)
time=500;
while((P2 & 0xf0)!=0xf0);
return(i);
}
void main()//主函数
{
uchar i,j,num=0;
led=0;
TMOD|=0X01;//定时器初始化
TH0=(65536-50000)/256; //定时50ms
TL0=(65536-50000)%256;
ET0=1;
TR0=1;
EA=1;
while(1)
{
//显示
P0=xian[0];
smg1=0;
delay(100);
smg1=1;
P0=xian[1];
smg2=0;
delay(100);
smg2=1;
P0=xian[2];
smg3=0;
delay(100);
smg3=1;
P0=xian[3];
smg4=0;
delay(100);
smg4=1;
i=key_scan();//按键检测
if(i==0)//设置密码
{
mode=1;
mima0[0]=0;//输入缓存清零
mima0[1]=0;
mima0[2]=0;
mima0[3]=0;
if(mode)
{
xian[0]=smgduan[mima0[0]];//计算显示
xian[1]=smgduan[mima0[1]];
xian[2]=smgduan[mima0[2]];
xian[3]=smgduan[mima0[3]];
}
else
{
xian[0]=0xff;
xian[1]=0xff;
xian[2]=0xff;
xian[3]=0xff;
}
资料借鉴于此纷传
阅读全文