毕业设计密码锁电路程序.docx

上传人:b****5 文档编号:14484880 上传时间:2023-06-23 格式:DOCX 页数:18 大小:39.90KB
下载 相关 举报
毕业设计密码锁电路程序.docx_第1页
第1页 / 共18页
毕业设计密码锁电路程序.docx_第2页
第2页 / 共18页
毕业设计密码锁电路程序.docx_第3页
第3页 / 共18页
毕业设计密码锁电路程序.docx_第4页
第4页 / 共18页
毕业设计密码锁电路程序.docx_第5页
第5页 / 共18页
毕业设计密码锁电路程序.docx_第6页
第6页 / 共18页
毕业设计密码锁电路程序.docx_第7页
第7页 / 共18页
毕业设计密码锁电路程序.docx_第8页
第8页 / 共18页
毕业设计密码锁电路程序.docx_第9页
第9页 / 共18页
毕业设计密码锁电路程序.docx_第10页
第10页 / 共18页
毕业设计密码锁电路程序.docx_第11页
第11页 / 共18页
毕业设计密码锁电路程序.docx_第12页
第12页 / 共18页
毕业设计密码锁电路程序.docx_第13页
第13页 / 共18页
毕业设计密码锁电路程序.docx_第14页
第14页 / 共18页
毕业设计密码锁电路程序.docx_第15页
第15页 / 共18页
毕业设计密码锁电路程序.docx_第16页
第16页 / 共18页
毕业设计密码锁电路程序.docx_第17页
第17页 / 共18页
毕业设计密码锁电路程序.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

毕业设计密码锁电路程序.docx

《毕业设计密码锁电路程序.docx》由会员分享,可在线阅读,更多相关《毕业设计密码锁电路程序.docx(18页珍藏版)》请在冰点文库上搜索。

毕业设计密码锁电路程序.docx

毕业设计密码锁电路程序

密码锁

本设计以STC89C52RC单片机为核心,利用AT24C02存储密码,做到掉电存储密码的电子密码锁。

电路:

程序:

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

#defineN7

#defineOP_READ0xa1//器件地址以及读取操作

#defineOP_WRITE0xa0//器件地址以及写入操作

#defineMAX_ADDR0x7f//AT24C02最大地址

sbitSCL=P2^0;

sbitSDA=P2^1;

sbitCSH=P3^0;

sbite=P3^4;

sbitrs=P3^5;

sbitsp=P3^6;

sbitlock=P3^1;

sfrduan=0x80;

sfrkey=0x90;

uintci;

ucharkc,sc,sc2;

intshu1,shu2,jh,jg;

ucharcodetable[]="LOCK";

ucharcodetable2[]="WELLCOMETOUSE!

";

ucharcodetable3[]="PASSWORD:

";

ucharcodetable4[]="ERRO!

";

ucharcodetable5[]="OPEN!

";

ucharcodetable6[]="NEWPASSWORD";

ucharcodetable7[]="SUCCESSFUL!

";

ucharcodetable8[]="FAIL!

";

ucharcodecmm[6]={1,2,3,3,2,1};

ucharmm[6];

uchartablesuan[N];

voidinit();

voidwritec(uintcom);

voidwrited(uintdat);

voiddelay(uintshu);

ucharkeyscan();

voidxieshuzu(uchara[],ucharadd);

voidshuru();

voidkaiji();

voidbijiao();

voidxies(uchara,ucharadd);

voiddelayms(unsignedcharms);

voidgmm();

/***********************/

/***********************/

/***********************/

voidstart()

//开始位

{

SDA=1;

SCL=1;

_nop_();

_nop_();

SDA=0;

_nop_();

_nop_();

_nop_();

_nop_();

SCL=0;

}

voidstop()

//停止位

{

SDA=0;

_nop_();

_nop_();

SCL=1;

_nop_();

_nop_();

_nop_();

_nop_();

SDA=1;

}

unsignedcharshin()

//从AT24Cxx移入数据到MCU

{

unsignedchari,read_data;

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

{

SCL=1;

read_data<<=1;

read_data|=(unsignedchar)SDA;

SCL=0;

}

return(read_data);

}

bitshout(unsignedcharwrite_data)

//从MCU移出数据到AT24Cxx

{

unsignedchari;

bitack_bit;

for(i=0;i<8;i++)//循环移入8个位

{

SDA=(bit)(write_data&0x80);

_nop_();

SCL=1;

_nop_();

_nop_();

SCL=0;

write_data<<=1;

}

SDA=1;//读取应答

_nop_();

_nop_();

SCL=1;

_nop_();

_nop_();

_nop_();

_nop_();

ack_bit=SDA;

SCL=0;

returnack_bit;//返回AT24Cxx应答位

}

voidwrite_byte(unsignedcharaddr,unsignedcharwrite_data)

//在指定地址addr处写入数据write_data

{

start();

shout(OP_WRITE);

shout(addr);

shout(write_data);

stop();

delayms(10);//写入周期

}

unsignedcharread_current()

//在当前地址读取

{

unsignedcharread_data;

start();

shout(OP_READ);

read_data=shin();

stop();

returnread_data;

}

unsignedcharread_random(unsignedcharrandom_addr)

//在指定地址读取

{

start();

shout(OP_WRITE);

shout(random_addr);

return(read_current());

}

voiddelayms(unsignedcharms)

//延时子程序

{

unsignedchari;

while(ms--)

{

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

}

}

/***********************/

/***********************/

/***********************///主程序/

voidmain()

{init();

kaiji();

delay(1000);

writec(0x01);

xieshuzu(table3,0x80);

if(CSH==0)

{

write_byte(2,cmm[0]);//在24c02的地址2中写入数据sec

delayms

(2);

write_byte(3,cmm[1]);//在24c02的地址2中写入数据sec

delayms

(2);

write_byte(4,cmm[2]);//在24c02的地址2中写入数据sec

delayms

(2);

write_byte(5,cmm[3]);//在24c02的地址2中写入数据sec

delayms

(2);

write_byte(6,cmm[4]);//在24c02的地址2中写入数据sec

delayms

(2);

write_byte(7,cmm[5]);//在24c02的地址2中写入数据sec

delayms

(2);

}

mm[0]=read_random

(2);

delayms

(2);

mm[1]=read_random(3);

delayms

(2);

mm[2]=read_random(4);

delayms

(2);

mm[3]=read_random(5);

delayms

(2);

mm[4]=read_random(6);

delayms

(2);

mm[5]=read_random(7);

while

(1)

{

lock=0;

shuru();

bijiao();

}

}

/***********************///初始化/

voidinit()

{

lock=0;

writec(0x01);

writec(0x38);

writec(0x0c);

IT0=1;

EX0=1;

}

/***********************///写开机画面/

voidkaiji()

{

xieshuzu(table,0x80);

xieshuzu(table2,0xc0);

}

/***********************///写数组/

voidxieshuzu(uchara[],ucharadd)

{

ucharcis;

writec(add);

for(cis=0;a[cis]!

='\0';cis++)

{

writed(a[cis]);

delay

(2);

}

}

/***********************///写数字/

voidxies(uchara,ucharadd)

{

writec(add);

writed(0x30+a);

}

/***********************///写指令/

voidwritec(uintcom)

{

e=0;

rs=0;

duan=com;

delay

(2);

e=1;

delay

(2);

e=0;

}

/***********************///写数据/

voidwrited(uintdat)

{

e=0;

rs=1;

duan=dat;

delay

(2);

e=1;

delay

(2);

e=0;

}

/***********************///延时/

voiddelay(uintshu)

{

uinti,j;

for(i=shu;i>0;i--)

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

}

/***********************///现盘扫描/

ucharkeyscan()

{

uchark,skey;

key=0xfe;

skey=key;

sp=1;

if(skey!

=0xfe)

{

delay(10);

skey=key;

if(skey!

=0xfe)

{

switch(skey)

{

case(0xee):

k=7;kc++;break;

case(0xde):

k=8;kc++;break;

case(0xbe):

k=9;kc++;break;

case(0x7e):

k=0x0a;kc++;break;

default:

break;

}

while(skey!

=0xfe)

skey=key;

sp=0;

returnk;

}

}

key=0xfd;

skey=key;

if(skey!

=0xfd)

{

delay(10);

skey=key;

if(skey!

=0xfd)

{

switch(skey)

{

case(0xed):

k=4;kc++;break;

case(0xdd):

k=5;kc++;break;

case(0xbd):

k=6;kc++;break;

case(0x7d):

k=0x0b;kc++;break;

default:

break;

}

while(skey!

=0xfd)

skey=key;

sp=0;

returnk;

}

}

key=0xfb;

skey=key;

if(skey!

=0xfb)

delay(10);

skey=key;

if(skey!

=0xfb)

{

switch(skey)

{

case(0xeb):

k=1;kc++;break;

case(0xdb):

k=2;kc++;break;

case(0xbb):

k=3;kc++;break;

case(0x7b):

k=0x0c;kc++;break;

default:

break;

}

while(skey!

=0xfb)

skey=key;

sp=0;

returnk;

}

key=0xf7;

skey=key;

if(skey!

=0xf7)

{

delay(10);

skey=key;

if(skey!

=0xf7)

{

switch(skey)

{

case(0xe7):

k=0x0d;kc++;break;

case(0xd7):

k=0;kc++;break;

case(0xb7):

k=0x0e;kc++;break;

case(0x77):

k=0x0f;kc++;break;

default:

break;

}

while(skey!

=0xf7)

skey=key;

sp=0;

returnk;

}

}

}

/***********************///输入数据处理/

voidshuru()

{

uchark=0,xw=0x80;

sc=0;kc=0;

xieshuzu(table3,0x80);

do

{

while(kc==sc)

k=keyscan();

if(kc==1)

writec(0x01);

tablesuan[sc]=k;

//xies(tablesuan[sc],xw);

xies(tablesuan[sc],0xc0);

writec(xw);

writed(0x2A);

xw++;

if(sc==5)

gotoout;

}

while((tablesuan[sc++]<=9)&&(sc

out:

;

if(sc>N)

{

writec(0x01);

xieshuzu(table4,0x80);

}

}

voidbijiao()

{

if((tablesuan[0]==mm[0])&&(tablesuan[1]==mm[1])&&(tablesuan[2]==mm[2])&&(tablesuan[3]==mm[3])&&(tablesuan[4]==mm[4])&&(tablesuan[5]==mm[5]))

{

EA=1;

lock=1;

writec(0x01);

xieshuzu(table5,0x80);

delay(6500);

EA=0;

}

else

{

writec(0x01);

xieshuzu(table3,0x80);

}

}

voidgmm()

{

uchark=0,xw=0x80;

sc2=0;kc=0;

xieshuzu(table6,0x80);

do

{

while(kc==sc2)

k=keyscan();

if(kc==1)

writec(0x01);

mm[sc2]=k;

xies(mm[sc2],0xc0);

writec(xw);

writed(0x2A);

xw++;

if(sc2==5)

gotoout2;

}

while((mm[sc2++]<=9)&&(sc2

//out:

;

//if(sc>N)

//{

writec(0x01);

xieshuzu(table8,0x80);

gotoout3;

//}

out2:

;

writec(0x01);

xieshuzu(table7,0x80);

write_byte(2,mm[0]);//在24c02的地址2中写入数据sec

delayms

(2);

write_byte(3,mm[1]);//在24c02的地址2中写入数据sec

delayms

(2);

write_byte(4,mm[2]);//在24c02的地址2中写入数据sec

delayms

(2);

write_byte(5,mm[3]);//在24c02的地址2中写入数据sec

delayms

(2);

write_byte(6,mm[4]);//在24c02的地址2中写入数据sec

delayms

(2);

write_byte(7,mm[5]);//在24c02的地址2中写入数据sec

delayms

(2);

out3:

;

}

voidINTT0()interrupt0

{

EA=0;

gmm();

EA=1;

}

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

当前位置:首页 > 农林牧渔 > 林学

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

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