单片机电子密码锁可以修改设置密码基于51单片机与AT24C02与LCD1602显示.docx

上传人:b****2 文档编号:1070342 上传时间:2023-04-30 格式:DOCX 页数:15 大小:23.57KB
下载 相关 举报
单片机电子密码锁可以修改设置密码基于51单片机与AT24C02与LCD1602显示.docx_第1页
第1页 / 共15页
单片机电子密码锁可以修改设置密码基于51单片机与AT24C02与LCD1602显示.docx_第2页
第2页 / 共15页
单片机电子密码锁可以修改设置密码基于51单片机与AT24C02与LCD1602显示.docx_第3页
第3页 / 共15页
单片机电子密码锁可以修改设置密码基于51单片机与AT24C02与LCD1602显示.docx_第4页
第4页 / 共15页
单片机电子密码锁可以修改设置密码基于51单片机与AT24C02与LCD1602显示.docx_第5页
第5页 / 共15页
单片机电子密码锁可以修改设置密码基于51单片机与AT24C02与LCD1602显示.docx_第6页
第6页 / 共15页
单片机电子密码锁可以修改设置密码基于51单片机与AT24C02与LCD1602显示.docx_第7页
第7页 / 共15页
单片机电子密码锁可以修改设置密码基于51单片机与AT24C02与LCD1602显示.docx_第8页
第8页 / 共15页
单片机电子密码锁可以修改设置密码基于51单片机与AT24C02与LCD1602显示.docx_第9页
第9页 / 共15页
单片机电子密码锁可以修改设置密码基于51单片机与AT24C02与LCD1602显示.docx_第10页
第10页 / 共15页
单片机电子密码锁可以修改设置密码基于51单片机与AT24C02与LCD1602显示.docx_第11页
第11页 / 共15页
单片机电子密码锁可以修改设置密码基于51单片机与AT24C02与LCD1602显示.docx_第12页
第12页 / 共15页
单片机电子密码锁可以修改设置密码基于51单片机与AT24C02与LCD1602显示.docx_第13页
第13页 / 共15页
单片机电子密码锁可以修改设置密码基于51单片机与AT24C02与LCD1602显示.docx_第14页
第14页 / 共15页
单片机电子密码锁可以修改设置密码基于51单片机与AT24C02与LCD1602显示.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机电子密码锁可以修改设置密码基于51单片机与AT24C02与LCD1602显示.docx

《单片机电子密码锁可以修改设置密码基于51单片机与AT24C02与LCD1602显示.docx》由会员分享,可在线阅读,更多相关《单片机电子密码锁可以修改设置密码基于51单片机与AT24C02与LCD1602显示.docx(15页珍藏版)》请在冰点文库上搜索。

单片机电子密码锁可以修改设置密码基于51单片机与AT24C02与LCD1602显示.docx

单片机电子密码锁可以修改设置密码基于51单片机与AT24C02与LCD1602显示

单片机电子密码锁(可以修改设置密码)——基于51单片机与AT24C02与LCD1602显示

其电路图连接如下:

本人已经用硬件实验,程序可用。

正确~~

本程序特点:

装载后读者可以自改密码,然后需要再次载入程序时:

可以把主程序aa=Sendstring(0xa0,1,table2,6);这一句去掉。

然后程序的电子锁密码就是你个人设置的密码。

程序代码为:

#include

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

#defineLCDIOP2

#definedelay4us()_nop_();_nop_();_nop_();_nop_();

ucharbuffer[6]={0};

sbitsda=P3^7;

sbitscl=P3^6;

sbitbeep=P3^5;

bitflag=0,aa;//用户蹲渊义定时溢出标志位

ucharDSY_BUFFER[16]="";

ucharDSY_BUFFER1[16]="";

ucharUserpassword[6]={0};

sbitrs=P0^4;

sbitrd=P0^3;

sbitlcden=P0^2;

sbitled=P3^0;

ucharcodetable2[]="123456";

ucharcodetable[]="YourPassword...";

voiddelayms(uintz)

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

voiddelay()//短延时,两个机器周期,做总线的延时用

{;;}

voidwrite_com(ucharcom)

{

rs=0;

rd=0;

lcden=0;

P2=com;

delayms(3);

lcden=1;

delayms(3);

lcden=0;

}

voidwrite_date(uchardate)

{

rs=1;

rd=0;

lcden=0;

P2=date;

delayms(3);

lcden=1;

delayms(3);

lcden=0;

}

voidDisplay_String(uchar*p,ucharcom)

{uchari;

write_com(com);

for(i=0;i<16;i++)

{

write_date(p[i]);

}

}

voidinit_lcd()

{

lcden=0;

write_com(0x38);

write_com(0x0c);

write_com(0x06);

write_com(0x01);

write_com(0x80);

Display_String(table,0x80);

Display_String("LockOK!

",0xc0);

}

voidstart()

{

sda=1;

scl=1;

delay4us();

sda=0;

delay4us();

scl=0;

}

voidstop()

{

sda=0;

scl=1;

delay4us();

sda=1;

delay4us();

scl=0;

}

voidinit()//初始化

{

sda=1;

delay();

scl=1;

delay();

}

voidack()

{

sda=0;

scl=1;

delay4us();

scl=0;

sda=1;

}

voidnoack()

{

sda=1;

scl=1;

delay4us();

scl=0;

sda=0;

}

ucharrecbyte()

{

uchari,rd;

rd=0x00;

sda=1;

for(i=0;i<8;i++)

{

scl=1;

rd<<=1;

rd|=sda;

delay4us();

scl=0;

delay4us();

}

scl=0;

delay4us();

returnrd;

}

ucharsendbyte(ucharwd)

{

uchari;

bitack0;

for(i=0;i<8;i++)

{

sda=(bit)(wd&0x80);

_nop_();

_nop_();

scl=1;

delay4us();

scl=0;

wd<<=1;

}

delay4us();

sda=1;

scl=1;

delay4us();

ack0=!

sda;

scl=0;

delay4us();

returnack0;

}

ucharRecstring(ucharslave,ucharsubaddr,uchar*buffer,ucharn)

{

uchari;

start();

if(!

sendbyte(slave))return0;

if(!

sendbyte(subaddr))return0;

start();

if(!

sendbyte(slave+1))return0;

for(i=0;i

{

buffer[i]=recbyte();

ack();

}

buffer[n-1]=recbyte();

noack();

stop();

return1;

}

ucharSendstring(ucharslave,ucharsubaddr,uchar*buffer,ucharn)

{

uchari;

start();

if(!

sendbyte(slave))return0;

if(!

sendbyte(subaddr))return0;

for(i=0;i

{

if(!

sendbyte(buffer[i]))return0;

}

stop();

return1;

}

voidclear_password()

{uchari;

for(i=0;i<6;i++)

{

Userpassword[i]='';

}

for(i=0;i<16;i++)

{

DSY_BUFFER[i]='';

}

}

ucharKeys_Scan()

{

uchartemp,keynum;

P1=0x0F;

delayms(5);

temp=P1^0x0F;

switch(temp)

{

case1:

keynum=0;break;

case2:

keynum=1;break;

case4:

keynum=2;break;

case8:

keynum=3;break;

break;

}

P1=0xF0;

delayms(5);

temp=P1>>4^0x0F;

switch(temp)

{

case1:

keynum+=0;break;

case2:

keynum+=4;break;

case4:

keynum+=8;break;

case8:

keynum+=12;break;

break;

}

delayms(600);

returnkeynum;

}

voidmain()

{uchartemp,i=0,j=0,k=0,n;

ucharIS_valid_user;

beep=1;

init();

init_lcd();

delayms(5);

aa=Sendstring(0xa0,1,table2,6);

delayms(5);

aa=Recstring(0xa0,1,buffer,6);

delayms(10);

P1=0x0f;

while

(1)

{

if(P1!

=0x0f)

{

temp=Keys_Scan();

switch(temp)

{

case0:

case1:

case2:

case3:

case4:

case5:

case6:

case7:

case8:

case9:

if(i<=5)//密码限制在6位以内

{

Userpassword[i]=temp;

DSY_BUFFER[i]='*';

Display_String(DSY_BUFFER,0xc0);

i++;

}

break;

case10:

//按A键开锁

for(k=0;k<6;k++)

{

if(buffer[k]==(Userpassword[k]+48))

flag=1;

else

flag=0;

}

if(flag==1)

{flag=0;

i=0;

led=0;//点亮LED

clear_password();

Display_String("OPENOK!

",0xc0);

IS_valid_user=1;

j=0;

}

else

{

j++;

led=1;//关闭LED

clear_password();

Display_String("ERROR!

Havetry",0xc0);

write_com(0xcf);

write_date(0x30+j);

IS_valid_user=0;

}

i=0;

break;

case11:

//按B键上锁

led=1;

clear_password();

Display_String(table,0x80);

Display_String("LockOK!

",0xc0);

i=0;

IS_valid_user=0;

break;

case12:

//按C键设置新密码

//如果是合法用户则提示输入新密码

if(!

IS_valid_user)

{

i=0;

Display_String("Norights!

",0xc0);

delayms(1000);

Display_String("YourPassword...",0x80);

Display_String("LockOK!

",0xc0);

}

else

{

i=0;

Display_String("NewPassword:

",0x80);

Display_String("",0xc0);

}

break;

case13:

//按D键保存新密码

if(!

IS_valid_user)

{i=0;

Display_String("Norights!

",0xc0);

delayms(1000);

Display_String("YourPassword...",0x80);

Display_String("LockOK!

",0xc0);

}

else

{i=0;

init();

delayms(5);

for(k=0;k<6;k++)

{

Userpassword[k]=Userpassword[k]+48;

}

aa=Sendstring(0xa0,1,Userpassword,6);

delayms(5);

aa=Recstring(0xa0,1,buffer,6);

delayms(5);

clear_password();

Display_String(table,0x00);

Display_String("PasswordSaved!

",0xc0);

delayms(1000);

Display_String("Dolockagian?

",0xc0);

}

break;

case14:

//按E键消除所有输入

i=0;

clear_password();

Display_String("",0xc0);

break;

case15:

//清除一位

if(i!

=0)i--;

for(n=0;n

{

DSY_BUFFER1[n]='*';

}

Display_String(DSY_BUFFER1,0xc0);

}

P1=0x0f;

}

if(j==3)

{Display_String("THIEF!

!

!

THIEF!

!

!

",0xc0);

j=0;

beep=0;

}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2