电子密码锁的安装调试与维修教学任务

北京青春痘最好的医院 http://baijiahao.baidu.com/s?id=1689204368658288694&wfr=spider&for=pc

学习目标

1、知道单片机的特点及其结构。

2、识读MCS—51各引脚并掌握其工作原理。。

3、懂并按要求编写基本的单片机指令。

4、电子密码锁元件的特点。

5、懂电子密码锁原理图。

6、懂电子密码锁安装图。

7、懂电子密码锁的程序。

8、行安装、调试、维修电子密码锁。

学习内容:

1、单片机的特点及其结构。

2、识读MCS—51各引脚并掌握其工作原理。

3、识读指令的结构,类型及编写

4、电子锁电子元件的特点。

5、电子锁的工作原理、特点、种类。

6、电子锁电子元件的测试。

7、进行电子锁程序的设计。

本学习情境学时:44学时

本课题的教学步骤可分为:

1、下发任务书

2、学习流程

3、引导问题

4、有关表格

5、自我测试题(评价标准、测试题)

任务书

随着生活水平的提高,人们对自己所处环境安全性要求越来越高。本设计主要是基于单片机智能锁的硬件和软件的设计及实现方法,这种电路设计具有按键有效提示,输入错误提示,控制开锁电平,控制报警电路,修改密码等多种功能"可在意外泄密的情况下随时修改密码"4位数密码共一万组不重复组合,保密性强,灵活性高,特别适用于家庭,办公室,学生宿舍及宾馆等公开场所。

通过本课题的学习,你能够独立完成密码锁的组装,并且可以进行它类型密码锁的维修;下图为密码锁电原理图。

图1电子密码锁原理图

图片模糊,建议替换或删除×

图2实物图

总体方案设计

设计思路

共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过40秒(一般情况下,用户不会超过40秒,若用户觉得不便,还可以修改)电路将报警80秒,若电路连续报警三次,电路将锁定键盘5分钟,防止他人的非法操作。

采用AT89S51为核心的单片机控制方案。利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加调电存储、声光提示甚至添加遥控控制功能。其原理如图2-2所示。

图2-2单片机控制方案

开锁机构

通过单片机送给开锁执行机构,电路驱动电磁锁吸合,从而达到开锁的目的。其原理如图2-3所示。

图2-3密码锁开锁机构示意图

当用户输入的密码正确时,单片机便输出开门信号,送到开锁驱动电路,然后驱动电磁锁,达到开门的目的。其实际电路如图2-4所示。

电路由驱动和开锁两级组成。由D5、R1、T10组成驱动电路,其中T10可以选择普通的小功率三极管如、都可以满足要求。D5是开锁指示灯;由D6、C24、T11组成开锁。其中D6、C24是为了消除电磁锁可能产生的反向高电压以及可能产生的电磁干扰。T11可选用中功率的三极管如,电磁锁的选用要视情况而定,但是吸合力要足够且有一定的余量。

注:在设计中,暂时用发光二极管代替电磁锁,发光管亮,表示开锁;灭,表示没有开锁。

图2-4密码锁开锁机构电路图

按键电路设计

由于设计要求使用矩阵键盘,所以本设计就采用行列式键盘,同时也能减少键盘与单片机接口时所占用的I/O线的数目,在按键比较多的时候,通常采用这样方法。其原理如图2-5所示。

图2-5行列式键盘原理电路图

每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有N×M个按键的键盘。

首先辨别键盘中有无键按下,有单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。方法是:向行线输出全扫描字00H,把全部列线置为低电平,然后将列线的电平状态读入累加器A中。如果有按键按下,总会有一根行线电平被拉至低电平从而使行线不全为1。判断键盘中哪一个键被按下使通过将列线逐列置低电平后,检查行输入状态来实现的。方法是:依次给列线送低电平,然后查所有行线状态,如果全为1,则所按下的键不在此列;如果不全为1,则所按下的键必在此列,而且是在与零电平行线相交的交点上的那个键。

按键的操作面板如图2-6所示。共计数字键10个,功能键2个。

图2-6按键操作面板示意图

10个数字键用来输入密码,另外2个功能键分别是:开锁和上锁。上锁和开锁的过程在1-2中已经详细介绍,在此不再说。。

面板上还有一个蜂鸣器,其中一个功能是用来指示操作的按键是否在成功的按下;另外一个功能是当用户输入密码错误的次数超过了3次,鸣笛以示报警。

显示电路设计

本系统设计的显示电路为了节约单片机的接口资源而采用串行显示的方式,只使用单片机的两个串行口,就可以完成单片机的显示功能,显示电路的电路原理图如图2-7所示。

电路设定:当程序检测在5分钟内没有按键操作的时候,就关闭显示。这个功能使用程序来实现的,一旦没有按键动作就启动一个定时器,检测在5分钟内没有按键动作的时候,启动一个程序,关闭显示,这样可以达到节省电能的目的。

从单片机串口输出的信号先送到左边的移位寄存器(74HC),由于移位脉冲的作用,使数据向右移,达到显示的目的。移位寄存器74HC还兼作数码管的驱动,插头1(header1)接电源,插头2(header2)接数据和脉冲输出端。电路中的三个整流管D1~D3的作用是降低数码管的工作电压,增加其使用寿命。

图2-7显示器原理图

程序

程序:

;=====================定义参数=============================

LED_ONBIT00H;数码管亮暗标志(1为亮,0为暗)

KEYCARDBIT01H;按键标志

PWD_RIGHTBIT02H;密码是否正确(1为正确,0为错误)

KEY_LOCKBIT03H;键盘锁定(1为锁,0为开)

SONDBITP1.4;蜂鸣器

GREENBITP1.5;绿灯

REDBITP1.6;红灯

LED1EQU50H;数码管自动变暗时间数1

KEYSEQU53H;按键键值

KEY1EQU54H;按键行值

PWD1EQU56H;存密码1

PWD2EQU57H;存密码2

PWD3EQU58H;存密码3

PWD4EQU59H;存密码4

SHOW1EQU5AH;显示1

SHOW2EQU5BH;显示2

SHOW3EQU5CH;显示3

SHOW4EQU5DH;显示4

SHOW0EQU5EH;临时用

;====================程序开始==============================

ORGH

AJMPINIT

;=====================初始化===============================

ORGH

INIT:

MOVP0,#40H

MOVP2,#0FH

MOVP3,#00H

MOVLED1,#3FH

MOVKEYS,#00H

MOVKEY1,#00H

MOVSHOW0,#00H

MOVSHOW1,#00H

MOVSHOW2,#10H

MOVSHOW3,#20H

MOVSHOW4,#30H

LCALLPWD_INIT

SETBLED_ON

CLRPWD_RIGHT

SETBSOND

SETBRED

SETBGREEN

CLRKEY_LOCK

CLRKEYCARD

AJMPMAIN

;===========================================================主程序======================================================

MAIN:

MOVP2,#0FH

MOVP3,#00H

LCALLKEY_FIRST;调用键盘程序

JNBKEYCARD,MAIN;KEYCARD=0时,无键按下跳回MAIN

LCALLKEY_MAIN;KEYCARD=0时,调用键盘处理程序

JNBKEYCARD,MAIN

LJMPMKEY_FUNCTION;跳到主程序键盘各按键处理程序

;============================================================END========================================================

;=====================检测按键第一次按下========================

KEY_FIRST:

JNBLED_ON,KEY_LOOP

MOVA,P2;数码管亮时扫描

ANLA,#0FH;屏敝掉高4位

CJNEA,#0FH,KEY_SECOND;判断是否有键按下

CLRKEYCARD;无键则KEYCARD置0

LCALLLED_DISPLAY;调用显示子程序

DJNZLED1,ESC

CLRLED_ON

MOVLED1,#03FH

ESC:

RET

KEY_LOOP:;数码管暗时扫描

MOVA,P2

ANLA,#0FH

CJNEA,#0FH,KEY_SECOND

CLRKEYCARD

RET

;=======================检测按键第二次按下=================

KEY_SECOND:

LCALLBEEP1;按键响声

JNBLED_ON,KEY_EXIT1;如果LED是暗的,则置LED_ON为1

MOVLED1,#03FH

LCALLDELAY10MS;去抖,延时10ms

MOVA,P2;重新扫描键盘

ANLA,#0FH

CJNEA,#0FH,KEY_EN;有键按下,则置KEYCARD为1

CLRKEYCARD;无键按下,则置KEYCARD为0

RET

KEY_EXIT1:

LCALLKEY_RELEASE

SETBLED_ON

RET

KEY_EN:

SETBKEYCARD;置KEYCARD为1

RET

;===============================================KEY_MAIN=================================================

KEY_MAIN:

MOVR3,#0EH

MOVR4,#04H;循环次数

KEY_ROW:

MOVP3,R3

MOVA,P2

ANLA,#0FH

MOVKEY1,R3;将行信息存到KEY1中

CJNEA,#0FH,KEY_WORD;是该行则跳到键值计算程序

MOVA,R3

SETBC

RLCA;带进位循环左移

ANLA,#0FH

MOVR3,A

DJNZR4,KEY_ROW

CLRKEYCARD

RET

;================键值计算========================

KEY_WORD:

SWAPA

ORLA,KEY1;列+行=键值

MOVKEYS,A;键值存到KEYS中

RET

;==================================主程序各按键功能=======================================

MKEY_FUNCTION:

MOVKEYS,A;键值赋给A

MK0:

CJNEA,#0EEH,MK1

CLRKEYCARD

MOVSHOW1,#0BH

MOVSHOW2,#1BH

MOVSHOW3,#2BH

MOVSHOW4,#3BH

LCALLKEY_RELEASE;按键松开程序

MOVR5,#05H

MOVR6,#03H

CLRKEY_LOCK

LOGIN_MAIN:;输入密码主程序

MOVP2,#0FH

MOVP3,#00H

LCALLKEY_FIRST;调用键盘扫描程序

JNBKEYCARD,LOGIN_MAIN

LCALLKEY_MAIN;调用键盘处理程序

LJMPLKEY_FUNCTION;跳到输密码时各键功能处理程序

MK1:

LCALLKEY_RELEASE

LJMPMAIN

;=========================================END====================================

;==========================出厂密码============================

PWD_INIT:

MOVPWD1,#01H

MOVPWD2,#02H

MOVPWD3,#03H

MOVPWD4,#04H

RET

;======================================输入密码时各按键功能====================================

LKEY_FUNCTION:

MOVA,KEYS

;=================无效键============================

LK0:

CJNEA,#0EEH,LK1

LCALLLAMP_RED;闪红灯

LCALLKEY_RELEASE

LJMPLOGIN_MAIN;返回输入密码主程序

LK1:

CJNEA,#0EDH,LK2

LCALLLAMP_RED

LCALLKEY_RELEASE

LJMPLOGIN_MAIN

LK2:

CJNEA,#0EBH,LK3

LCALLLAMP_RED

LCALLKEY_RELEASE

LJMPLOGIN_MAIN

;=================退出键==================

LK3:

CJNEA,#0E7H,LK4

MOVSHOW1,#00H

MOVSHOW2,#10H

MOVSHOW3,#20H

MOVSHOW4,#30H

CLRKEY_LOCK

LJMPMAIN;返回主程序

;===============清除键=========================

LK4:

CJNEA,#07BH,LK5

MOVSHOW1,#0BH

MOVSHOW2,#1BH

MOVSHOW3,#2BH

MOVSHOW4,#3BH

MOVR5,#05H

LCALLKEY_RELEASE

LJMPLOGIN_MAIN

;================确定键=========================

LK5:

CJNEA,#H,LK6

LCALLPWD_COMPARE;调用密码检测子程序

LCALLKEY_RELEASE

JBPWD_RIGHT,SYS_LOGIN;PWD_RIGHT为1时表示密码正确,跳到SYS_LOGIN

DJNZR6,LK5_EXIT;否则将输入次数R6减1

INCR6;若输入次数已经是3次了,就保持R6为1

SETBKEY_LOCK;置KEY_LOCK为1

LK5_EXIT:

MOVSHOW1,#0BH

MOVSHOW2,#1BH

MOVSHOW3,#2BH

MOVSHOW4,#3BH

MOVR5,#05H

LK5_ESC:

LCALLKEY_RELEASE

LJMPLOGIN_MAIN;返回输入密码主程序

;=============0-9数字键========================

LK6:

MOVR0,#00H

JBKEY_LOCK,LK6_EXIT;置KEY_LOCK为1时锁定数字键

DJNZR5,LKEY_NUM;输入个数满4个则锁定数字键,否则R5减1

INCR5;若输入个数已经是4个了,就保持R5为1

LK6_EXIT:

LCALLBEEP2;误操作键盘发声

AJMPLK6_ESC

LKEY_NUM:

MOVA,R0

INCR0

MOVDPTR,#KEY_VALUE

MOVCA,

A+DPTR

CJNEA,KEYS,LKEY_NUM

DECR0

MOVA,R0

MOVDPTR,#TAB

MOVCA,

A+DPTR

MOVKEYS,A

ORLA,#30H

MOVSHOW0,A

LCALLLED_MOVE;调用左移功能

MOVSHOW4,SHOW0

LK6_ESC:

ACALLKEY_RELEASE

LJMPLOGIN_MAIN

;=======================================END=================================================

;================================登陆系统========================================

SYS_LOGIN:

MOVSHOW1,#01H

MOVSHOW2,#11H

MOVSHOW3,#21H

MOVSHOW4,#31H

CLRGREEN;绿灯亮表示开锁成功

SYS_MAIN:;开锁状态主程序

MOVP2,#0FH

MOVP3,#00H

LCALLKEY_FIRST;调用键盘扫描程序

JNBKEYCARD,SYS_MAIN

LCALLKEY_MAIN;调用键盘处理程序

LJMPSYSKEY_FUNCTION

;==================================登陆系统后各键功能===================================

SYSKEY_FUNCTION:

MOVA,KEYS

;================修改密码键===============

SYSK1:

CJNEA,#0EDH,SYSK2

SET_PWD:

MOVR5,#05H

CLRKEY_LOCK

MOVSHOW1,#0AH

MOVSHOW2,#1AH

MOVSHOW3,#2AH

MOVSHOW4,#3AH

SETPWD_MAIN:;修改密码主程序

MOVP2,#0FH

MOVP3,#00H

LCALLKEY_FIRST;调用键盘扫描程序

JNBKEYCARD,SETPWD_MAIN

LCALLKEY_MAIN;调用键盘处理程序

LJMPSKEY_FUNCTION

;================恢复出厂设置===========

SYSK2:

CJNEA,#0EBH,SYSK3

LCALLPWD_INIT

LCALLKEY_RELEASE

LJMPSYS_MAIN

;=================退出键==================

SYSK3:

CJNEA,#0E7H,SYSK4

MOVSHOW1,#00H

MOVSHOW2,#10H

MOVSHOW3,#20H

MOVSHOW4,#30H

CLRKEY_LOCK

SETBGREEN;关绿灯

LJMPMAIN;跳回主程序

;==================无效键==================

SYSK4:

LCALLBEEP2

LCALLKEY_RELEASE

LJMPSYS_MAIN

;==================================END==================================================

;=================================修改密码各键功能==========================================

SKEY_FUNCTION:

MOVA,KEYS

;=================无效键=====================

SK0:

CJNEA,#0EEH,SK1

LCALLLAMP_RED

LCALLKEY_RELEASE

LJMPSETPWD_MAIN

SK1:

CJNEA,#0EDH,SK2

LCALLLAMP_RED

LCALLKEY_RELEASE

LJMPSETPWD_MAIN

SK2:

CJNEA,#0EBH,SK3

LCALLLAMP_RED

LCALLKEY_RELEASE

LJMPSETPWD_MAIN

;=================退出修改密码================

SK3:

CJNEA,#0E7H,SK4

MOVSHOW1,#01H

MOVSHOW2,#11H

MOVSHOW3,#21H

MOVSHOW4,#31H

LCALLKEY_RELEASE

LJMPSYS_MAIN

;==================清除键=====================

SK4:

CJNEA,#07BH,SK5

MOVSHOW1,#0AH

MOVSHOW2,#1AH

MOVSHOW3,#2AH

MOVSHOW4,#3AH

MOVR5,#05H

LCALLKEY_RELEASE

LJMPSETPWD_MAIN

;=================确认键======================

SK5:

CJNEA,#H,SK6

LCALLKEY_RELEASE

CJNER5,#01H,SETPWD_FAIL;当输入个数小于4个,则密码修改不成功

LCALLSETPWD_SUCCESS;成功调用SETPWD_SUCCESS

LJMPSYS_MAIN

;================0-9数字键=================

SK6:

MOVR0,#00H

DJNZR5,SKEY_NUM

INCR5

LCALLBEEP2

AJMPSK6_ESC

SKEY_NUM:

MOVA,R0

INCR0

MOVDPTR,#KEY_VALUE

MOVCA,

A+DPTR

CJNEA,KEYS,SKEY_NUM

DECR0

MOVA,R0

MOVDPTR,#TAB

MOVCA,

A+DPTR

MOVKEYS,A

ORLA,#30H

MOVSHOW0,A

LCALLLED_MOVE

MOVSHOW4,SHOW0

SK6_ESC:

ACALLKEY_RELEASE

LJMPSETPWD_MAIN

;===========================================END=============================================

;====================================修改密码失败====================================

SETPWD_FAIL:

LJMPSET_PWD

;====================================修改密码成功==================================

SETPWD_SUCCESS:

ANLSHOW1,#0FH

ANLSHOW2,#0FH

ANLSHOW3,#0FH

ANLSHOW4,#0FH

MOVPWD1,SHOW1

MOVPWD2,SHOW2

MOVPWD3,SHOW3

MOVPWD4,SHOW4

MOVSHOW1,#01H

MOVSHOW2,#11H

MOVSHOW3,#21H

MOVSHOW4,#31H

LCALLLAMP_GREEN;闪绿灯

RET

;=====================================左移功能==============================================

LED_MOVE:

CLRC

MOVA,SHOW2

SUBBA,#10H

MOVSHOW1,A

CLRC

MOVA,SHOW3

SUBBA,#10H

MOVSHOW2,A

CLRC

MOVA,SHOW4

SUBBA,#10H

MOVSHOW3,A

RET

;======================================密码检测========================================

PWD_COMPARE:

MOVA,SHOW1

ANLA,#0FH

CJNEA,PWD1,PWD_EXIT

MOVA,SHOW2

ANLA,#0FH

CJNEA,PWD2,PWD_EXIT

MOVA,SHOW3

ANLA,#0FH

CJNEA,PWD3,PWD_EXIT

MOVA,SHOW4

ANLA,#0FH

CJNEA,PWD4,PWD_EXIT

SETBPWD_RIGHT

AJMPPWD_ESC

PWD_EXIT:

CLRPWD_RIGHT

PWD_ESC:

RET

;======================================判断键是否释放====================================

KEY_RELEASE:

MOVP3,#00H

KEY_LOSEN:

MOVA,P2

ANLA,#0FH

LCALLLED_DISPLAY

CJNEA,#0FH,KEY_LOSEN

RET

;=======================================LED显示================================

LED_DISPLAY:

JNBLED_ON,LED_OFF

MOVP0,SHOW1

LCALLDELAY10MS

MOVP0,SHOW2

LCALLDELAY10MS

MOVP0,SHOW3

LCALLDELAY10MS

MOVP0,SHOW4

LCALLDELAY10MS

LED_OFF:

MOVP0,#4FH

RET

;========================正常按键响声===========================

BEEP1:

CLRSOND

LCALLDELAY1

SETBSOND

RET

;========================非法按键响声============================

BEEP2:

CLRSOND

LCALLDELAYMS

LCALLDELAYMS

SETBSOND

RET

;=========================操作有误闪红灯=================================

LAMP_RED:

MOVR2,#06H

MOVR1,#0FFH

LAMP_LOOP:

DJNZR1,LAMP_LOOP

CPLRED

MOVR1,#0FFH

DJNZR2,LAMP_LOOP

SETBRED

RET

;==========================修改密码成功闪绿灯==========================================

LAMP_GREEN:

MOVR2,#06H

MOVR1,#0FFH

LAMP_LOOP1:

DJNZR1,LAMP_LOOP1

CPLGREEN

MOVR1,#0FFH

DJNZR2,LAMP_LOOP1

CLRGREEN

RET

;========================10MS延时===========================

DELAY10MS:

MOVR2,#04H

LOOP3:

MOVR1,#0F9H

LOOP4:

DJNZR1,LOOP4

DJNZR2,LOOP3

RET

;========================MS延时===========================

DELAYMS:

MOVR2,#0FFH

LOOP7:

MOVR1,#0FFH

LOOP8:

DJNZR1,LOOP8

DJNZR2,LOOP7

RET

;=========================声音延时===========================

DELAY1:

MOVR2,#0FFH

LOOP5:

MOVR1,#03FH

LOOP6:

DJNZR1,LOOP6

DJNZR2,LOOP5

RET

;==========================键值表===========================

KEY_VALUE:DB0EEH,0EDH,0EBH,0E7H,0DEH,0DDH,0DBH,0D7H,0BEH,0BDH,0BBH,0B7H,07EH,07DH,07BH,H

;==========================数字表===========================

TAB:DB00H,00H,00H,00H,00H,01H,02H,03H,04H,05H,06H,07H,08H,09H

预备知识:

1、汇编语言语句一般格式为_____________。

2、什么是寻址方式?寻址方式分为:____________、_____________、______________、

3、传送指令的分类及其格式

4、程序的基本结构有___________、_____________、_____________三种。

5、按控制条件,循环程序可分为_____________和_____________两种形式。

6、51系列的单片机的RAM为_____________,

7、51系列的中断源为_____________个,_____________个优先级。

8、总线分为_____________、_____________、_____________三类。

9、什么是时钟周期、机器周期、指令周期?三者之间有何联系?

10、在逻辑电路中,输入和输出只有两种状态,即_____________和_____________。通常以逻辑_____________和逻辑_____________表示电平高低

11、常用逻辑电路有_____________、_____________、_____________、_____________、_____________、_____________。_____________。

12、MCS-51的CPU能处理_____________位二进制数或代码。

13、51系列共有_____________个_____________位的定时器/计数器。

14、I/O是什么?I/O口是什么?

15、MCS-51单片机在物理结构上有_____________个存储空间。分别是_____________、_____________、_____________、_____________。

16、程序内存ROM寻址范围从_____________到_____________,容量为_____________KB。

17、译码器有_____________个输入端:分别是_____________,

_____________个输出端,分别是_____________。

18、80C51单片机共有_____________条指令,这些条指令共有_____________种寻址方式。

19、操作码与操作数之间必须用_____________分开,操作数与操作数之间必须用逗号_____________分开。

20、设某单片机系统的外接晶振频率为6MHz,使用定时器1以方式0产生周期为ms的等宽正方波连续脉冲,并由P1.0输出。试写出其设计程序。

21、说明下列指令中源操作数采用的寻址方式。

 MOVR5,R7

 MOVA,55H

 MOVA,#55H

JMP

A+DPTR

22、段数码管从内部接线上分_____________和_____________两种

23、机器语言指令由_______和_______两部分组成.

24、八段码显示器的结构及其工作原理。

25、如何用八段码显示器显示数字“3”?

流程卡:(2个课时)

电路板制作:(15个课时)

1、准备本项任务所需的材料、工具,

2、如果不全,缺哪些?

3、根据上一项目的制作步骤进行操作。

材料明细卡

平分卡:(2个课时)

数字钟的组装与维修(满分分)

评分页

工作小结:(1个课时)



转载请注明:http://www.abuoumao.com/hyfz/5151.html

网站简介| 发布优势| 服务条款| 隐私保护| 广告合作| 网站地图| 版权申明

当前时间: 冀ICP备19029570号-7