電子密碼鎖的設(shè)計(jì)
模擬電子密碼鎖,實(shí)現(xiàn)密碼設(shè)置、密碼匹配、開鎖,具體內(nèi)容如下(以4*3鍵為例):
1.按“*”鍵清空當(dāng)前顯示。
2.按1~9鍵可輸入密碼,每輸入一個(gè)密碼,都在數(shù)碼管中顯示。
3.四位密碼輸入結(jié)束后按“#”鍵保存(密碼設(shè)置過程)或判斷(密碼判斷過程)。
4密碼輸入正確則顯示“并開鎖(繼電器所接LED亮如圖一),否則顯示“OFF且不開鎖(LED不亮,如圖二)。
5.如果三次密碼錯(cuò)誤,鎖死30秒。
6.按*0鍵可重新設(shè)置密碼。
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};//密碼存儲(chǔ)
uchar mima1[4]={1,2,3,4};//固定密碼
uchar xian[4]={0xff,0xff,0xff,0xff};
uint time=0,time0=0,time1=0;//定時(shí)
uint qidong=0;//啟動(dòng)計(jì)時(shí)
uchar error=0;
uchar shunxu=0;//顯示順序
uchar mode=0;//模式。輸入、設(shè)置
uint sec=0;
void delay(uint i)//延時(shí)
{
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()//主函數(shù)
{
uchar i,j,num=0;
led=0;
TMOD|=0X01;//定時(shí)器初始化
TH0=(65536-50000)/256; //定時(shí)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)//設(shè)置密碼
{
mode=1;
mima0[0]=0;//輸入緩存清零
mima0[1]=0;
mima0[2]=0;
mima0[3]=0;
if(mode)
{
xian[0]=smgduan[mima0[0]];//計(jì)算顯示
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;
}
?資料借鑒于此紛傳