单片机综合设计实验 单片机密码锁

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机综合设计实验单片机密码锁

单片机综合设计实验

一、实验目的

掌握嵌入式系统的设计原理、程序编写与调试的开发过程。

二、实验内容

电子密码锁设计(A类):根据设定好的密码,采用8个按键实现密码的输入功能,当密码输入正确之后,锁就打开,显示某个字符;如果输入的三次的密码不正确,就锁定按键3秒钟,同时发出报警声显示另一个字符,直到没有按键按下3秒后,才打开按键锁定功能;否则在3秒钟内仍有按键按下,就重新锁定按键3秒时间并报警。在单片机实验板上实现

二、实验要求

1、根据给定题目设计Proteus仿真原理图;

2、根据给定题目设计有关的51汇编语言(或C语言)源程序,并编译

成可执行文件;

3、在Proteus仿真界面下运行程序实现给定的功能。

三.程序设计内容

(1).密码的设定,在此程序中密码是固定在程序存储器ROM中,假设预设的密码为“21213232”共8位密码。

(2).密码的输入问题:由于采用按键来完成密码的输入,首先输入密码的长度,接着根据密码的长度输入密码的位数,直到所有长度的密码都已经输入完毕,才能完成密码的输入过程。进入密码的判断比较处理状态并给出相应的处理过程。

(3).按键禁止功能:初始化时,是允许按键输入密码,当有按键按下并开始进入按键识别状态时,按键禁止功能被激活,但启动的状态在3次密码输入不正确的情况下发生的。

Proteus 仿真原理图:

开始 初始化 有键按下?

调用显示

启动定时 识别按键

按键数=8? 超时?

比较密码 开门 开始

自动清除

<3次?

报警

N

N

Y

Y

Y

Y

N

N

主程流程图

程序

TIM EQU -2000

DISP DATA 30H ; 30-34H

DIS DATA 35H

KEY DATA 36H

WRONG DATA 50H

CNT DATA 51H

CLK BIT P0.0

DAT BIT P0.1

STR BIT P0.2

BEEP BIT P0.7

S4 BIT P2.7

S3 BIT P2.6

S2 BIT P2.5

S1 BIT P2.4

K1 BIT P2.3

K2 BIT P2.2

K3 BIT P2.1

K4 BIT P2.0

ORG 0000H

LJMP MAIN

ORG 000BH

LJMP TIM0

ORG 001BH

LJMP DT1

MAIN: MOV SP,#60H

;MOV IE,#82H

SETB EA

SETB ET0

SETB ET1

MOV TMOD,#11H

MOV TH0,#HIGH(TIM)

MOV TL0,#LOW(TIM)

MOV TH1,#70H ;定时20ms

MOV TL1,#00H ;

SETB TR0

MOV KEY,#0

MOV R5,#08H

MOV R0,#40H

MOV WRONG ,#00H

MOV DISP+0,#0FFH

MOV DISP+1,#0FFH

MOV DISP+2,#0FFH

MOV DISP+3,#0FFH ;............................................

;大循环;............................................

START: MOV R5,#08H

MOV R0,#40H

LCALL INPUT

LCALL COMPARE

LJMP START ;............................................

LOOP: INC WRONG

MOV DISP+1,#0EH ;第二个数码管显示"E"表示密码输入错误,锁没有打开

MOV KEY,#0

SJMP START ;............................................

;输入8位密码;............................................

INPUT: MOV A,KEY

JZ INPUT

MOV @R0,A

MOV A,@R0

;MOV DISP+3,A

MOV DISP+3,A

LCALL DELAY_S ;消抖

INC R0

MOV KEY,#0

DJNZ R5,INPUT

MOV KEY,#0

RET ;.............................................

;判断输入的密码是否正确;.............................................

COMPARE: MOV R1,#00H

MOV R5,#08H

MOV R0,#40H

MOV A,WRONG

CJNE A,#2,NEXT ;判断输入错误次数是否等于3,不等于跳转NEXT

MOV WRONG,#00H ;等于3调用按键锁定子程序

MOV KEY,#0

LCALL LOCK ;调用键盘锁定程序

SJMP NEXT_1 ;子程序返回NEXT: MOV DPTR,#TAB ;输入的密码与预先设定的密码相比较

MOV A,R1

MOVC A,@A+DPTR

;MOV A,R1

MOV B,@R0

CJNE A,B, LOOP

INC R1

INC R0

DJNZ R5, NEXT ;判断8位有没有比较完

; MOV DISP+3,#0FFH

; MOV DISP+2,#0FFH

MOV DISP+1,#0AH ;密码正确显示A

; MOV DISP+0,#0FFH

NEXT_1: RET ;...........................................

;锁定按键3秒钟;...........................................

LOCK: MOV KEY,#00H

MOV DISP+1,#0FH ;第二个数码管显示"F"表示三次密码输入错误,锁定按键锁定三秒过后第二个数码管显示关

SETB TR1

MOV CNT,#00H

LOCK_N:

CLR BEEP

MOV A,KEY

JNZ LOCK ;A=0说明没有按键按下,不需要重新锁定,程序顺序执行,A!=0说明有键按下,重新锁定

MOV A,CNT

MOV KEY,#0

CJNE A,#150,LOCK_N ;判断锁定时间是否到3秒

CLR TR1 ;关中断

SETB BEEP ; 关蜂鸣器

MOV DISP+1,#0ffh

MOV CNT,#00H ;计数器清零

RET ;中断返回;............................................

;中断0的子程序;............................................

TIM0: PUSH ACC

PUSH PSW

MOV TH0,#HIGH(TIM)

MOV TL0,#LOW(TIM)

MOV A,DIS

LCALL GETDIS

MOV A,DIS

ADD A,#DISP

MOV R1,A

MOV A,@R1

LCALL GETSEG

KEY0P: JB K1,KEY1P

MOV A,DIS

ADD A,#1

MOV KEY,A

KEY1P: JB K2,KEY2P

MOV A,DIS

ADD A,#5

MOV KEY,A

KEY2P: JB K3,KEY3P

MOV A,DIS

ADD A,#9

MOV KEY,A

KEY3P: JB K4,KEYP

MOV A,DIS

ADD A,#13

MOV KEY,A

KEYP: INC DIS

MOV A,DIS

CJNE A,#4,TIME

MOV DIS,#0

TIME: POP PSW

POP ACC

RETI ;.............................................

;中断服务程序2

DT1: MOV TH1,#70H

MOV TL1,#00H

INC CNT

RETI ;............................................

;延时子程序1 ;............................................

DLYTIM: MOV R6,#200 DLYR7: MOV R7,#200

DJNZ R7,$

DJNZ R6,DLYR7

RET ;.............................................

;延时子程序2 ;............................................. DELAY_S:MOV R4,#10

MOV R6,#200

DLYR8: MOV R7,#200

DJNZ R7,$

DLAY1: DJNZ R6,DLYR8

DJNZ R4, DLAY1

RET ;........................................... ;........................................... GETSEG: MOV R1,A

LCALL DISPLAY

RET ;.......................................... ;.......................................... GETDIS: MOV DPTR,#NUMTAB MOVC A,@A+DPTR

CPL A

MOV P2,A

RET ;.........................................

相关文档
最新文档