基于Proteus环境的电子密码锁设计.docx

上传人:b****3 文档编号:1857871 上传时间:2022-10-24 格式:DOCX 页数:12 大小:73.01KB
下载 相关 举报
基于Proteus环境的电子密码锁设计.docx_第1页
第1页 / 共12页
基于Proteus环境的电子密码锁设计.docx_第2页
第2页 / 共12页
基于Proteus环境的电子密码锁设计.docx_第3页
第3页 / 共12页
基于Proteus环境的电子密码锁设计.docx_第4页
第4页 / 共12页
基于Proteus环境的电子密码锁设计.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

基于Proteus环境的电子密码锁设计.docx

《基于Proteus环境的电子密码锁设计.docx》由会员分享,可在线阅读,更多相关《基于Proteus环境的电子密码锁设计.docx(12页珍藏版)》请在冰豆网上搜索。

基于Proteus环境的电子密码锁设计.docx

基于Proteus环境的电子密码锁设计

基于Proteus环境的电子密码锁设计

一、实验目的

1.掌握嵌入式系统开发的基本流程;

2.熟悉嵌入式系统开发仿真软件使用方法;

3.基于89C52单片机来设计电子密码锁。

二、实验要求

1、用4*3组成0-9数字键及确认键、删除键;

2、用8位数码管组成显示电路提示信息,当输入密码时,只显示“—”,当密码位数输入完毕按下“确定”键时,对输入的密码与设定的密码进行比较,若密码正确,则开锁,此处用LED发光二极管亮1s作为提示;若密码不正确,禁止按键输入3s,同时发出“嘀、嘀”报警声。

三、实现原理

1、按键消抖

图3-1

由图3-l可见,在按键闭合和断开时产生了多个边沿,而在实际中每按一次键,我们只需要一组稳定的上升或下降边沿,所以对于电路中的按键信号,如果我们不滤除抖动的话,还是简单的读取信号的边沿,会引起一次按键被误读多次,这样就会引起电路的误动作。

为了保证按一次键电路只有一次正确的响应,即在键闭合稳定时读取键的状态,就要求电路中必须采取滤除抖动的措施。

本设计按键较多,故采用软件方法去抖,即检测出键闭合后执行一个延时程,产生5ms~10ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平

则确认为真正有键按下。

当检测到按键释放后,也要给5ms~10ms的延时,待后沿抖动消失后才能转入该键的处理程序。

2、矩阵扫描电路

由于本设计所用到的按键数量较多而不适合用独立按键式键盘。

采用的是矩阵式按键键盘,它由行线和列线组成,也称行列式键盘,按键位于行列的交叉点上,密码锁的密码由键盘输入完成,与独立式按键键盘相比,要节省很多I/O口。

本设计中使用的这个3*4键盘不但能完成密码的输入还能作特别功能键使用,比如清空显示功能等。

键盘的每个按键功能在程序设计中设置。

其大体功能(看键盘按键上的标记)及与单片机引脚接法如图3-2所示:

图3-2

3、复位电路

单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作,例如复位后PC=0000H,使单片机从第—个单元取指令。

无论是在单片机刚开始接上电源时,还是断电后或者发生故障后都要复位。

在复位期间(即RST为高电平期间),P0口为高组态,P1-P3口输出高电平;外部程序存储器读选通信号PSEN无效。

地址锁存信号ALE也为高电平。

根据实际情况选择如图3-3所示的复位电路。

该电路在最简单的复位电路下增加了手动复位按键,在接通电源瞬间,电容C1上的电压很小,复位下拉电阻上的电压接近电源电压,即RST为高电平,在电容充电的过程中RST端电压逐渐下降,当RST端的电压小于某一数值后,CPU脱离复位状态,由于电容C1足够大,可以保证RST高电平有效时间大于24个振荡周期,CPU能够可靠复位。

增加手动复位按键是为了避免死机时无法可靠复位。

当复位按键按下后电容C1通过R5放电。

当电容C1放电结束后,RST端的电位由R11与R15分压比决定。

由于R11<

R11的作用在于限制按键按下瞬间电容C1的放电电流,避免产生火花,以保护按键触电。

图3-3复位电路原理图

4、晶振电路

AT89C51引脚XTAL1和XTAL2与晶体振荡器及电容C2、C1按图3.4所示方式连接。

晶振、电容C2/C3及片内与非门(作为反馈、放大元件)构成了电容三点式振荡器,振荡信号频率与晶振频率及电容C1、C2的容量有关,但主要由晶振频率决定,范围在0~33MHz之间,电容C2、C3取值范围在5~30pF之间。

根据实际情况,本设计中采用12MHZ做系统的外部晶振。

电容取值为33pF。

图3-4晶振电路原理图

5、报警电路

报警部分由陶瓷压电发声装置及外围电路组成,加电后不发声,当有键按下时,“叮”声,每按一下,发声一次,密码正确时,不发声直接开锁,当密码输入错误时,单片机的P3.1引脚为低电平,三极管T3导喇叭发出噪鸣声报警。

如图

3-5所示:

图3-5报警电路原理图

四、实验步骤

1.熟悉Proteus软件环境;

2.熟悉89C52硬件环境;

3.编写相应处理器程序代码;

4.基于Proteus环境进行仿真测试。

五、程序代码

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharsmg[16];//数码管段显示;

ucharcodepassword[]={1,9,8,8,0,8,1,4};

charnum,k,x;

voiddisplay();

voidkey_scan();

//voidcorrect();//密码正确数码管显示“open”

//voiderror();//密码错误数码管显示“error”

intFlag;//与密码初值比较,正确则置‘1’

sbitfmq=P3^1;//蜂鸣器输入端

sbitled=P3^0;//密码正确,灯亮

//主函数

voidmain()

{

k=0;

led=0;

fmq=1;

x=0;

while

(1)

{

key_scan();

display();

}

}

//延时函数

voiddelay(uinti)//延时函数

{

uintj;

while(i--)

{

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

}

}

voidbeep()//蜂鸣器函数;

{

uinti;

for(i=0;i<5;i++)//蜂鸣器响五次

{

fmq=0;

delay(300);

fmq=1;

delay(300);

P2=0xff;

P0=0x00;

}

fmq=1;

}

//扫描函数

voidkey_scan()

{

uchartemp;

P1=0xf0;

temp=P1;

if(temp!

=0xf0)

{

delay(25);

P1=0xf0;

temp=P1;

if(temp!

=0xf0)

{

P1=0xfe;

temp=P1;

switch(temp)

{

case(0xee):

P0=0x40;smg[x++]=num;num=0;k++;delay(200);break;

case(0xde):

P0=0x40;smg[x++]=num;num=1;k++;delay(200);break;

case(0xbe):

P0=0x40;smg[x++]=num;num=2;k++;delay(200);break;

case(0x7e):

P0=0x40;smg[x++]=num;num=3;k++;delay(200);break;

}

P1=0xfd;

temp=P1;

switch(temp)

{

case(0xed):

P0=0x40;smg[x++]=num;num=4;k++;delay(200);break;

case(0xdd):

P0=0x40;smg[x++]=num;num=5;k++;delay(200);break;

case(0xbd):

P0=0x40;smg[x++]=num;num=6;k++;delay(200);break;

case(0x7d):

P0=0x40;smg[x++]=num;num=7;k++;delay(200);break;

}

P1=0xfb;

temp=P1;

switch(temp)

{

case(0xeb):

P0=0x40;smg[x++]=num;num=8;k++;delay(200);break;

case(0xdb):

P0=0x40;smg[x++]=num;num=9;k++;delay(200);break;

case(0xbb):

P0=0x40;

if((Flag==1)&(k==8))

{

led=1;

//correct();

delay(1000);

led=0;

k=0;

}

else

{

beep();

//error();

k=0;

}break;

case(0x7b):

P0=0x40;k--;delay(200);Flag=1;x--;num=smg[x];break;

}

}

}

}

//显示函数

voiddisplay()

{

if(k==1)

{

P2=0x7f;

if(password[0]==num)

{

Flag=1;

}

else

{

Flag=0;

}

}

while(k==2)

{

P2=0x3f;

if(password[1]==num)

{

Flag=1&Flag;

}

else

{

Flag=0;

}

key_scan();

}

while(k==3)

{

P2=0x1f;

if(password[2]==num)

{

Flag=1&Flag;

}

else

{

Flag=0;

}

key_scan();

}

while(k==4)

{

P2=0X0f;

if(password[3]==num)

{

Flag=1&Flag;

}

else

{

Flag=0;

}

key_scan();

}

while(k==5)

{

P2=0x07;

if(password[4]==num)

{

Flag=1&Flag;

}

else

{

Flag=0;

}

key_scan();

}

while(k==6)

{

P2=0X03;

if(password[5]==num)

{

Flag=1&Flag;

}

else

{

Flag=0;

}

key_scan();

}

while(k==7)

{

P2=0x01;

if(password[6]==num)

{

Flag=1&Flag;

}

else

{

Flag=0;

}

key_scan();

}

while(k>=8)

{

P2=0X00;

k=8;

if(password[7]==num)

{

Flag=1&Flag;

}

else

{

Flag=0

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

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

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

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