1、.一、设计目的通过课程设计掌握控制系统设计的一般步骤,掌握系统总体控制方案的设计方法、8086 微型计算机的应用方法、控制算法的设计及硬件设计方法。复习并学习用软件编程控制硬件。了解和掌握 8086 微机应用系统的软硬件设计过程、方法及实现,为以后设计实现 8086 微机应用系统打下良好的基础。二、设计任务与要求(1) 密码锁在输入密码正确时控制电控锁开启,同时显示 00 字样;当输入密码错误时,发出错误警告,并显示 FF 字样;当 3 次误码输入时,产生报警;具有密码修改的功能。(2) 选用 8086 和适当的存储器及接口芯片完成相应的功能,用 LED 显示器显示电子锁的当前状态;画出详细的
2、硬件连接图;给出程序设计思路、画出软件流程图;给出所有程序清单并加上必要注释;完成设计说明书(包括封面、目录、设计任务书、硬件设计思路、硬件原理图、软件设计思路、程序流程框图、程序清单、所用器件型号、总结体会、参考文献等) 。三、 整体功能描述本设计为多功能密码锁,使用存储器保存密码防止断电后密码丢失。工作时按下按键蜂鸣器会发出声音提示按键有效并在数码管有“- -”闪烁字样,若相隔 1 分钟无按键按下,则清零。在输入密码正确的条件下输出开锁电平,控制电控锁开启,同时显示 OPEN 字样。开锁后可按下“复位/修改密码键”实现修改密码功能的转入,之后先输入密码再输入同样的密码确认才可成功修改,修改
3、成功后蜂鸣器会发出三声,数码管“00”闪烁三次提示修改密码成功。当输入密码错误时,发出错误警告声音,同时显示 CLOSE 字样,当输入密码错误次数累积够 3 次后,蜂鸣器会产生 90 秒的报警声响进行报警。四、总体设计方案根据本次设计的设计目的及设计要求,可有下列两种方案:4.1 方案一在本次设计中,因为密码锁的基本功能使可以判断密码是否正确,以及完成对密码的修改,所以需要用到输入设备以及 CPU 的接口电路以及相关存储设备;因为有报警提示功能,所以要用到相关的输出设备以及接口电路。因为要完成逻辑运算功能,所以必须要有 CPU,CPU 就选用我们最常用也最熟悉的 8086,考虑到 8255 的
4、端口兼具输入输出功能,灵活方便,所以选用一片 8255 作为输入输出设备与 8086 间的借口;采用 0 到 9 数字按键以及相关功能选择的输入;输出设备方面,采用两位数码管实现题目的状态提示要求,用一个蜂鸣器作为相关的警报,提示的声音输出。另外,为简化编程,采用 8259 中断控制器来触发中断实现密码锁工作模式的转换,其中的密码输入及判断功能与密码修改功能分别用两个外部中断来触发中断服务程序来实现。本设计的密码位数为 6 位。4.2 方案二.用汇编语言编写程序实现应用程序的功能,从而实现简易计算器汇编程序的设计与实现。4.2.1 使用设备含有 Windows 汇编编译环境的 MASM 软件及
5、 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 口与两片级联的 74L
6、S148 组合接用于输入键盘,实现对输入键号的读入。工作时,8086 通过程序扫描键盘,当无键盘按下时,74LS148 工作于无输入状态,GS 口输出高电平,接到 PA4 作为识别有无按键按下信号,PA 口输入为 10H;当有按键输入时,74LS148 输入口接到低电平,输入有效,经编码后键号转换为相应二进制编码送到 PA 口,成为能为 CPU 识别的代表键值的有效信号。读入的按键信号经 8086 判断后,根据不同的功能,输出.不同的按键响应,并转移到相对应的功能服务程序。本设计总共用到 11 位按键,包括 10 位数码输入按键及一位“复位/修改密码”按键,电路设计总共可用按键有 16 位,供
7、升级功能使用。键盘电路如下图2 所示:5.2 中断控制用一片 8259A 芯片作为中断控制接口电路。其中 IR0 与 IR1 中断开放,单片工作于非缓冲方式,电平触发,优先级是普通全嵌套方式。可通过编程开中断,通过编程或者 8253 计时器关中断。电路连接如图 3 所示:图 2 键盘连接图5.3 计时采用 8253 计时器控制中断的关断,实现单次输入密码超时则退出输入密码中断子程序、报警器响铃时间控制等功能。电路如图 3 所示。.图 3 中断控制器连接图5.4 输入输出接口输入输出接口采用可编程的 8255A,8255A 是 Intel 系列的并行接口芯片,常作为微机系统与外部设备接口。在连接
8、电路时 8255 的 PC0、PC1 接到数码管片选,电路连接如图 3 所示。同时用 8255A 的 B 口控制数码管的显示,C 口片PC0、PC1 选数码管,PC2 用来驱动 SPEAK 发出报警电路如图 4 所示。图 4 按键响应、报警、开锁功能电路.5.5储存器及片选电路存储器及片选电路采用一片 2764 存储器和一片 74LS138,连接电路如图 5 所示:图 5 片选及存储器电路5.6 整机电路图:见附录一六、软件设计6.1 程序流程图.开始程序初始化8 2 5 5 . 8 2 5 9 初始化从 R A M 存储器中读出密码 定义 D I . S I 指针开中断d a t a 2 与
9、 d a t a 3 数据串比较相等 ?开锁 , 并显示 0 0扫描键盘 , 有修改密码键 ?定义 S I , D I 指针开中断 , 实现密码输入转存到 d a t a 2有修改密码键输入 ?开中断 , 重新输入密码比较是否为首次输入密码 ?转存密码到 R A M 铃声确认修改密码成功扫描键盘是否有修改密码键输入保持开锁状态结束错误计数器加 1错误累积超过 6 次 ?保持关锁结束NN报警响铃 ,输出显示 F FYYNYNY图 6 程序流程图6.2 程序清单:见附录二 七、设计总结与体会通过本次课程设计,我对 8255,8253,8259等芯片的各引脚的功能、名称、.工作方式、内部结构有了更深
10、层次的掌握,对这三种芯片的编程从陌生转向熟练。通过这次的微机课程设计,对书本所学的知识有了进一步的巩固,并且对三种芯片各自的功能、工作方式有了明确性的区分。在设计过程中遇到问题时,遇到含糊不清或者看不懂的地方及时翻阅相关课本知识。有时看课本也没有结果时就和组员互相探讨。在设计过程中,才发现自己遗漏许多课本的相关知识,对各芯片的功能及其工作方式掌握的不够清楚。这说明在实践中才能真正的掌握从课本中所学的知识。这次的课程设计让我为一年后的毕业设计打下了基础。八、参考资料九、附录附录一:电路基本连接图.附录二:程序清单(一)DATA SEGMENT ;以下代码写入 RAM.CODEIN DB 6 DU
11、P(?) ;输入的密码保存的地址CODECH DB 6 DUP(?) ;修改后的密码的保存地址CODEOR DB 0,0,0,0,0,0 ;初始密码ORG 01000H ;下面的代码写入 ROMDTABLE DB 80H,02H,10H,3FH,79H,71H,60H,5BHDATA ENDSSTACKS SEGMENTSTA DB 20 DUP(?)STACKS ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSSTART:MOV SI,OFFSET CODEINMOV DI,OFFSET CODEORMOV BP,OFFSET DTABLEMO
12、V AL,09H ;(键盘输入中断)设定密码输入的中断向量(即 IR0 的中断向量)MOV AH,25HINT 21HPUSH BXPUSH DSMOV DX,SEG INPUTMOV DS,DXMOV DX,OFFSET INPUTINT 21HMOV AL,09H ;(键盘输入中断)设定密码修改的中断向量(即 IR1 的中断向量)MOV AH,25HINT 21HPUSH BXPUSH DSMOV DX,SEG CHANGEMOV DS,DXMOV DX,OFFSET CHANGEINT 21HMOV AL,1BH ;初始化 8259OUT 10H,AL ;单片工作,高电平有效MOV AL
13、,08HOUT 11H,ALMOV AL,03HOUT 11H,AL.MOV AL,0FCHOUT 11H,AL ;开放 IR0,IR1MOV AL,20HOUT 10H,ALMOV AL,68HOUT 10H,ALMOV AL,82H ;初始化 8255 A 口方式 0 输出,B 口方式 0 输入,C 口输出OUT 06H,ALAA:STIMOV AL,00HOUT 04H,AL ;输出低电平使数码管熄灭INPUT: ;密码输入程序CLIMOV DL,00HIN1:CMP DL,06H ;判断是否连续 6 次输入错误密码JNZ IN2 ;若不是这继续输入MOV CX,03FFH ;使蜂鸣器长
14、鸣报警(通过延时实现)R1:MOV DH,3FHMOV AL,02HOUT 00H,AL ;输出高电平使蜂鸣器发声R2:DEC DHCMP DH,00HJNZ R2LOOP R1JMP IN4 ;报警完毕,跳至中断返回IN2: ;输入密码MOV AL,BP+4OUT 04H,AL ;数码管显示-提示输入密码MOV BX,0HMOV CX,03H ;设置循环次数IN3:MOV BP,OFFSET DTABLEMOV AL,BPOUT 04H,AL ;数码管提示输入位数.CALL CCSCAN ;调用键盘扫描程序CMP AL,0BH ;判断是否按下返回键JZ IN4MOV BX+SI,AL ;保存
15、输入密码INC BXINC BPLOOP IN3MOV BP,OFFSET DTABLE ;判断密码是否正确CLDMOV CX,03MOV SI,OFFSET CODEINMOV DI,OFFSET CODEORREPZ CMPSB ;判断密码是否正确JNZ WRO ;若错误就报警MOV AL,BP+3OUT 04H,AL ;若正确数码管就显示00MOV AL,04HOUT 00H,AL ;且给 LED 高电平使其点亮XOR DL,ALJMP IN4WRO: ;出错报警部分INC DLMOV AL,BP+5 ;数码管显示FF提示错误OUT 04H,ALMOV CX,03H ;设定蜂鸣器响的次数
16、W1:MOV AL,02H ;使蜂鸣器发声OUT 00H,ALW2: ;延时MOV BL,3FHDEC BLCMP BL,00HJNZ W2XOR AL,AL ;输出低电平关蜂鸣器OUT 00H,ALW3: ;延时MOV BL,3FHDEC BLCMP BL,00HJNZ W3.LOOP W1JMP IN1 ;中断返回IN4:STIIRETCHANGE: ;密码修改程序CLIMOV DL,00HINP1:CMP DL,06HJNZ INP2MOV CX,03FFHRR1:MOV DH,3FHMOV AL,02HOUT 00H,ALRR2:DEC DHCMP DH,00HJNZ RR2LOOP
17、RR1JMP C4INP2:MOV AL,BP+4OUT 04H,ALMOV BX,0000HMOV CX,03HINP3:MOV BP,OFFSET DTABLEMOV AL,BPOUT 04H,ALCALL CCSCANCMP AL,0BHJZ IN4MOV BX+SI,ALINC BXINC BPLOOP INP3MOV BP,OFFSET DTABLECLDMOV CX,03.MOV SI,OFFSET CODEINMOV DI,OFFSET CODEORREPZ CMPSBJNZ WRROMOV AL,BP+3OUT 04H,ALXOR DL,DLJMP CHANGEWRRO:INC
18、 DLMOV AL,BP+5OUT 04H,ALMOV CX,03HWW1:MOV AL,02HOUT 00H,ALWW2:MOV BL,3FHDEC BLCMP BL,00HJNZ WW2XOR AL,ALOUT 00H,ALWW3:MOV BL,3FHDEC BLCMP BL,00HJNZ WW3LOOP WW1JMP INP1 ;当密码输入正确时,转入密码修改部分CHAN: ;修改密码部分MOV SI,OFFSET CODEINMOV DI,OFFSET CODECHMOV AL,BP+6 ;数码管提示第一次输入OUT 04H,ALMOV CX,03FFHY1:LOOP Y1MOV BP
19、,OFFSET DTABLEMOV BX,0HMOV CX,03H.C1:MOV AL,BPOUT 04H,ALCALL CCSCANCMP AL,0BHJZ C4MOV BX+SI,AL ;存放在输入密码缓冲区INC BXINC BPLOOP C1MOV BP,OFFSET DTABLEMOV AL,BP+7OUT 04H,AL ;数码管提示第二次输入MOV CX,03FFHY2:LOOP Y2MOV BP,OFFSET DTABLEMOV BX,0HMOV CX,03HC2:MOV AL,BPOUT 04H,ALCALL CCSCANCMP AL,0BHJZ C4MOV BX+DI,AL
20、;存放在修改密码缓冲区INC BXINC BPLOOP C2MOV BP,OFFSET DTABLEREPZ CMPSBJNZ CHAN ;判断两次输入的密码是否一致MOV DI,OFFSET CODEORMOV CX,03HCLDREP MOVSB ; 若是相等那就保存密码MOV AL,02H ;且蜂鸣器响一下提示修改成功OUT 00H,ALMOV CX,03FFHC3: LOOP C3XOR AL,ALOUT 00H,AL ;中断返回.C4:STIIRETCCSCAN PROC NEAR ;键盘扫描子程序MOV AL,00HOUT 00H,ALIN AL,02HNOT ALAND AL,0
21、FHCMP AL,00H ;判断是否有键按下JNZ K1JMP CCSCANK1:MOV CX,0EFFH ;延时LOOP K1IN AL,02HCMP AL,00HJZ CCSCANMOV AH,60H ;扫描第一列K2:MOV AL,AHOUT 00H,ALIN AL,02HNOT ALAND AL,0FHCMP AL,00H ;判断是否有键按下JNZ K3OR AH,01HROR AH,1 ;扫描下一列AND AH,0FHJMP K2K3:ADD AL,AHRETCCSCAN ENDPCODE ENDSEND START程序清单(二)利用 DOS 调用显示DATA SEGMENTTABL
22、E 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 26DATA ENDS;STACK SEGMENT DB 100 DUP(0)STACK ENDS;CODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV ES,AXLEA DX,STR
23、ING1MOV AH,09HINT 21HLEA DX,BUFFERMOV AH,0AHINT 21HMOV SI,DXINC SIMOV BL,SIMOV BH,0INC SILEA DI,TABLEMOV CX,TAB_LENCMP CX,BXJNC GOONLEA DX,STRING2JMP EXITGOON: CLDMOV AL,SISCAN:REPNZ SCASBJZ MATCHERROR: LEA DX,STRING4JMP EXITMATCH: INC CXCMP CX,BX.JC ERRORPUSH CXPUSH SIPUSH DIMOV CX,BXDEC DIREPZ CMPSBPOP DIPOP SIPOP CXJZ FOUNDJCXZ ERRORJMP SCAN FOUND: DEC DILEA DX,STRING3EXIT:MOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START