标题:
基于单片机的电子密码锁设计
[打印本页]
作者:
apink小丸子
时间:
2019-12-24 22:11
标题:
基于单片机的电子密码锁设计
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code number[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar code start[4]={0xbf,0x8e,0x8e,0xbf};
uchar code initial[4]={0xc0,0xc0,0xc0,0xc0};
uchar code bell[4]={0x83,0x84,0xc7,0xc7};
uchar code open[4]={0xc0,0x8c,0x86,0xc8};
uchar code no[4]={0xbf,0xc8,0xc0,0xbf};
uchar mima[4]={0xc0,0xc0,0xc0,0xc0};
uchar W[4]={0x0c,0xff,0xff,0xff};
uchar code p[4]={0xbf,0xbf,0xbf,0xbf};
uchar code o[4]={0x90,0xa3,0xa3,0xa1};
uint i=0,error=0,k=0,wc=4;
sbit H1=P3^0;
sbit H2=P3^1;
sbit H3=P3^2;
sbit H4=P3^3;
sbit S1=P2^3;
sbit S2=P2^2;
sbit S3=P2^1;
sbit S4=P2^0;
sbit pl=P3^7;
void delayMS(uint x)
{
uchar n;
while(x--)
{
for(n=120;n>0;n--);
}
}
void display()
{
P2=0x8f;
P0=W[0];
delayMS(4);
P2=0x4f;
P0=W[1];
delayMS(4);
P2=0x2f;
P0=W[2];
delayMS(4);
P2=0x1f;
P0=W[3];
delayMS(4);
P0=0xff;
}
void voice()
{
uchar i=0;
while(i++<=50)
{
delayMS(1);
if(i%3)
pl = ~pl;
}
pl = 0;
}
uint collect()
{
uint a=0;
H1=H2=H3=H4=0;
S1=S2=S3=S4=1;
if(S1==0)
{
delayMS(10);
if(S1==0)
{
S1=0;
H1=H2=H3=H4=1;
if(H1==0)
{
while(!H1);
a=1;
}
else if(H2==0)
{
while(!H2);
a=5;
}
else if(H3==0)
{
while(!H3);
a=9;
}
else if(H4==0)
{
while(!H4);
a=13;
}
}
}
else if(S2==0)
{
delayMS(10);
if(S2==0)
{
S2=0;
H1=H2=H3=H4=1;
if(H1==0)
{
while(!H1);
a=2;
}
else if(H2==0)
{
while(!H2);
a=6;
}
else if(H3==0)
{
while(!H3);
a=10;
}
}
}
else if(S3==0)
{
delayMS(10);
if(S3==0)
{
S3=0;
H1=H2=H3=H4=1;
if(H1==0)
{
while(!H1);
a=3;
}
else if(H2==0)
{
while(!H2);
a=7;
}
else if(H3==0)
{
while(!H3);
a=11;
}
}
}
else if(S4==0)
{
delayMS(10);
if(S4==0)
{
S4=0;
H1=H2=H3=H4=1;
if(H1==0)
{
while(!H1);
a=4;
}
else if(H2==0)
{
while(!H2);
a=8;
}
else if(H3==0)
{
while(!H3);
a=12;
}
else if(H4==0)
{
while(!H4);
a=16;
}
}
}
if(a!=0)
delayMS(10);
return a;
}
uchar code SONG_TONE[]=
{
212,212,190,212,159,169,212,212,190,212,142,
159,212,212,106,126,129,169,190,119,119,126,159,142,159,0
};
uchar code SONG_LONG[]=
{
9,3,12,12,12,24,9,3,12,12,12,24,9,3,12,12,12,12,12,9,3,12,12,12,24,0
};
void PlayMusic()
{
uint f =0,j,k;
while(SONG_LONG[f]!=0||SONG_TONE[f]!=0)
{
for(j=0;j<SONG_LONG[f]*20;j++)
{
pl = ~pl;
for(k=0;k<SONG_TONE[f]/3;k++);
}
delayMS(10);
f++;
}
}
void main()
{
loop:while(wc--)
W[wc]=start[wc];
wc=4;
loop3:pl=0;
i=0;
while(1)
{
display();
k=collect();
if(k>=1&&k<=10&&i<4)
{
W[i++]=number[k-1];
}
else if(k==12)
{ uchar n=0,m=4;
while(W[n]==mima[n])
{
n++;
if(n==4)
{
while(m--)
W[m]=open[m];
P1=0xfd;
PlayMusic();
delayMS(500);
error=0;
goto loop2;
}
}
while(m--)
W[m]=no[m];
error++;
goto loop3;
}
k=0;
while(error==3)
{
pl=1;
while(1)
{
while(wc--)
W[wc]=bell[wc];
wc=4;
display();
k=collect();
P1=0xfe;
voice();
delayMS(100);
P1=0xff;
delayMS(100);
if(k==16)
goto loop;
}
k=0;
}
}
loop2:i=0;
while(1)
{
display();
k=collect();
if(k==16)
{
goto loop;
}
else if(k==13)
{ P1=0xfb;
{
while(wc--)
W[wc]=p[wc];
wc=4;
i=0;
while(1)
{
display();
k=collect();
if(k>=1&&k<=10&&i<4)
{
W[i++]=number[k-1];
}
else if(k==12)
{
goto loop4;
}
}
loop4: while(wc--)
W[wc]=p[wc];
wc=4;
i=0;
while(1)
{
display();
k=collect();
if(k>=1&&k<=10&&i<4)
{
W[ i]=number[k-1];
mima[i++]=number[k-1];
}
else if(k==12)
{ P1=0xff;
delayMS(500);
P1=0xfd;
delayMS(500);
P1=0xff;
while(1)
{
while(wc--)
W[wc]=o[wc];
wc=4;
display();
k=collect();
if(k==16)
goto loop;
}
}
}
}
}
}
}
复制代码
图片1.png
(2.76 MB, 下载次数: 38)
下载附件
2019-12-24 22:11 上传
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1