单片机密码锁设计.docx

上传人:b****8 文档编号:29611846 上传时间:2023-07-25 格式:DOCX 页数:16 大小:67.73KB
下载 相关 举报
单片机密码锁设计.docx_第1页
第1页 / 共16页
单片机密码锁设计.docx_第2页
第2页 / 共16页
单片机密码锁设计.docx_第3页
第3页 / 共16页
单片机密码锁设计.docx_第4页
第4页 / 共16页
单片机密码锁设计.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

单片机密码锁设计.docx

《单片机密码锁设计.docx》由会员分享,可在线阅读,更多相关《单片机密码锁设计.docx(16页珍藏版)》请在冰豆网上搜索。

单片机密码锁设计.docx

单片机密码锁设计

单片机密码锁设计

 

什么是密码锁

电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。

硬件设计

基于AT89C51为核心的单片机控制的电子密码锁设计。

本设计能完成开锁,修改密码,密码错误报警,LCD显示密码等基本的密码锁功能。

设计的电路框如图1。

 

报警控制电路

LCD显示电路

AT89C51

单片机

矩阵

键盘

控制

 

 

指示电路

图一

电路的功能单元设计

 

1.单片机AT89C51组成基本框图

单片机引脚介绍

P0:

P0口是一个漏极开路的8位双向I/O口。

在访问片外存储器时P0分时提供低8位地址线和8位双向数据线。

当不接片外存储器或不扩展I/O口时,P0可作为一个通用输入/输出口。

P0口作输入口使用时,应先向口锁存器写“1”,P0口作输出口时,需接上拉电阻。

P1:

P1口是一个内部提供上拉电阻的8位双向I/O口,因此它作为输出口使用时,无需再外接上拉电阻,当作为输入口使用时,同样也需先向其锁存器写“1”。

P2:

P2口也是一个内部提供上拉电阻的8位双向I/O口,在访问片外存储器时,输出高8位地址。

P3:

P3口除了一般的准双向通用I/O口外,还有第二功能。

VCC:

+5V电源

VSS:

接地

ALE:

地址锁存器控制信号。

在系统扩展时,ALE用于控制把P0口输出的低8位地址锁存起来,以实现低位地址和数据的隔离。

此外,由于ALE是以晶振1/6的固定频率输出的正脉冲,因此,可作为外部时钟或外部定时脉冲使用。

/PSEN:

外部程序存储器读选通信号。

在读外部ROM时,/PSEN有效(低电平),以实现外部ROM单元的读操作。

/EA:

访问程序存储控制信号。

当/EA信号为低电平时,对ROM的读操作限定在外部程序存储器;当/EA信号为高电平时,对ROM的读操作是从内部程序存储器开始,并可延至外部程序存储器。

RST:

复位信号。

当输入的复位信号延续两个机器周期以上的高电平时即为有效,用完成单片机的复位初始化操作。

XTAL1和XTAL2:

外接晶体引线端。

当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。

 

2.单片机外围电路设计

(1)单片机复位电路:

采用按键手动复位方式中的电平复位方式,复位电平是通过使RST端经电阻与VCC电源接通而实现的。

(2)单片机时钟电路:

AT89C51内部有时钟电路,需外接石英晶体和微调电容,本设计的晶振频率为11.0592MHz。

3.矩阵键盘的设计

本设计中用到4*4的键盘。

键盘扫描方式,键盘的列线与P1口的低4位相接,行线与P1口的高3位相接。

首先使P1.0为低电平“0”,其余三根列线为高电平“1”,读行线状态。

如果行线都为高电平状态,则P1.0这列上没键按下,如果读出的行线不全为高电平状态,则为低电平的行线与P1.0相交的键处于闭合状态。

如果P1.0上没有键闭合,接着使P1.1为低电平,其余列线为高电平,用同样的方法检查P1.1这列上有没有按键闭合。

一直到使P1.3为低电平扫描完成。

这一过程称为一次扫描过程。

由于按键是利用机械触电的合、断原理,存在弹性的影响,机械触点在闭合及断开瞬间均有抖动过程,从而使电压信号波动,为了保证CPU对键的稳定闭合仅作一次键输入处理,必须采用消除抖动影响。

本设计采用软件办法,在检测到有键按下时,执行一个延时程序后,确认该键是否保持闭合状态电平。

若仍保持闭合状态电平,则确认该键处于闭合状态,从而消除抖动影响。

若有按键被按下时,就将该按键译码出来,本设计采用双重循环做计数编号,当某一按键按下时,其按键编号便是计数编号,有关按键编号,扫描信号及读取按键数据返回码整理如表1。

编号

按键数据输入码

P1.7P1.6P1.5P1.4

扫描输出信号

P1.3P1.2P1.1P1.0

所侦测的按键

0

1110

1110

K0键

1

1101

1110

K1键

2

1011

1110

K2键

3

0111

1110

K3键

4

1110

1101

K4键

5

1101

1101

K5键

6

1011

1101

K6键

7

0111

1101

K7键

8

1110

1011

K8键

9

1101

1011

K9键

10

1011

1011

K10键

11

0111

1011

K11键

表1

4.电路总体设计

下面是本次实验的程序

;*******************************************************

;以下8个字节存放8位数码管的段码

LED_BIT_1EQU30H

LED_BIT_2EQU31H

LED_BIT_3EQU32H

LED_BIT_4EQU33H

LED_BIT_5EQU34H

LED_BIT_6EQU35H

LED_BIT_7EQU36H

LED_BIT_8EQU37H

;以下6个字节存放初始密码

WORD_1EQU38H

WORD_2EQU39H

WORD_3EQU3AH

WORD_4EQU3BH

WORD_5EQU3CH

WORD_6EQU3DH

;以下6个字节存放用户输入的6位密码

KEY_1EQU3EH

KEY_2EQU3FH

KEY_3EQU40H

KEY_4EQU41H

KEY_5EQU42H

KEY_6EQU43H

;******************************************************

CNT_AEQU44H

CNT_BEQU45H

KEY_CNTEQU46H;已输出的密码位数

LINEEQU47H;按键行号

ROWEQU48H;按键列号

VALEQU49H;键值

;******************************************************

;以下为初始化程序,包括数据存储空间初始化,设置初始密码

ORG00H

SJMPSTART

ORG0BH

LJMPINT_T0

START:

MOVCNT_A,#00H;程序初始化

MOVCNT_B,#00H

MOVKEY_CNT,#00H

MOVLINE,#00H

MOVROW,#00H

MOVVAL,#00H

SETBP1.0

MOVLED_BIT_1,#00H;段码存储区清0

MOVLED_BIT_2,#00H

MOVLED_BIT_3,#00H

MOVLED_BIT_4,#00H

MOVLED_BIT_5,#00H

MOVLED_BIT_6,#00H

MOVLED_BIT_7,#79H

MOVLED_BIT_8,#73H

MOVKEY_1,#00H;输入密码存储区清0

MOVKEY_2,#00H

MOVKEY_3,#00H

MOVKEY_4,#00H

MOVKEY_5,#00H

MOVKEY_6,#00H

MOVWORD_1,#6;设置初始密码为""

MOVWORD_2,#5

MOVWORD_3,#4

MOVWORD_4,#3

MOVWORD_5,#2

MOVWORD_6,#1

MOVTMOD,#01H

MOVTH0,#(65536-700)/256

MOVTL0,#(65536-700)/256

MOVIE,#82H

A0:

LCALLDISP

;***********************************************************

;以下为键盘扫描程序,计算键值并存入VAL

LSCAN:

MOVP3,#0F0H;扫描行码

L1:

JNBP3.0,L2

LCALLDLY_S

JNBP3.0,L2

MOVLINE,#00H

LJMPRSCAN

L2:

JNBP3.1,L3

LCALLDLY_S

JNBP3.1,L3

MOVLINE,#01H

LJMPRSCAN

L3:

JNBP3.2,L4

LCALLDLY_S

JNBP3.2,L4

MOVLINE,#02H

LJMPRSCAN

L4:

JNBP3.3,A0

LCALLDLY_S

JNBP3.3,A0

MOVLINE,#03H

RSCAN:

MOVP3,#0FH;扫描列码

C1:

JNBP3.4,C2

MOVROW,#00H

LJMPCALCU

C2:

JNBP3.5,C3

MOVROW,#01H

LJMPCALCU

C3:

JNBP3.6,C1

MOVROW,#02H

CALCU:

MOVA,LINE;计算键值

MOVB,#03H

MULAB

ADDA,ROW

MOVVAL,A

;**************************************************

;以下为按键处理程序,对不同的按键作出响应

CJNEA,#0AH,J1;是否为"CLR"键

MOVR1,KEY_CNT

CJNER1,#00H,J2

LCALLALARM_1

LJMPSTART

J2:

LCALLSHIFTR

DECKEY_CNT

W00:

LCALLDISP;等待按键抬起

MOVA,P3

CJNEA,#0FH,W01

LJMPA0

W01:

MOVA,P3

CJNEA,#0F0H,W02

LJMPA0

W02:

SJMPW00

J1:

MOVA,VAL

CJNEA,#0BH,J3;判断是否为"ENTER"键

MOVR1,KEY_CNT

CJNER1,#06H,J4

MOVA,WORD_1;比较密码

CJNEA,3EH,J5

MOVA,WORD_2

CJNEA,3FH,J5

MOVA,WORD_3

CJNEA,40H,J5

MOVA,WORD_4

CJNEA,41H,J5

MOVA,WORD_5

CJNEA,42H,J5

MOVA,WORD_6

CJNEA,43H,J5

CLRP1.0

LCALLDLY_L

LJMPFINI

J5:

LCALLALARM_2

LJMPSTART

J4:

LCALLALARM_1

LJMPSTART

J3:

INCKEY_CNT;按下数字键

MOVA,KEY_CNT

CJNEA,#07H,K1

LCALLALARM_1

W10:

LCALLDISP;等待按键抬起

MOVA,P3

CJNEA,#0FH,W11

LJMPSTART

W11:

MOVA,P3

CJNEA,#0F0H,W12

LJMPSTART

W12:

SJMPW10

LJMPSTART

LJMPSTART

K1:

LCALLSHIFTL

W20:

LCALLDISP;等待按键抬起

MOVA,P3

CJNEA,#0FH,W21

LJMPA0

W21:

MOVA,P3

CJNEA,#0F0H,W22

LJMPA0

W22:

SJMPW20

LJMPA0

ALARM_1:

SETBTR0;操作错误报警

JBTR0,$

RET

ALARM_2:

SETBTR0;密码错误报警

JBTR0,$

LCALLDLY_L

RET

;**************************************************

;定时器中断服务程序,用于声音报警

INT_T0:

CPLP1.7

MOVTH0,#(65536-700)/256

MOVTL0,#(65536-700)/256

INCCNT_A

MOVR1,CNT_A

CJNER1,#30,RETUNE

MOVCNT_A,#00H

INCCNT_B

MOVR1,CNT_B

CJNER1,#20,RETUNE

MOVCNT_A,#00H

MOVCNT_B,#00H

CLRTR0

RETUNE:

RETI

;**************************************************

;段码,输入密码左移子程序

SHIFTL:

MOVLED_BIT_6,LED_BIT_5

MOVLED_BIT_5,LED_BIT_4

MOVLED_BIT_4,LED_BIT_3

MOVLED_BIT_3,LED_BIT_2

MOVLED_BIT_2,LED_BIT_1

MOVLED_BIT_1,#40H

MOVKEY_6,KEY_5

MOVKEY_5,KEY_4

MOVKEY_4,KEY_3

MOVKEY_3,KEY_2

MOVKEY_2,KEY_1

MOVKEY_1,VAL

RET

;**************************************************

;段码,输入密码右移子程序

SHIFTR:

MOVLED_BIT_1,LED_BIT_2

MOVLED_BIT_2,LED_BIT_3

MOVLED_BIT_3,LED_BIT_4

MOVLED_BIT_4,LED_BIT_5

MOVLED_BIT_5,LED_BIT_6

MOVLED_BIT_6,#00H

MOVKEY_1,KEY_2

MOVKEY_2,KEY_3

MOVKEY_3,KEY_4

MOVKEY_4,KEY_5

MOVKEY_5,KEY_6

MOVKEY_6,#00H

RET

;**************************************************

;以下为数码显示子程序

DISP:

CLRP2.7

MOVP0,LED_BIT_8

LCALLDLY_S

SETBP2.7

CLRP2.6

MOVP0,LED_BIT_7

LCALLDLY_S

SETBP2.6

CLRP2.5

MOVP0,LED_BIT_6

LCALLDLY_S

SETBP2.5

CLRP2.4

MOVP0,LED_BIT_5

LCALLDLY_S

SETBP2.4

CLRP2.3

MOVP0,LED_BIT_4

LCALLDLY_S

SETBP2.3

CLRP2.2

MOVP0,LED_BIT_3

LCALLDLY_S

SETBP2.2

CLRP2.1

MOVP0,LED_BIT_2

LCALLDLY_S

SETBP2.1

CLRP2.0

MOVP0,LED_BIT_1

LCALLDLY_S

SETBP2.0

RET

;**********************************************

DLY_S:

MOVR6,#10

D1:

MOVR7,#250

DJNZR7,$

DJNZR6,D1

RET

DLY_L:

MOVR5,#100

D2:

MOVR6,#100

D3:

MOVR7,#248

DJNZR7,$

DJNZR6,D3

DJNZR5,D2

RET

FINI:

NOP

END

程序流程图

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

当前位置:首页 > 高等教育 > 院校资料

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

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