工作室课题3密码锁设计Word文档下载推荐.docx

上传人:b****3 文档编号:16706961 上传时间:2022-11-25 格式:DOCX 页数:22 大小:159.69KB
下载 相关 举报
工作室课题3密码锁设计Word文档下载推荐.docx_第1页
第1页 / 共22页
工作室课题3密码锁设计Word文档下载推荐.docx_第2页
第2页 / 共22页
工作室课题3密码锁设计Word文档下载推荐.docx_第3页
第3页 / 共22页
工作室课题3密码锁设计Word文档下载推荐.docx_第4页
第4页 / 共22页
工作室课题3密码锁设计Word文档下载推荐.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

工作室课题3密码锁设计Word文档下载推荐.docx

《工作室课题3密码锁设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《工作室课题3密码锁设计Word文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。

工作室课题3密码锁设计Word文档下载推荐.docx

本方案选用了AT89C52单片机来作为本系统的核心,图二所示的是中央处理模块的电路部分,即单片机的电路连接。

图二、中央处理模块

2.2显示模块设计

本设计采用的是液晶1602作为显示部分,如图三所示。

图三、显示模块电路

2.3键盘模块设计

由于键盘个数较少,所以采用简单式键盘,其如图四所示。

(1)

(2)

图四、键盘模块电路

键盘模块有2个部分部分

(1)为功能键

(2)为数字键。

功能键共有3个按键,设置键、确认键和取消键,分别对应接到中央处理器P2.3,P3.5,P3.7引脚上。

数字键是矩阵键盘接到中央处理器的P1口。

2.4报警及开锁模块设计

本设计报警模块采用的是蜂鸣器,其管脚通过与三极管连接,然后在三极管的基极再接到单片机的IO引脚上,从而实现报警模块设计。

开锁模块采用有两种方式,一种是收到正确红外波后通过接通电磁锁开锁,另一种是输入的密码正确后开锁。

报警及开锁模块如图五所示。

图五、报警及温度采集电路

2.5遥控器部分

图六遥控器发射模块的电路连接图。

首先,将从串行发射口P3.1送出的数据反馈到P1.1口时行内部调制,再从P1.2口送出,再经过红外发射二极管发射出去,发射距离为10m

接收时:

采用与发射击队配套的红外接收头,将发射出的数据接收后送到串行口P3.0中,再由系统进行确认接收数据是否与发送数据是否相符,相符则开锁,以发光二极管亮来表示,不相符则放弃,以发光二极管灭来表示。

图六、发射模

三、系统软件设计

3.1主程序设计

系统的软件设计采用结构化和模块化设计的方法,便于程序的编写、调试和排除错误,同时也便于检验和维护。

根据设计的要求和前面描述的控制器系统硬件设计的具体情况,单片机系统的软件程序主要由以下模块组成:

初始化,显示,键盘,密码部分和开锁报警。

主程序发送和接受流程图如图七所示。

图七、发送,接受程序流程图

四、总结

由于本设计还在设计阶段一些功能还不完善,以上只是本设计的大体思路,程序设计采用模块化的方式,附录将贴上几个子程序。

目前通过仿真可以实现本机输入密码开锁功能(包括显示密码锁状态),遥控部分还有待于完善。

附录1系统电路原理图

附录2程序清单

初始化部分

#include<

reg52.h>

#include"

intrins.h"

#defineuintunsignedint

#defineucharunsignedchar

#definenop()_nop_()

sbitP17=P0^7;

sbitRS=P2^0;

sbitRW=P2^1;

sbitE=P2^2;

sbitset=P2^3;

sbitsuo=P2^4;

sbitsp=P2^7;

sbitok=P3^5;

sbitled=P3^6;

sbitquxiao=P3^7;

ucharkey,temp,flag=0;

ucharcodetable[6][16]={"

enterthecode:

"

"

1234567890a"

thenewcode:

error!

!

theoldcode:

welcome!

};

ucharcodetable0[6][7]={"

*"

**"

***"

****"

*****"

******"

ucharnum[]="

111111"

;

//初始密码

ucharkeyscan();

voiddisplay_1();

voiddisplay_0();

voiddisplay_2();

voiddisplay_4();

voiddisplay_3();

//error

voidSHOW_LCD();

voidbusy();

voidwrite1();

voidwrite2(uchari);

voidenter_code();

voidset_code();

voidenter_main();

voidset_main();

voiddelay(ucharz);

设置密码子程序:

ucharshe_mima()

{

uchark,j,q;

uchara,i,z,p;

a=keyscan();

if(a!

=0xa0)

{

while(table0[i][j]!

='

\0'

{

P0=0xc0;

write1();

delay(5);

write2(table0[i][j]);

j++;

}

j=0;

i=i+1;

if(i==6)

i=0;

k=k+1;

p=num[k];

if(a==p)

{

z=z+1;

}

if(k==6)

k=0;

}

if(ok==0)

if(z==6)

z=0;

q=1;

else

display_3();

delay(200);

display_0();

returnq;

}

voidset_code()//设置密码程序

uchara,i=0;

a=keyscan();

if(a!

i=i+1;

write2(table[1][a]);

默认开锁程序:

voidenter_main()

uchara=0,i=0;

display_0();

while(a==0)

P0=0xc0;

enter_code();

if(set==0)

{

a=1;

}

voidset_main()

uchark=0,a=0,b=0,i=0;

display_2();

while(b==0)

b=she_mima();

k=b;

if(quxiao==0)

{b=1;

}

}

if(k==1)

{

display_1();

set_code();

if(quxiao==0)

{

if(ok==0)

voidenter_code(){

uchara,k,i,z,p,j=0;

suo=1;

display_4();

suo=0;

display_0();

sp=1;

sp=0;

显示部分:

voiddisplay_0()//状态显示enterthecode

ucharj=0;

SHOW_LCD();

write1();

while(table[0][j]!

write2(table[0][j]);

P0=0xc0;

delay(5);

voiddisplay_1()//newcode

while(table[2][j]!

write2(table[2][j]);

voiddisplay_2()//oldcode

while(table[4][j]!

write2(table[4][j]);

P1=0xc0;

voiddisplay_3()//error

while(table[3][j]!

write2(table[3][j]);

voiddisplay_4()//error

while(table[5][j]!

write2(table[5][j]);

}

voidSHOW_LCD()//lcd设置程序

P0=0x38;

P0=0x01;

P0=0x06;

P0=0x0c;

P0=0x80;

voidbusy()//判断LCD是否忙

{

do

P0=0xff;

RS=0;

RW=1;

E=0;

nop();

E=1;

}while(P17==1);

voidwrite1()//lcd写控制字

RS=0;

RW=0;

busy();

voidwrite2(uchari)//lcd写数据

P0=i;

RS=1;

延时程序:

voiddelay(ucharz)

uintx,y;

for(x=z;

x>

0;

x--)

for(y=110;

y>

y--);

键盘部分:

ucharkeyscan()

key=0xa0;

P1=0xfe;

temp=P1;

delay(5);

if(temp!

=0xfe)

switch(temp)

{

case0xee:

key=0x31;

break;

case0xde:

key=0x32;

case0xbe:

key=0x33;

case0x7e:

key=0x34;

}

while(temp!

=0xfe)//松手判断

led=1;

delay(50);

led=0;

P1=0xfd;

=0xfd)

case0xed:

key=0x35;

break;

case0xdd:

key=0x36;

case0xbd:

key=0x37;

case0x7d:

key=0x38;

=0xfd)//松手判断

temp=P1;

P1=0xfb;

=0xfb)

case0xeb:

key=0x39;

break;

case0xdb:

key=0x30;

=0xfb)//松手判断

returnkey;

主程序部分:

voidmain()

while

(1)

led=0;

set=0;

if(set==0)

set_main();

else

enter_main();

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

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

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1