基于51单片机的8位电子密码锁.docx
- 文档编号:8611990
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:18
- 大小:47.48KB
基于51单片机的8位电子密码锁.docx
《基于51单片机的8位电子密码锁.docx》由会员分享,可在线阅读,更多相关《基于51单片机的8位电子密码锁.docx(18页珍藏版)》请在冰豆网上搜索。
基于51单片机的8位电子密码锁
课程设计
基于51单片机的8位电子密码锁
/****************************************************
8位电子密码锁程序
****************************************************/
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitfmq=P3^0;
sbitled1=P3^1;
sbitled2=P3^2;
sbitscl=P3^4;
sbitsda=P3^5;
ucharcodewela[]={
0xf7,0xfb,0xfd,0xfe,
0xef,0xdf,0xbf,0x7f
};
ucharcodedula[]={
0x24,0xbd,0xe0,0xa8,
0x39,0x2a,0x22,0xbc,
0x20,0x28,0x24,0xfb,
0xee,0x31,0Xef};
uchartemp;
uchar*play;
ucharscrea_ok=0;
ucharat24c02[8]={0,0,0,0,0,0,0,0};//存储源密码
ucharatdata[8]={11,11,11,11,11,11,11,11};//存储开锁密码
ucharatdata1[8]={12,12,12,12,12,12,12,12};//存储HHHHHHHH
ucharatdata2[8]={11,11,11,11,11,11,11,11};//存储修改密码
ucharatdata3[8]={14,14,14,14,14,14,14,14};//存储换密码时输入的密码
voidat24c02_init();
voidstart();
voidstop();
voidrespons0();//应答
voidrespons1();
voidwrite_add(ucharaddress,uchardate);
ucharread_add(ucharaddress);
voidread_data(void);
voidwrite_data(void);
ucharkeyscan();
voiddisplay();
voidkeyprocess();
voiddelay()
{;;;;;;}
voiddelayms(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidmain()
{
//at24c02_init();
play=atdata2;
read_data();
//write_data();
while
(1)
{
display();
keyprocess();
}
}
voiddisplay()
{
ucharj;
for(j=0;j<=7;j++)
{
P1=0Xff;
P0=dula[play[j]];
P1=wela[j];
P1=0Xff;
}
}
ucharkeyscan()
{
ucharnum=0xff;
P2=0xfe;
temp=P2;
temp=temp&0xf0;
while(temp!
=0xf0)
{
delayms(5);
temp=P2;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P2;
switch(temp)
{
case0xee:
num=1;
break;
case0xde:
num=2;
break;
case0xbe:
num=3;
break;
case0x7e:
num=4;
break;
}
while(temp!
=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
}
}
P2=0xfd;
temp=P2;
temp=temp&0xf0;
while(temp!
=0xf0)
{
delayms(5);
temp=P2;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P2;
switch(temp)
{
case0xed:
num=5;
break;
case0xdd:
num=6;
break;
case0xbd:
num=7;
break;
case0x7d:
num=8;
break;
}
while(temp!
=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
}
}
P2=0xfb;
temp=P2;
temp=temp&0xf0;
while(temp!
=0xf0)
{
delayms(5);
temp=P2;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P2;
switch(temp)
{
case0xeb:
num=9;
break;
case0xdb:
num=0;
break;
case0xbb:
num=11;
break;
case0x7b:
num=12;
break;
}
while(temp!
=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
}
}
P2=0xf7;
temp=P2;
temp=temp&0xf0;
while(temp!
=0xf0)
{
delayms(5);
temp=P2;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P2;
switch(temp)
{
case0xe7:
num=13;
break;
case0xd7:
num=14;
break;
case0xb7:
num=15;
break;
case0x77:
num=16;
break;
}
while(temp!
=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
}
}
returnnum;
}
voidkeyprocess()
{
ucharkeydata=0;
uchari,error=0;
staticunsignedcharflag=0;
staticunsignedcharnum=0;
keydata=keyscan();
if(keydata==0xff)
return;
switch(keydata)
{
case1:
case2:
case3:
case4:
case5:
case6:
case7:
case8:
case9:
case0:
if(flag==1)
{
if(num<8)
{
atdata3[num]=13;
atdata[num]=keydata;
num++;
}
}
else
if(flag==2)
{
if(num<8)
{
atdata1[num]=keydata;
num++;
}
}
else
{
if(num<8)
{
atdata2[num]=13;
atdata[num]=keydata;
num++;
}
}
break;
case11:
if(flag==0&&num==8)
{
num=0;
for(i=0;i<8;i++)
{
if(atdata[i]==at24c02[i])
{
;
}
else
{
error=1;
}
}
if(error==0)
{
led1=0;
delayms(1000);
led1=1;
}
else
{
led2=0;
fmq=0;
delayms(500);
led2=1;
fmq=1;
delayms(500);
led2=0;
fmq=0;
delayms(500);
led2=1;
fmq=1;
delayms(500);
led2=0;
fmq=0;
delayms(500);
led2=1;
fmq=1;
}
error=0;
for(i=0;i<8;i++)
{
atdata[i]=11;
atdata2[i]=11;
}
}
else
if(flag==1&&num==8)
{num=0;
for(i=0;i<8;i++)
{
if(atdata[i]==at24c02[i]);
else
{
error=1;
}
}
if(error==0)
{
flag=2;
play=atdata1;
}
else
{
led2=0;
fmq=0;
delayms(500);
led2=1;
fmq=1;
delayms(500);
led2=0;
fmq=0;
delayms(500);
led2=1;
fmq=1;
delayms(500);
led2=0;
fmq=0;
delayms(500);
led2=1;
fmq=1;
}
error=0;
for(i=0;i<8;i++)
{
atdata[i]=11;
atdata3[i]=14;
}
}
break;
case12:
if(num>0)
{
num--;
if(flag==1)
{
atdata3[num]=14;
}
if(flag==2)
{
atdata1[num]=12;
}
else
{atdata[num]=11;
atdata2[num]=11;
}
}
break;
case13:
if(flag==0)
{
play=atdata3;
flag=1;
}
break;
case14:
if(flag==2&&num==8)
{
write_data();
for(i=0;i<8;i++)
{
at24c02[i]=atdata1[i];
}
led1=0;
delayms(300);
led1=1;
delayms(300);
led1=0;
delayms(300);
led1=1;
delayms(300);
led1=0;
delayms(300);
led1=1;
for(i=0;i<8;i++)
{
atdata2[i]=11;
}
play=atdata2;
for(i=0;i<8;i++)
{
atdata1[i]=12;
}
flag=0;
num=0;
}
break;
case15:
flag=0;
play=atdata2;
break;
case16:
/*on=0;
flag=0;
num=0;
play=atdata2;
for(i=0;i<8;i++)
{
atdata2[i]=11;
}*/
break;
}
}
voidstart()//开始信号
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
}
voidstop()//停止
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}
voidrespons0()//应答
{
sda=0;
delay();
scl=1;
delay();
scl=0;
delay();
}
voidrespons1()//应答
{
sda=1;
delay();
scl=1;
delay();
scl=0;
delay();
}
voidinit()
{
sda=1;
delay();
scl=1;
delay();
}
voidwrite_byte(uchardate)
{
uchari,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
delay();
sda=CY;
delay();
scl=1;
delay();
//scl=0;
//delay();
}
scl=0;
delay();
sda=1;
delay();
}
ucharread_byte()
{
uchari,k;
scl=0;
delay();
sda=1;
delay();
for(i=0;i<8;i++)
{
scl=1;
delay();
k=(k<<1)|sda;
scl=0;
delay();
}
returnk;
}
voidwrite_add(ucharaddress,uchardate)
{
start();
write_byte(0xa0);
respons0();
write_byte(address);
respons0();
write_byte(date);
respons0();
stop();
}
ucharread_add(ucharaddress)
{
uchardate;
start();
write_byte(0xa0);
respons0();
write_byte(address);
respons0();
start();
write_byte(0xa1);
respons0();
date=read_byte();
respons1();
stop();
returndate;
}
voidread_data()
{
uchari;
for(i=0;i<8;i++)
{
delayms(5);
at24c02[i]=read_add(i);
delayms(5);
}
}
voidwrite_data()
{
uchari;
for(i=0;i<8;i++)
{
delayms(5);
write_add(i,atdata1[i]);
delayms(5);
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 电子 密码锁