微机原理课程设计(电子密码锁)

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

一、设计目的
通过课程设计掌握控制系统设计的一般步骤,掌握系统总体控制方案的设计方法、8086微型计算机的应用方法、控制算法的设计及硬件设计方法。

复习并学习用软件编程控制硬件。

了解和掌握8086微机应用系统的软硬件设计过程、方法及实现,为以后设计实现8086微机应用系统打下良好的基础。

二、设计任务与要求
(1)密码锁在输入密码正确时控制电控锁开启,同时显示00字样;当输入密码错误时,发出错误警告,并显示FF字样;当3次误码输入时,产生报警;具有密码修改的功能。

(2)选用8086和适当的存储器及接口芯片完成相应的功能,用LED显示器显示电子锁的当前状态;画出详细的硬件连接图;给出程序设计思路、画出软件流程图;给出所有程序清单并加上必要注释;完成设计说明书(包括封面、目录、设计任务书、硬件设计思路、硬件原理图、软件设计思路、程序流程框图、程序清单、所用器件型号、总结体会、参考文献等)。

三、整体功能描述
本设计为多功能密码锁,使用存储器保存密码防止断电后密码丢失。

工作时按下按键蜂鸣器会发出声音提示按键有效并在数码管有“- -”闪烁字样,若相隔1分钟无按键按下,则清零。

在输入密码正确的条件下输出开锁电平,控制电控锁开启,同时显示OPEN字样。

开锁后可按下“复位/修改密码键”实现修改密码功能的转入,之后先输入密码再输入同样的密码确认才可成功修改,修改成功后蜂鸣器会发出三声,数码管“00”闪烁三次提示修改密码成功。

当输入密码错误时,发出错误警告声音,同时显示CLOSE字样,当输入密码错误次数累积够3次后,蜂鸣器会产生90秒的报警声响进行报警。

四、总体设计方案
根据本次设计的设计目的及设计要求,可有下列两种方案:
4.1 方案一
在本次设计中,因为密码锁的基本功能使可以判断密码是否正确,以及完成对密码的修改,所以需要用到输入设备以及CPU的接口电路以及相关存储设备;因为有报警提示功能,所以要用到相关的输出设备以及接口电路。

因为要完成逻辑运算功能,所以必须要有CPU,CPU就选用我们最常用也最熟悉的8086,考虑到8255的端口兼具输入输出功能,灵活方便,所以选用一片8255作为输入输出设备与8086间的借口;采用0到9数字按键以及相关功能选择的输入;输出设备方面,采用两位数码管实现题目的状态提示要求,用一个蜂鸣器作为相关的警报,提示的声音输出。

另外,为简化编程,采用8259中断控制器来触发中断实现密码锁工作模式的转换,其中的密码输入及判断功能与密码修改功能分别用两个外部中断来触发中断服务程序来实现。

本设计的密码位数为6位。

4.2 方案二
用汇编语言编写程序实现应用程序的功能,从而实现简易计算器汇编程序的设计与实现。

4.2.1使用设备
含有Windows汇编编译环境的MASM软件及Office 2003软件的计算机一台。

4.2.2汇编程序编写
汇编程序编写,根据设计要求编写实现该功能的源程序代码。

4.2.3使用方法
在masm环境下运行本程序,按提示输入正确密码,则在屏幕上显示00字样,否则显示FF字样。

五、硬件设计
本设计使用了8086、8259A、8255、8253、2764、74LS138、74LS148、地址锁存器、数码管以及74系列逻辑门、蜂鸣器、开关等芯片与元器件,实现了键盘输入、中断控制、计时、按键响应、开锁及报警等功能模块,其硬件连接框图如图1所示。

图1 硬件连接框图
5.1 键盘
本设计8255A的A口与两片级联的74LS148组合接用于输入键盘,实现对输入键号的读入。

工作时,8086通过程序扫描键盘,当无键盘按下时,74LS148工作于无输入状态,GS口输出高电平,接到PA4作为识别有无按键按下信号,PA 口输入为10H;当有按键输入时,74LS148输入口接到低电平,输入有效,经编码后键号转换为相应二进制编码送到PA口,成为能为CPU识别的代表键值的有效信号。

读入的按键信号经8086判断后,根据不同的功能,输出不同的按键响
应,并转移到相对应的功能服务程序。

本设计总共用到11位按键,包括10位数码输入按键及一位“复位/修改密码”按键,电路设计总共可用按键有16位,供升级功能使用。

键盘电路如下图2所示:
5.2 中断控制
用一片8259A芯片作为中断控制接口电路。

其中IR0与IR1中断开放,单片工作于非缓冲方式,电平触发,优先级是普通全嵌套方式。

可通过编程开中断,通过编程或者8253计时器关中断。

电路连接如图3所示:
图2 键盘连接图
5.3 计时
采用8253计时器控制中断的关断,实现单次输入密码超时则退出输入密码中断子程序、报警器响铃时间控制等功能。

电路如图3所示。

图3 中断控制器连接图
5.4 输入输出接口
输入输出接口采用可编程的8255A,8255A是Intel系列的并行接口芯片,常作为微机系统与外部设备接口。

在连接电路时8255 的PC0、PC1接到数码管片选,电路连接如图3所示。

同时用8255A的B口控制数码管的显示,C口片PC0、PC1选数码管,PC2用来驱动SPEAK发出报警电路如图4所示。

图4 按键响应、报警、开锁功能电路
5.5.储存器及片选电路
存储器及片选电路采用一片2764存储器和一片74LS138,连接电路如图5所示:
图5 片选及存储器电路
5.6 整机电路图:见附录一
六、软件设计
6.1 程序流程图
图6 程序流程图
6.2 程序清单:见附录二
七、设计总结与体会
通过本次课程设计,我对 8255,8253,8259等芯片的各引脚的功能、名称、
工作方式、内部结构有了更深层次的掌握,对这三种芯片的编程从陌生转向熟练。

通过这次的微机课程设计,对书本所学的知识有了进一步的巩固,并且对三种芯片各自的功能、工作方式有了明确性的区分。

在设计过程中遇到问题时,遇到含糊不清或者看不懂的地方及时翻阅相关课本知识。

有时看课本也没有结果时就和组员互相探讨。

在设计过程中,才发现自己遗漏许多课本的相关知识,对各芯片的功能及其工作方式掌握的不够清楚。

这说明在实践中才能真正的掌握从课本中所学的知识。

这次的课程设计让我为一年后的毕业设计打下了基础。

八、参考资料
九、附录
附录一:电路基本连接图
DATA SEGMENT ;以下代码写入RAM
CODEIN DB 6 DUP(?) ;输入的密码保存的地址
CODECH DB 6 DUP(?) ;修改后的密码的保存地址
CODEOR DB 0,0,0,0,0,0 ;初始密码
ORG 01000H ;下面的代码写入ROM
DTABLE DB 80H,02H,10H,3FH,79H,71H,60H,5BH
DATA ENDS
STACKS SEGMENT
STA DB 20 DUP(?)
STACKS ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACKS
START:
MOV SI,OFFSET CODEIN
MOV DI,OFFSET CODEOR
MOV BP,OFFSET DTABLE
MOV AL,09H ;(键盘输入中断)设定密码输入的中断向量(即IR0的中断向量) MOV AH,25H
INT 21H
PUSH BX
PUSH DS
MOV DX,SEG INPUT
MOV DS,DX
MOV DX,OFFSET INPUT
INT 21H
MOV AL,09H ;(键盘输入中断)设定密码修改的中断向量(即IR1的中断向量) MOV AH,25H
INT 21H
PUSH BX
PUSH DS
MOV DX,SEG CHANGE
MOV DS,DX
MOV DX,OFFSET CHANGE
INT 21H
MOV AL,1BH ;初始化8259
OUT 10H,AL ;单片工作,高电平有效
MOV AL,08H
OUT 11H,AL
MOV AL,03H
OUT 11H,AL
MOV AL,0FCH
OUT 11H,AL ;开放IR0,IR1
MOV AL,20H
OUT 10H,AL
MOV AL,68H
OUT 10H,AL
MOV AL,82H ;初始化8255 A口方式0输出,B口方式0输入,C口输出OUT 06H,AL
AA:
STI
MOV AL,00H
OUT 04H,AL ;输出低电平使数码管熄灭
INPUT: ;密码输入程序
CLI
MOV DL,00H
IN1:
CMP DL,06H ;判断是否连续6次输入错误密码
JNZ IN2 ;若不是这继续输入
MOV CX,03FFH ;使蜂鸣器长鸣报警(通过延时实现)
R1:
MOV DH,3FH
MOV AL,02H
OUT 00H,AL ;输出高电平使蜂鸣器发声
R2:
DEC DH
CMP DH,00H
JNZ R2
LOOP R1
JMP IN4 ;报警完毕,跳至中断返回
IN2: ;输入密码
MOV AL,[BP+4]
OUT 04H,AL ;数码管显示‘--’提示输入密码
MOV BX,0H
MOV CX,03H ;设置循环次数
IN3:
MOV BP,OFFSET DTABLE
MOV AL,[BP]
OUT 04H,AL ;数码管提示输入位数
CALL CCSCAN ;调用键盘扫描程序
CMP AL,0BH ;判断是否按下返回键
JZ IN4
MOV [BX+SI],AL ;保存输入密码
INC BX
INC BP
LOOP IN3
MOV BP,OFFSET DTABLE ;判断密码是否正确
CLD
MOV CX,03
MOV SI,OFFSET CODEIN
MOV DI,OFFSET CODEOR
REPZ CMPSB ;判断密码是否正确
JNZ WRO ;若错误就报警
MOV AL,[BP+3]
OUT 04H,AL ;若正确数码管就显示‘00‘MOV AL,04H
OUT 00H,AL ;且给LED高电平使其点亮XOR DL,AL
JMP IN4
WRO: ;出错报警部分
INC DL
MOV AL,[BP+5] ;数码管显示’FF‘提示错误OUT 04H,AL
MOV CX,03H ;设定蜂鸣器响的次数
W1:
MOV AL,02H ;使蜂鸣器发声
OUT 00H,AL
W2: ;延时
MOV BL,3FH
DEC BL
CMP BL,00H
JNZ W2
XOR AL,AL ;输出低电平关蜂鸣器
OUT 00H,AL
W3: ;延时
MOV BL,3FH
DEC BL
CMP BL,00H
JNZ W3
LOOP W1
JMP IN1 ;中断返回
IN4:
STI
IRET
CHANGE: ;密码修改程序CLI
MOV DL,00H
INP1:
CMP DL,06H
JNZ INP2
MOV CX,03FFH
RR1:
MOV DH,3FH
MOV AL,02H
OUT 00H,AL
RR2:
DEC DH
CMP DH,00H
JNZ RR2
LOOP RR1
JMP C4
INP2:
MOV AL,[BP+4]
OUT 04H,AL
MOV BX,0000H
MOV CX,03H
INP3:
MOV BP,OFFSET DTABLE
MOV AL,[BP]
OUT 04H,AL
CALL CCSCAN
CMP AL,0BH
JZ IN4
MOV [BX+SI],AL
INC BX
INC BP
LOOP INP3
MOV BP,OFFSET DTABLE
CLD
MOV CX,03
MOV SI,OFFSET CODEIN
MOV DI,OFFSET CODEOR
REPZ CMPSB
JNZ WRRO
MOV AL,[BP+3]
OUT 04H,AL
XOR DL,DL
JMP CHANGE
WRRO:
INC DL
MOV AL,[BP+5]
OUT 04H,AL
MOV CX,03H
WW1:
MOV AL,02H
OUT 00H,AL
WW2:
MOV BL,3FH
DEC BL
CMP BL,00H
JNZ WW2
XOR AL,AL
OUT 00H,AL
WW3:
MOV BL,3FH
DEC BL
CMP BL,00H
JNZ WW3
LOOP WW1
JMP INP1 ;当密码输入正确时,转入密码修改部分
CHAN: ;修改密码部分
MOV SI,OFFSET CODEIN
MOV DI,OFFSET CODECH
MOV AL,[BP+6] ;数码管提示第一次输入
OUT 04H,AL
MOV CX,03FFH
Y1:
LOOP Y1
MOV BP,OFFSET DTABLE
MOV BX,0H
MOV CX,03H
C1:
MOV AL,[BP]
OUT 04H,AL
CALL CCSCAN
CMP AL,0BH
JZ C4
MOV [BX+SI],AL ;存放在输入密码缓冲区
INC BX
INC BP
LOOP C1
MOV BP,OFFSET DTABLE
MOV AL,[BP+7]
OUT 04H,AL ;数码管提示第二次输入
MOV CX,03FFH
Y2:
LOOP Y2
MOV BP,OFFSET DTABLE
MOV BX,0H
MOV CX,03H
C2:
MOV AL,[BP]
OUT 04H,AL
CALL CCSCAN
CMP AL,0BH
JZ C4
MOV [BX+DI],AL ;存放在修改密码缓冲区
INC BX
INC BP
LOOP C2
MOV BP,OFFSET DTABLE
REPZ CMPSB
JNZ CHAN ;判断两次输入的密码是否一致MOV DI,OFFSET CODEOR
MOV CX,03H
CLD
REP MOVSB ; 若是相等那就保存密码MOV AL,02H ;且蜂鸣器响一下提示修改成功OUT 00H,AL
MOV CX,03FFH
C3: LOOP C3
XOR AL,AL
OUT 00H,AL ;中断返回
C4:
STI
IRET
CCSCAN PROC NEAR ;键盘扫描子程序MOV AL,00H
OUT 00H,AL
IN AL,02H
NOT AL
AND AL,0FH
CMP AL,00H ;判断是否有键按下JNZ K1
JMP CCSCAN
K1:
MOV CX,0EFFH ;延时
LOOP K1
IN AL,02H
CMP AL,00H
JZ CCSCAN
MOV AH,60H ;扫描第一列
K2:
MOV AL,AH
OUT 00H,AL
IN AL,02H
NOT AL
AND AL,0FH
CMP AL,00H ;判断是否有键按下JNZ K3
OR AH,01H
ROR AH,1 ;扫描下一列
AND AH,0FH
JMP K2
K3:
ADD AL,AH
RET
CCSCAN ENDP
CODE ENDS
END START
程序清单(二)利用DOS调用显示
DATA SEGMENT
TABLE DB '888'
STRING1 DB 'Please enter a passward:',0DH,0AH,'$' STRING2 DB 'Wrong!',0DH,0AH,'$'
STRING3 DB 'OPEN!','$'
STRING4 DB 'CLOSE!','$'
BUFFER DB 40,?,40 DUP(0)
TAB_LEN EQU 26
DATA ENDS
;
STACK SEGMENT
DB 100 DUP(0)
STACK ENDS
;
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START:MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA DX,STRING1
MOV AH,09H
INT 21H
LEA DX,BUFFER
MOV AH,0AH
INT 21H
MOV SI,DX
INC SI
MOV BL,[SI]
MOV BH,0
INC SI
LEA DI,TABLE
MOV CX,TAB_LEN
CMP CX,BX
JNC GOON
LEA DX,STRING2
JMP EXIT
GOON: CLD
MOV AL,[SI]
SCAN:REPNZ SCASB
JZ MATCH
ERROR: LEA DX,STRING4
JMP EXIT
MATCH: INC CX
CMP CX,BX
JC ERROR
PUSH CX
PUSH SI
PUSH DI
MOV CX,BX
DEC DI
REPZ CMPSB
POP DI
POP SI
POP CX
JZ FOUND
JCXZ ERROR
JMP SCAN FOUND: DEC DI
LEA DX,STRING3 EXIT:MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START。

相关文档
最新文档