微机原理课程设计++多功能密码锁.docx
《微机原理课程设计++多功能密码锁.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计++多功能密码锁.docx(19页珍藏版)》请在冰豆网上搜索。
微机原理课程设计++多功能密码锁
微机原理课程设计报告
学院:
专业:
班级:
姓名:
指导老师:
设计任务:
多功能密码锁
目录
一、设计目标
二、设计要求
三、整体功能描述
四、硬件设计功能模块
1.键盘
2.中断控制
3.计时
4.按键响应
5.报警
6.储存器及片选
7.整机电路
五、程序流程图
六、程序清单
七、设计总结
一、设计目标
1.密码锁在输入密码正确的条件下输出开锁电平,控制电控锁开启,同
显示O字样。
2.当输入密码错误时,发出错误警告声音,同时显示C字样。
3.当六次误码输入的条件下,产生报警电平报警。
4.还可以实现对密码的修改,修改成功后,蜂鸣器发出确认音。
二、设计要求
1、选用8088和适当的存储器及接口芯片完成相应的功能。
2、用LED显示器显示电子锁的当前状态。
3、画出详细的硬件连接图。
4、给出程序设计思路、画出软件流程图。
5、给出地址分配表。
6、给出所有程序清单并加上必要注释。
7、完成设计说明书(列出参考文献,所用器件型号)。
三、整体功能描述
本设计为多功能密码锁,使用存储器保存密码防止断电后密码丢失。
工作时按下按键蜂鸣器会发出声音提示按键有效并在数码管有“--”闪烁字样,若相隔1分钟无按键按下,则清零。
在输入密码正确的条件下输出开锁电平,控制电控锁开启,同时显示O字样。
开锁后可按下“复位/修改密码键”实现修改密码功能的转入,之后先输入密码再输入同样的密码确认才可成功修改,修改成功后蜂鸣器会发出三声,数码管“O”闪烁三次提示修改密码成功。
当输入密码错误时,发出错误警告声音,同时显示FF字样,当输入密码错误次数累积够6次后,蜂鸣器会产生90秒的报警声响进行报警。
四、硬件设计功能模块
本设计使用了8088、8259A、8255、8253、A28F512、74LS138、74LS148、地址锁存器、数码管以及74系列逻辑门、蜂鸣器、开关等芯片与元器件,实现了键盘输入、中断控制、计时、按键响应、开锁及报警等功能模块。
以下一一详述。
1.键盘
本设计8255A的A口与两片级联的74LS148组合接用于输入键盘,实现对输入键号的读入。
工作时,8086通过程序扫描键盘,当无键盘按下时,74LS148工作于无输入状态,GS口输出高电平,接到PA4作为识别有无按键按下信号,PA口输入为10H;当有按键输入时,74LS148输入口接到低电平,输入有效,经编码后键号转换为相应二进制编码送到PA口,成为能为cpu识别的代表键值的有效信号。
读入的按键信号经8086判断后,根据不同的功能,输出不同的按键响应,并转移到相对应的功能服务程序。
本设计总共用到11位按键,包括10位数码输入按键及一位“复位/修改密码”按键,电路设计总共可用按键有16位,供升级功能使用。
键盘电路如下所示:
图1键盘连接图
2.中断控制
用一片8259芯片作为中断控制接口电路。
可通过编程开中断,通过编程或者8253计时器关中断。
电路连接如下:
图2中断控制器连接图
3.计时
采用8253计时器控制中断的关断,实现单次输入密码超时则退出输入密码中断子程序、报警器响铃时间控制等功能。
电路如图2所示。
4.按键响应
8255PC0、PC1接到数码管片选、PC2接到蜂鸣器、PC3接到电子锁。
电路连接如图3所示:
图3按键响应、报警、开锁功能电路
5.报警功能
同时用8255A的B口控制数码管的显示,C口片PC0、PC1选数码管,PC2用来驱动SPEAK发出报警。
电路如图3所示。
6.储存器及片选电路:
图4片选及存储器电路
7.整机电路图:
五、软件流程图:
六、程序清单:
各芯片地址:
825930H
825560H
825320H
存储器2000H
DATASSEGMENT;程序初始化
DATA1DB'0','0','0','0','0','0'
DATA2DB6DUP(?
)
DATA3DB6DUP(?
)
DATA4DB6DUP(?
)
DATASENDS
STACKSSEGMENTPARASTACK'STACK'
STADB100DUP(?
)
TOPEQULENGTHSTA
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS,ES:
DATAS
START:
MOVAX,DATAS
MOVDS,AX
MOVAX,STACKS
MOVSS,AX
MOVSP,TOP
MOVAX,0;初始化中断向量表
MOVES,AX
MOVBX,84H;IR1中断类型码21h*4=84h
MOVAX,OFFSETINPUT
MOVES:
[BX],AX
MOVAX,SEGINPUT;段地址
MOVES:
[BX+2],AX
MOVAL,90H;8255初始化,A口方式0,输入;B、c口方式0,输出
OUT63H,AL
MOVAL,36H;8253初始化,方式0
OUT23H,AL
MOVAL,13H;8259A初始化,ICW1
OUT30H,AL
MOVAL,20H;ICW2
OUT31H,AL
MOVAL,01;ICW4
OUT31H,AL
MOVAL,00;OCW1
OUT31H
MOVCX,06H;从RAM里读出密码到DATA2,密码为6位
MOVSI,2000H
MOVDI,OFFSETDATA2
LP1:
MOVAL,[SI]
MOV[DI],AL
INCSI
INCDI
LOOPLP1;读入密码结束
MOVBX,00;输入密码次数计数器初始值
RE:
MOVAL,03H
OUT62H,AL
MOVAL,71H;未开锁,B口输出显示FF
OUT61H,AL
MOVCX,06H
MOVSI,OFFSETDATA2;定义SI、DI
MOVDI,OFFSETDATA3
HLT
STI;停机,开中断,等待密码输入
CLD
INCBX;输入密码次数加1
REPECMPSB;将输入六位数码与密码比较
CMPCX,00
JEOPEN;相等则转到开锁
CMPBX,06H;输入错误且累积未够6次,重新输入
JNERE
MOVAL,07H;若错误次数累积够6次,触发蜂鸣器报警
OUT62H,AL
MOVAL,71H;B口输出FF
OUT61H,AL
MOVAL,2048H;报警铃响计时,90秒后关断蜂鸣器,保持显示FF
OUT20H,AL
MOVAL,03H
OUT62H,AL
JMPDOON;跳到结束
OPEN:
MOVAL,0BH;开锁,并显示00
OUT62,AL
MOVAL,3FH
OUT61H
C1:
INAL,60H
CALLD20MS;去抖动
CMPAL,00H
JEC1
CMPAL,0AH;扫描键盘,是否有修改密码建(10)输入
JNEDOON;没有则结束
C0:
MOVSI,OFFSETDATA2;重新定义SI、DI
MOVDI,OFFSETDATA3
MOVCX,06H
HLT
STI;开中断,输入修改程序
C2:
MOVAL,[DI]
MOV[SI],AL
INCSI
INCDI
LOOPC2;输入密码转移到data2
INAL,60H;扫描键盘,若有修改密码键输入则重新修改
CALLD20MS
CMPAL,0AH
JEC0
C3:
MOVSI,OFFSETDATA2;再次输入密码确认
MOVDI,OFFSETDATA3
MOVCX,06H
HLT
STI
REPECMPSB
CMPCX,00;若data2与data3不相等则从新输入
JNEC3
MOVCX,06H;若相等,则从DATA2写密码到RAM
MOVSI,2000H
MOVDI,OFFSETDATA2
C4:
MOVAL,[DI]
MOV[SI],AL
INCSI
INCDI
LOOPC4;转存密码结束
CALLRING2;蜂鸣三次,表示修改好了
INAL,60H;扫描键盘,若有修改密码键输入则重新修改
CALLD20MS
CMPAL,0AH
JEC0
JMPDOON;修改完毕,转到结束
;中断子程序
INPUT:
PUSHAX;保护现场
PUSHDS
PUSHBX
PUSHCX
PUSHDI
PUSHSI
MOVAL,1020H;8253开始一分钟输入限制计时
OUT20H,AL
IN1:
INAL,60H;读A口
CALLD20MS;去抖动
CMPAL,10H
JEIN1;若无按键按下,则重新扫描
CMPAL,0AH;若有按键按下,比较是否为复位键
JNEIN3
CALLRING1;为复位键则输出按键有效提示音并重新输入
MOVCX,06H
MOVDI,OFFSETDATA3
JMPIN1
IN3:
CALLRING1;若不是复位键,则把键值送到data3
MOV[DI],AL
INCDI
LOOPIN1;循环,扫描下一次按键,直到输入够6位密码
MOVAL,01
OUT30,AL
POPSI;中断结束恢复现场
POPDI
POPCX
POPBX
POPDS
POPAX
CLI;关中断
IRET;中断返回
DOON:
MOVAH,4CH
INT21H
;20ms延时子程序
D20MSPROCNEAR
PUSHCX
MOVCX,0080H
D1:
DECCX
LOOPD1;循环
POPCX
RET;返回
D20MSENDP
;输入按键响应子程序
RING1PROCNEAR
PUSHAX;保护AX\CX
PUSHCX
MOVCX,05H;设置提示音为0.1秒
MOVAL,07H;输出显示“--”字样
OUT62H,AL
MOVAL,40H
OUT61H,AL
R1:
CALLD20MS
LOOPR1
MOVAL,00H;数码管灭
OUT62H,AL
POPCX
POPAX
RET;返回
RING1ENDP
;修改确认铃声子程序
RING2PROCNEAR
PUSHAX
PUSHCX
MOVCX,03H;三次0.1秒的提示声
R2:
MOVAL,0FH;开铃声
OUT62H,AL
MOVAL,40H
OUT61H,AL
CALLD20MS;延时0.1秒
CALLD20MS
CALLD20MS
CALLD20MS
CALLD20MS
MOVAL,00H
OUT62H,AL;关铃声
CALLD20MS;延时0.1秒
CALLD20MS
CALLD20MS
CALLD20MS
CALLD20MS
LOOPR2;循环
MOVAL,0BH;恢复开锁状态
OUT62H,AL
MOVAL,3FH
OUT61H,AL
POPCX
POPAX
RET
RING1ENDP;返回
CODESENDS
ENDSTART;结束
七、设计总结
1、遇到的问题及解决方法
首先遇到的问题是键盘的设计,刚开始想用8279,但是对8279不够熟悉,研究了一下就放弃了,再而想到用8255的A、B口组合64位矩阵键盘或者用C口低4位与高4位组合的16位键盘,但最后还是使用了开关与编码器组合的形式组成16位键盘,简单明了,但是还没有解决双键同时按下的问题。
再而由于学8259的时候不够认真,所以开始写8259初始化的时候也显的力不从心,最终参考了书本和其他资料,还是写了出来。
设计中接触到的另一个问题是密码的储存的问题,刚开始没有想到cpu关机后密码消失的问题,后来加了一篇存储器实现了密码的保存。
遇到的其他问题都跟同学们讨论而得到了一定的解决。
2、课程设计总结
通过本次课程设计,我进一步了解8255,8253,8259等芯片的内部结构,熟悉各种基本工作模式和编程方法;
加深了对8086中断系统工作过程的了解;
学会综合应用多种微机接口与单元电路,构成满足要求的小型微机应用系统;
学会了CPU与存储器的连接方法,扩展存储空间的方法。
3、参考资料
《微型计算机原理及应用》吴荣光吕钧星编著,华南理工大学出版社
《微型计算机原理与汇编语言程序设计》赵国相等编著,科学出版社
《精通ProtelDXP2004电路设计》张睿赵艳华刘志刚编著,电子工业出版社