微机原理多功能密码锁Word格式文档下载.docx
《微机原理多功能密码锁Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《微机原理多功能密码锁Word格式文档下载.docx(30页珍藏版)》请在冰点文库上搜索。
根据实验系统的配置,可以通过使步进电机转动180度来模拟开锁和关锁动作。
二、设计要求
1、用LED显示器现实电子锁的当前状态;
2、画出详细的硬件连接图;
3、给出程序设计思路、画出软件流程图;
4、给出所有程序清单,并加上必要注释;
5、完成设计说明书(列出参考文献)。
三、方案选择及原理这次的设计要求是在密码输入正确时输出开锁电平和显示“0”,密码错误时显
示“C”和蜂鸣器发出报警声音等,我们采用8255A的A口低四位和C口的低三位组成4x3的矩阵键盘,同时A口的低六位为选管;
B口作为显示器的输出;
C口高四位的PC4口输出开锁电平,对于6次密码错误输入,PC5口输出报警电平。
用8253计数器产生警告音和确认音。
用蜂鸣器发声次数来区分确认和警告声音,一声表示确认,三声表示警告。
采用Proteus自带的键盘元件KEYPAD-PHO,NE0-9为数字键,#为确认/返回键和*为密码修改键,每次对键盘扫描,获得对应的键值。
四、使用器件
CPU8086、并行接口8255A、地址锁存器74LS273、4线-16线译码器74HCT154、石英晶振,可编程定时/计数器8253、共阴极数码管、各类逻辑门、蜂鸣器,电阻、键盘等。
五、主要器件简介
CPU8086
8086是Inter系列的16位微处理器,芯片上有2.9万个晶体管,采用HMOS工艺制造,用单一的+5V电源,时钟频率为5MHz-10MH。
z8086有16根数据线和20根地址线,它既能处理16位数据,也能处理8位数据。
可寻址的内存空间为1MB。
并行接口8255
Intel8086/8088系列的可编程外设接口电路(ProgrammablePeripheralInterface)简称PPI,型号为8255,具有24条输入/输出引脚、可编程的通用并行输入/输出接口电路。
它是一片使用单一+5V电源的40脚双列直插式大规模集成电路。
8255A的通用性强,使用灵活,通过它CPU可直接与外设相连接。
可编程定时/计数器8253
8253可编程定时器/计数器是8086微机系统常用的定时/计数器芯片,它具有定时与计数两大功能。
8253可编程定时器/计数器具有3个独立的16位计数器通过编程可选择六种工作方式,可选择二进制或十进制计数,最高计数速率可达2.6MHz。
所有的输入、输出电平都与TTL兼容。
地址锁存器74LS273是带清除端的D触发器,只有清除端为高电平时才具有锁存功能,锁存控制端为11脚CLK,在上升沿锁存。
8086的ALE端输出的锁存控制信号必须经反相器后才能连到74LS273的CLK端,以满足CLK在上升沿锁存的要求。
4线-16线译码器74HCT154
74HCT154为4线-16线译码器,将4个二进制编码输入译成16个彼独立的输出之一,并能将数据从一个输入线分配到16个输出的任意一个而实现解调功能,与大部分TTL和DTL电路完全兼容。
其工作原理如下:
这种单片4线—16线译码器非常适合用于高性能存储器的译码器。
当两个选通输入G1和G2为低时,它可将4个二进制编码的输入译成16个互相独立的输出之一。
实现解调功能的办法是:
用4个输入线写出输出线的地址,使得在一个选通输入为低时数据通过另一个选通输入。
当任何一个选通输入是高时,所有输出都为高。
六、原理图
1、8086和8255A连接
8255A地址分配:
PA:
200HPB:
202HPC:
204H控制寄存器:
206H为了满足8255A的四个端口地址必须为偶地址这一要求,将8255A的A1、A0分别与8086系统地址总线的A2、A1相连,并且,CPU在对8255A的端口进行访问时,总是将地址中的A0设置为0。
2、8255A的A口、C口与矩阵键盘连接
键盘元件KEYPAD-PHO,NE0-9为数字键,#为确认/返回键和*为密码修改键。
数字键1-9的键值为相应的数值,数字键0的键值为0BH,功能键*的键值为0AH,能键#的键值为0CH。
3、8255A的A口、B口与数码管的连接
8255A的B口输出数码管的段码,A口输出数码管的位码
4、8086与8253连接
8253地址分配:
计数器0:
400H计数器1:
402H计数器2:
404H控制寄存器:
406H为了满足8255A的四个端口地址必须为偶地址这一要求,将8255A的A1、A0分别与8086系统地址总线的A2、A1相连,并且,CPU在对8255A的端口进行访问时,总是将地址中的A0设置为0。
6、完整电路图
整个硬件设计,主要采用器件CPU8086、并行接口8255和可编程定时/计数器8253。
由并行接口8255控制键盘扫描、数码管显示、开锁电平以及报警电平,8255的工作方式是A口输出,B口输出,C口高四位输出,C口低四位输入。
通过键盘扫描获得对应的键值,通过对键值判断,判断按键是功能键或数字键,达到输入密码,修改密码,确认输入,返回等功能。
由可编程定时/计数器8253产生方波,控制蜂鸣器产生“滴”声。
8253工作在计数器0方式3,产生方波,通过延时,是蜂鸣器产生“滴”。
8253在每次调用发声子程序中初始化。
根据条件要求,程序首先需要实现的是输入密码。
为了区别输入密码和修改密码,当数码管显示都显示“—”,是输入密码。
当数码管全灭时,是修改密码。
当密码输入完且按下确认键,则输入数字与密码比对。
密码正确,则输出开锁电平(高电平有效)。
在此时,则可以通过功能键修改密码,密码修改成功发出“滴”声。
若不需要,按返回键返回。
若密码错误,则发出三声“滴”声,密码错误次数加1,并判断是否已经输入六次错误,是则输出报警电平(高电平有效),并置密码错误次数置0,等待返回键返回;
否则等待返回按键返回。
为了实现上述程序,首先要初始化8086、8255,接着进入键盘扫描。
每次有按键输入后,还应判断按键是否弹起,可以实现键盘消抖。
无论密码正确与否,均需要通过返回键才能返回,所以每次显示完后都要对键盘扫描,判断是否按下
返回键,有则退出键盘扫描,没有则继续扫描。
开锁电平以及报警电平均在返回时置低电平。
八、流程图
主程序流程图
修改密码子程序流程图
开锁子程序流程图
开始
输出开锁电平,显示“0”
键盘扫描
返回键是否按下?
修改键是否按下?
调用修改密码子程序
关开锁电平
结束
闭锁子程序流程图是
否是否已达到6次错误?
输出报警电平
;
8255片选端口始地址
8255的A口地址
8255的B口地址
九、程序代码
IOY0EQU0200H
MY8255_AEQUIOY0+00H*2
MY8255_BEQUIOY0+01H*2
MY8255_CEQUIOY0+02H*2MY8255_MODEEQUIOY0+03H*2IOY1EQU0400HMY8253_COUNT0EQUIOY1+00H*2MY8253_COUNT1EQUIOY1+01H*2MY8253_COUNT2EQUIOY1+02H*2MY8253_MODEEQUIOY1+03H*2
8255的C口地址
8255的控制寄存器地址
8253片选端口始地址;
8253计数器0端口地址;
8253计数器1端口地址;
8253计数器2端口地址
8253控制寄存器端口地址
DATASEGMENT
COUNT1DB00H
COUNT2DB00H;
错误密码次数
DTABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,3FH,39H,5EH,79H,71H,00H,40H;
键值表,0~F对应的7段数码管的
段位值
DTABLE[11]=3FH;
对应键值11,显示"
0"
DTABLE[16]=00H;
数码管熄灭
DATABLE[17]=04H;
显示数码管"
-"
STRINGDB01H,02H,03H,04H,05H,06H;
初始密码,密码内存空间
DATAENDS
STACK1SEGMENTSTACK
DW256DUP(?
)
STACK1ENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK1
START:
MOVAX,DATA
MOVDS,AX
START1:
MOVDX,MY8255_MODE
MOVAL,81H
OUTDX,AL
MOVDX,MY8255_C
MOVAL,00H
MOVSI,0200H
MOVAL,11H
MOV[SI],AL
MOV[SI+1],AL
MOV[SI+2],AL
MOV[SI+3],AL
MOV[SI+4],AL
MOV[SI+5],AL
MOVDI,0205H
初始化8255工作方式
方式0,A口、B口输出,C口高四位输出,C口低4位输入
开锁电平、报警电平置0
建立缓冲区,存放要显示的键值
先初始化键值为11H,显示“-
确认键
修改密码键,此处不用,返回键盘扫描
保存按键值;
按键未弹起则继续循环等待弹起
密码比对
读C口,用于判断是哪一列按键闭合
是否为第1列
不是则继续判断
设置第1行第1列的对应的键值;
是否为第2列
BEGIN:
CALLKEYPAD
CMPAL,0CH
JZRENZ
CMPAL,0AH
JZBEGIN
CALLPUTBUF
CALLKEYLS
JMPBEGIN
RENZ:
CALLKEYLS
CALLCRCMP
CMPCX,0FFH
JZSHOW1
JMPSHOW2SHOW1:
CALLSHOWC
JMPSTART1
SHOW2:
CALLSHOWO
JMPSTART1QUIT:
HLT
KEYPADPROCNEARBEGINk:
CALLDIS
CALLCLEAR
CALLCCSCAN
JNZGETKEY1GETKEY1:
CALLDIS
JNZGETKEY2
JMPBEGINkGETKEY2:
MOVCH,0FEH
MOVCL,00HCOLUM:
MOVAL,CH
MOVDX,MY8255_AOUTDX,ALMOVDX,MY8255_C
INAL,DX
L1:
TESTAL,01H
JNZL2
MOVAL,01H
JMPKCODE
L2:
TESTAL,02H
JNZL3
密码错误
密码正确
键盘扫描程序
显示刷新
清屏
扫描按键
有键按下则跳置GETKEY1
再次扫描按键;
有键按下则跳置GETKEY2;
否则跳回开始继续循环;
选取一行
设置第1行第2列的对应的键值
是否为第3列
设置第1行第3列的对应的键值
确定按键值
检测是否扫描到第4行
是则跳回到开始处
没检测到第4行则准备检测下一列
扫描是否有按键闭合子程序
将4行全选通,
读C口
取出C口值的反值
按键是否弹起子程序
扫描按键,判断按键是否弹起
未弹起则继续循环等待弹起
清除数码管显示子程序
段位置0即可清除数码管显示
MOVAL,02H
L3:
TESTAL,04H
JNZNEXT
MOVAL,03H
JMPKCODEKCODE:
ADDAL,CLJMPQUITk
NEXT:
ADDCL,3
MOVAL,CHTESTAL,08H
JZKERR
ROLAL,1
MOVCH,AL
JMPCOLUMKERR:
JMPBEGINkQUITk:
RETKEYPADENDP
CCSCANPROCNEAR
MOVDX,MY8255_AOUTDX,AL
MOVDX,MY8255_CINAL,DXNOTALANDAL,0FH
RET
CCSCANENDP
KEYLSPROCNEAR
PUSHAX
KON:
JNZKON
POPAX
KEYLSENDP
CLEARPROCNEARMOVDX,MY8255_B
RETCLEARENDP
DISPROCNEAR
MOVDL,0DFH
MOVAL,DL
AGAIN:
PUSHDX
MOVDX,MY8255_A
MOVAL,[SI]
MOVBX,OFFSETDTABLEANDAX,00FFHADDBX,AX
MOVAL,[BX]
MOVDX,MY8255_B
CALLDALLY
INCSI
POPDX
TESTAL,01H
JZOUT1
RORAL,1
MOVDL,AL
JMPAGAIN
OUT1:
POPAX
DISENDP
显示键值子程序
以缓冲区存放的键值为键值表偏移
找到键值并显示
选通一个数码管
取出缓冲区中存放键值
将键值作为偏移和键值基地址相加
得到相应的键值
写入数码管A~Dp
取下一个键值
判断是否显示完?
显示完,返回
未显示完,跳回继续
PUTBUFPROCNEAR;
保存键值子程序
MOVSI,DI
DECDI
CMPDI,01FFH
JNZGOBACK
GOBACK:
RET
PUTBUFENDP
CRCMPPROCNEAR
密码比对子程序
MOVSI,0205H
MOVDI,OFFSETSTRING
MOVCX,0
MOVBL,[DI]
CMPAL,BL
JZNEXT1
JMPNEXT6NEXT1:
MOVSI,0204H
MOVBL,[DI+1]
JZNEXT2
JMPNEXT6NEXT2:
MOVSI,0203H
MOVBL,[DI+2]
JZNEXT3
JMPNEXT6NEXT3:
MOVSI,0202H
MOVBL,[DI+3]
JZNEXT4
JMPNEXT6NEXT4:
MOVSI,0201H
MOVBL,[DI+4]
JZNEXT5
JMPNEXT6NEXT5:
MOVSI,0200H
MOVBL,[DI+5]
CMPAL,BLJZQUITER
JMPNEXT6
密码错误,则CX=0CCH为密码错误的标志
NEXT6:
MOVCX,0CH
QUITER:
CRCMPENDP
输出开锁电平
返回键,退出开锁子程序
修改密码键
修改密码,数码管全灭,用于与输入
密码区别
开锁电平置0
SHOWOPROCNEARMOVSI,0200HMOVAL,00HMOV[SI],ALMOV[SI+1],ALMOVAL,10HMOV[SI+2],ALMOV[SI+3],ALMOV[SI+4],ALMOV[SI+5],ALMOVDI,0205H
MOVAL,010H
LOOP21:
JZLOOP22
JZLOOP23
JMPLOOP21LOOP22:
JMPQUITSHOLOOP23:
CALLKEYLS
MOVAL,10HMOV[SI],ALMOV[SI+1],ALMOVDI,0205H
CALLCHANGECRQUITSHO:
MOVDX,MY8255_CMOVAL,00HOUTDX,ALRETSHOWOENDP
开锁子程序
显示00
CHANGECRPROCNEAR;
修改密码子程序
CHG1:
CALLKEYPAD
JZCHG2CALLPUTBUFCALLPUTBUFCRCALLKEYLSJMPCHG1CHG2:
CALLKEYLSCALLRINGCALLDALLYSRET
CHANGECRENDP
PUTBUFCRPROCNEARXORBX,BXMOVBL,[COUNT1]MOVSTRING[BX],ALMOVBL,[COUNT1]INCBLMOV[COUNT1],BLCMPBL,06HJNZGOBACKCRMOVBL,0MOV[COUNT1],BLGOBACKCR:
RETPUTBUFCRENDP
SHOWCPROCNEARMOVSI,0200HMOVAL,0FHMOV[SI],ALMOV[SI+1],ALMOVAL,10HMOV[SI+2],ALMOV[SI+3],ALMOV[SI+4],ALMOV[SI+5],ALMOVDI,0205H
MOVDX,MY8255_AMOVAL,0CFHOUTDX,ALMOVDX,MY8255_BMOVAL,71HOUTDX,AL
确认则发出“滴”的确认音
保存修改后的密码子程序
放入密码内存空间STRING
闭锁子程序
显示CC
发出三声“滴”声
CALLRING
CALLDALLYS
MOVBL,[COUNT2]
INCBL
CMPBL,06H
JZLOOP31
MOV[COUNT2],BL
JMPLOOP32
LOOP31:
MOVDX,MY8255_C
MOVAL,020H
MOVBL,0
MOV[COUNT2],BLLOOP32:
JZLOOP33
JMPLOOP32LOOP33:
SHOWCENDP
RINGPROCNEAR
MOVDX,MY8253_MODE
MOVAL,36H
MOVAX,0020H
MOVDX,MY8253_COUNT0OUTDX,AL
MOVAL,AH
取出密码错误次数,并判断是否已经达到6次
已达到六次,则输出报警电平