汇编语言多功能密码锁Word格式.docx

上传人:b****6 文档编号:21381456 上传时间:2023-01-30 格式:DOCX 页数:28 大小:493.59KB
下载 相关 举报
汇编语言多功能密码锁Word格式.docx_第1页
第1页 / 共28页
汇编语言多功能密码锁Word格式.docx_第2页
第2页 / 共28页
汇编语言多功能密码锁Word格式.docx_第3页
第3页 / 共28页
汇编语言多功能密码锁Word格式.docx_第4页
第4页 / 共28页
汇编语言多功能密码锁Word格式.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

汇编语言多功能密码锁Word格式.docx

《汇编语言多功能密码锁Word格式.docx》由会员分享,可在线阅读,更多相关《汇编语言多功能密码锁Word格式.docx(28页珍藏版)》请在冰豆网上搜索。

汇编语言多功能密码锁Word格式.docx

十、设计中的难点·

23

十一、收获及体会·

24

十二、参考文献·

25

多功能密码锁

一、目的

1、了解和掌握8086、8255及8253,等接口芯片以及LED显示器的原理和功能;

2、能用这些接口芯片构建一个简单的系统控制对象,

3、掌握接口电路的综合设计与使用;

4、通过自己动手,进一步了解计算机得工作原理,接口技术,提高计算机硬件,软件综合应用能力,即对微机原理,接口技术,汇编语言程序设计进行综合训练。

二、内容

密码锁在输入密码正确的条件下输出开锁电平,控制电控锁开启,同

显示00字样。

当输入密码错误时,发出错误警告声音,同时显示FF字样。

当六次误码输入的条件下,产生报警电平报警。

还可以实现对密码的修改,修改成功后,蜂鸣器发出确认音。

三、设计任务

1、选用8086和适当的存储器及接口芯片完成相应的功能。

2、用LED显示器显示电子锁的当前状态。

3、画出详细的硬件连接图。

4、给出程序设计思路、画出软件流程图。

5、给出地址分配表。

6、给出所有程序清单并加上必要注释。

7、完成设计说明书(列出参考文献,所用器件型号)。

四、方案选择及原理

这次的设计要求是在密码输入正确时输出开锁电平和显示“00”,密码错误时显示“FF”和蜂鸣器发出报警声音等,我们采用8255A的A口低四位和C口的低三位组成4x3的矩阵键盘,同时A口的低六位为选管;

B口作为显示器的输出;

C口高四位的PC4口输出开锁电平,对于6次密码错误输入,PC5口输出报警电平。

用8253计数器产生警告音和确认音。

用蜂鸣器发声次数来区分确认和警告声音,一声表示确认,三声表示警告。

采用Proteus自带的键盘元件KEYPAD-PHONE,0-9为数字键,#为确认/返回键和*为密码修改键,每次对键盘扫描,获得对应的键值。

五、所用器件

CPU8086、并行接口8255A、地址锁存器74LS273、4线-16线译码器74HCT154、石英晶振,可编程定时/计数器8253、共阴极数码管、各类逻辑门、蜂鸣器,电阻、键盘等。

主要器件简介

CPU8086

8086是Inter系列的16位微处理器,芯片上有2.9万个晶体管,采用HMOS工艺制造,用单一的+5V电源,时钟频率为5MHz~10MHz。

8086有16根数据线和20根地址线,它既能处理16位数据,也能处理8位数据。

可寻址的内存空间为1MB。

并行接口8255

Intel8086/8088系列的可编程外设接口电路(ProgrammablePeripheralInterface)简称PPI,型号为8255(改进型为8255A及8255A-5),具有24条输入/输出引脚、可编程的通用并行输入/输出接口电路。

它是一片使用单一+5V电源的40脚双列直插式大规模集成电路。

8255A的通用性强,使用灵活,通过它CPU可直接与外设相连接。

可编程定时/计数器8253

8253可编程定时器/计数器是8086微机系统常用的定时/计数器芯片,它具有定时与计数两大功能。

8253可编程定时器/计数器具有3个独立的16位计数器通过编程可选择六种工作方式,可选择二进制或十进制计数,最高计数速率可达2.6MHz。

所有的输入、输出电平都与TTL兼容。

地址锁存器74LS273

地址锁存器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-PHONE,0-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

5、完整电路图

七、软件设计思路

整个硬件设计,主要采用器件CPU8086、并行接口8255和可编程定时/计数器8253。

由并行接口8255控制键盘扫描、数码管显示、开锁电平以及报警电平,8255的工作方式是A口输出,B口输出,C口高四位输出,C口低四位输入。

通过键盘扫描获得对应的键值,通过对键值判断,判断按键是功能键或数字键,达到输入密码,修改密码,确认输入,返回等功能。

由可编程定时/计数器8253产生方波,控制蜂鸣器产生“滴”声。

8253工作在计数器0方式3,产生方波,通过延时,是蜂鸣器产生“滴”。

8253在每次调用发声子程序中初始化。

根据条件要求,程序首先需要实现的是输入密码。

为了区别输入密码和修改密码,当数码管显示都显示“—”,是输入密码。

当数码管全灭时,是修改密码。

当密码输入完且按下确认键,则输入数字与密码比对。

密码正确,则输出开锁电平(高电平有效)。

在此时,则可以通过功能键修改密码,密码修改成功发出“滴”声。

若不需要,按返回键返回。

若密码错误,则发出三声“滴”声,密码错误次数加1,并判断是否已经输入六次错误,是则输出报警电平(高电平有效),并置密码错误次数置0,等待返回键返回;

否则等待返回按键返回。

为了实现上述程序,首先要初始化8086、8255,接着进入键盘扫描。

每次有按键输入后,还应判断按键是否弹起,可以实现键盘消抖。

无论密码正确与否,均需要通过返回键才能返回,所以每次显示完后都要对键盘扫描,判断是否按下返回键,有则退出键盘扫描,没有则继续扫描。

开锁电平以及报警电平均在返回时置低电平。

八、流程图

主程序流程图

修改密码子程序流程图开锁子程序流程图

闭锁子程序流程图是

九、程序代码

IOY0EQU0200H;

8255片选端口始地址

MY8255_AEQUIOY0+00H*2;

8255的A口地址

MY8255_BEQUIOY0+01H*2;

8255的B口地址

MY8255_CEQUIOY0+02H*2;

8255的C口地址

MY8255_MODEEQUIOY0+03H*2;

8255的控制寄存器地址

IOY1EQU0400H;

8253片选端口始地址

MY8253_COUNT0EQUIOY1+00H*2;

8253计数器0端口地址

MY8253_COUNT1EQUIOY1+01H*2;

8253计数器1端口地址

MY8253_COUNT2EQUIOY1+02H*2;

8253计数器2端口地址

MY8253_MODEEQUIOY1+03H*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;

初始化8255工作方式

MOVAL,81H;

方式0,A口、B口输出,C口高四位输出,C口低4位输入

OUTDX,AL

MOVDX,MY8255_C;

开锁电平、报警电平置0

MOVAL,00H

OUTDX,AL

MOVSI,0200H;

建立缓冲区,存放要显示的键值

MOVAL,11H;

先初始化键值为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

BEGIN:

CALLKEYPAD;

键盘扫描

CMPAL,0CH;

确认键

JZRENZ

CMPAL,0AH;

修改密码键,此处不用,返回键盘扫描

JZBEGIN

CALLPUTBUF;

保存按键值

CALLKEYLS;

按键未弹起则继续循环等待弹起

JMPBEGIN

RENZ:

CALLKEYLS

CALLCRCMP;

密码比对

CMPCX,0FFH

JZSHOW1

JMPSHOW2

SHOW1:

CALLSHOWC;

密码错误

JMPSTART1

SHOW2:

CALLSHOWO;

密码正确

JMPSTART1

QUIT:

HLT

KEYPADPROCNEAR;

键盘扫描程序

BEGINk:

CALLDIS;

显示刷新

CALLCLEAR;

清屏

CALLCCSCAN;

扫描按键

JNZGETKEY1;

有键按下则跳置GETKEY1

GETKEY1:

CALLDIS;

显示刷新

再次扫描按键

JNZGETKEY2;

有键按下则跳置GETKEY2

JMPBEGINk;

否则跳回开始继续循环

GETKEY2:

MOVCH,0FEH

MOVCL,00H

COLUM:

MOVAL,CH;

选取一行

MOVDX,MY8255_A

读C口,用于判断是哪一列按键闭合

INAL,DX

L1:

TESTAL,01H;

是否为第1列

JNZL2;

不是则继续判断

MOVAL,01H;

设置第1行第1列的对应的键值

JMPKCODE

L2:

TESTAL,02H;

是否为第2列

JNZL3;

不是则继续判断

MOVAL,02H;

设置第1行第2列的对应的键值

L3:

TESTAL,04H;

是否为第3列

JNZNEXT;

MOVAL,03H;

设置第1行第3列的对应的键值

JMPKCODE

KCODE:

ADDAL,CL

JMPQUITk;

确定按键值

NEXT:

ADDCL,3

MOVAL,CH

TESTAL,08H;

检测是否扫描到第4行

JZKERR;

是则跳回到开始处

ROLAL,1;

没检测到第4行则准备检测下一列

MOVCH,AL

JMPCOLUM

KERR:

JMPBEGINk

QUITk:

RET

KEYPADENDP

CCSCANPROCNEAR;

扫描是否有按键闭合子程序

MOVAL,00H

MOVDX,MY8255_A;

将4行全选通,

MOVDX,MY8255_C

INAL,DX;

读C口

NOTAL

ANDAL,0FH;

取出C口值的反值

CCSCANENDP

KEYLSPROCNEAR;

按键是否弹起子程序

PUSHAX

KON:

扫描按键,判断按键是否弹起

JNZKON;

未弹起则继续循环等待弹起

POPAX

KEYLSENDP

CLEARPROCNEAR;

清除数码管显示子程序

MOVDX,MY8255_B;

段位置0即可清除数码管显示

CLEARENDP

DISPROCNEAR;

显示键值子程序

PUSHAX;

以缓冲区存放的键值为键值表偏移找到键值并显示

MOVSI,0200H

MOVDL,0DFH

MOVAL,DL

AGAIN:

PUSHDX

OUTDX,AL;

选通一个数码管

MOVAL,[SI];

取出缓冲区中存放键值

MOVBX,OFFSETDTABLE

ANDAX,00FFH

ADDBX,AX

MOVAL,[BX];

将键值作为偏移和键值基地址相加得到相应的键值

MOVDX,MY8255_B

写入数码管A~Dp

CALLDALLY

INCSI;

取下一个键值

POPDX

判断是否显示完?

JZOUT1;

显示完,返回

RORAL,1

MOVDL,AL

JMPAGAIN;

未显示完,跳回继续

OUT1:

DISENDP

PUTBUFPROCNEAR;

保存键值子程序

MOVSI,DI

DECDI

CMPDI,01FFH

JNZGOBACK

MOVDI,0205H

GOBACK:

PUTBUFENDP

CRCMPPROCNEAR;

密码比对子程序

MOVSI,0205H

MOVDI,OFFSETSTRING

MOVCX,0;

密码正确,则输出CX=00H,为密码正确的标志

MOVAL,[SI]

MOVBL,[DI]

CMPAL,BL

JZNEXT1

JMPNEXT6

NEXT1:

MOVSI,0204H

MOVBL,[DI+1]

JZNEXT2

NEXT2:

MOVSI,0203H

MOVBL,[DI+2]

JZNEXT3

JMPNEXT6

NEXT3:

MOVSI,0202H

MOVBL,[DI+3]

JZNEXT4

NEXT4:

MOVSI,0201H

MOVBL,[DI+4]

JZNEXT5

NEXT5:

MOVSI,0200H

MOVBL,[DI+5]

JZQUITER

NEXT6:

MOVCX,0FFH;

密码错误,则CX=0FFH为密码错误的标志

QUITER:

RET

CRCMPENDP

SHOWOPROCNEAR;

开锁子程序

显示00

MOV[SI+1],AL

MOVAL,10H

MOV[SI+3],AL

输出开锁电平

MOVAL,010H

LOOP21:

CALLKEYPAD

返回键,退出开锁子程序

JZLOOP22

修改密码键

JZLOOP23

JMPLOOP21

LOOP22:

JMPQUITSHO

LOOP23:

修改密码,数码管全灭,用于与输入密码区别

MOVAL,10H

CALLCHANGECR;

调用修改密码子程序

QUITSHO:

开锁电平置0

SHOWOENDP

CHANGECRPROCNEAR;

修改密码子程序

CHG1:

CMPAL,0CH

JZCHG2

CALLPUTBUF

CALLPUTBUFCR

CALLKEYLS

JMPCHG1

CHG2:

CALLRING;

确认则发出“滴”的确认音

CALLDALLYS

CHANGECRENDP

PUTBUFCRPROCNEAR;

保存修改后的密码子程序

XORBX,BX

MOVBL,[COUNT1]

MOVSTRING[BX],AL;

放入密码内存空间STRING

INCBL

MOV[COUNT1],BL

CMPBL,06H

JNZGOBACKCR

MOVBL,0

MOV[COUNT1],BL

GOBACKCR:

PUTBUFCRENDP

SHOWCPROCNEAR;

闭锁子程序

显示FF

MOVAL,0FH

MOV[SI+5],AL

MOVAL,0CFH

MOVDX,MY8255_B

MOVAL,71H

发出三声“滴”声

CALLRING

CALLDALLYS

CALL

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 节日庆典

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1