汇编语言-多功能密码锁(4)

2019-03-29 10:32

BEGINk:

CALL DIS ;显示刷新 CALL CLEAR ;清屏 CALL CCSCAN ;扫描按键 JNZ GETKEY1 ;有键按下则跳置GETKEY1

GETKEY1:CALL DIS ;显示刷新 CALL CLEAR ;清屏 CALL CCSCAN ;再次扫描按键 JNZ GETKEY2 ; JMP BEGINk ;

GETKEY2:MOV CH,0FEH MOV CL,00H

COLUM: MOV AL,CH ; MOV DX,MY8255_A

OUT DX,AL

MOV DX,MY8255_C ; IN AL,DX

L1: TEST AL,01H ; JNZ L2 ; MOV AL,01H ; JMP KCODE

L2: TEST AL,02H ; JNZ L3 ; MOV AL,02H ; JMP KCODE

L3: TEST AL,04H ; JNZ NEXT ; MOV AL,03H ; JMP KCODE

KCODE: ADD AL,CL

JMP QUITk ;

NEXT: ADD CL,3 MOV AL,CH

TEST AL,08H ; JZ KERR ; ROL AL,1 ; 有键按下则跳置GETKEY2 否则跳回开始继续循环

选取一行 读C口,用于判断是哪一列按键闭合是否为第1列

不是则继续判断

设置第1行第1列的对应的键值 是否为第2列 不是则继续判断

设置第1行第2列的对应的键值 是否为第3列

不是则继续判断

设置第1行第3列的对应的键值 确定按键值 检测是否扫描到第4行 是则跳回到开始处

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

16

MOV CH,AL

JMP COLUM KERR: JMP BEGINk QUITk: RET KEYPAD ENDP

CCSCAN PROC NEAR ;扫描是否有按键闭合子程序 MOV AL,00H MOV DX,MY8255_A ;将4行全选通,

OUT DX,AL MOV DX,MY8255_C

IN AL,DX ; NOT AL

AND AL,0FH ; RET CCSCAN ENDP

KEYLS PROC NEAR ; PUSH AX KON:

CALL DIS ; CALL CLEAR ; CALL CCSCAN ; JNZ KON ; POP AX

RET

KEYLS ENDP

CLEAR PROC NEAR ; MOV DX,MY8255_B ; MOV AL,00H OUT DX,AL RET CLEAR ENDP

DIS PROC NEAR ; PUSH AX ; MOV SI,0200H MOV DL,0DFH

MOV AL,DL

AGAIN: PUSH DX

MOV DX,MY8255_A

OUT DX,AL ; 读C口

取出C口值的反值 按键是否弹起子程序 显示刷新 清屏 扫描按键,判断按键是否弹起 未弹起则继续循环等待弹起 清除数码管显示子程序

段位置0即可清除数码管显示 显示键值子程序

以缓冲区存放的键值为键值表偏移找到键值并显示 选通一个数码管

17

MOV AL,[SI] ;取出缓冲区中存放键值 MOV BX,OFFSET DTABLE AND AX,00FFH ADD BX,AX MOV AL,[BX] ;将键值作为偏移和键值基地址相加得到相应的键值

MOV DX,MY8255_B OUT DX,AL ;写入数码管A~Dp CALL DALLY

INC SI ; POP DX MOV AL,DL

TEST AL,01H ; JZ OUT1 ; ROR AL,1

MOV DL,AL

JMP AGAIN ;OUT1: POP AX RET DIS ENDP

PUTBUF PROC NEAR ;

MOV SI,DI MOV [SI],AL DEC DI CMP DI,01FFH JNZ GOBACK

MOV DI,0205H

GOBACK: RET

PUTBUF ENDP

CRCMP PROC NEAR ;密码比对子程序

MOV SI,0205H

MOV DI,OFFSET STRING MOV CX,0 ; MOV AL,[SI] MOV BL,[DI] CMP AL,BL JZ NEXT1 JMP NEXT6

取下一个键值

判断是否显示完? 显示完,返回 未显示完,跳回继续 保存键值子程序 密码正确,则输出CX=00H,为密码正确的标志18

NEXT1: MOV SI,0204H

MOV DI,OFFSET STRING MOV AL,[SI] MOV BL,[DI+1] CMP AL,BL JZ NEXT2 JMP NEXT6 NEXT2:

MOV SI,0203H

MOV DI,OFFSET STRING MOV AL,[SI] MOV BL,[DI+2] CMP AL,BL JZ NEXT3 JMP NEXT6 NEXT3:

MOV SI,0202H

MOV DI,OFFSET STRING MOV AL,[SI] MOV BL,[DI+3] CMP AL,BL JZ NEXT4 JMP NEXT6 NEXT4:

MOV SI,0201H

MOV DI,OFFSET STRING MOV AL,[SI] MOV BL,[DI+4] CMP AL,BL JZ NEXT5 JMP NEXT6 NEXT5:

MOV SI,0200H

MOV DI,OFFSET STRING MOV AL,[SI] MOV BL,[DI+5] CMP AL,BL JZ QUITER JMP NEXT6

NEXT6: MOV CX,0FFH ;QUITER:RET CRCMP ENDP

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

SHOWO PROC NEAR ;开锁子程序 MOV SI,0200H ;显示00 MOV AL,00H MOV [SI],AL MOV [SI+1],AL MOV AL,10H MOV [SI+2],AL MOV [SI+3],AL MOV [SI+4],AL MOV [SI+5],AL MOV DI,0205H

MOV DX,MY8255_C ; MOV AL,010H OUT DX,AL

LOOP21:

CALL KEYPAD

CMP AL,0CH ; JZ LOOP22

CMP AL,0AH ; JZ LOOP23 JMP LOOP21 LOOP22: CALL KEYLS JMP QUITSHO

LOOP23: CALL KEYLS ; MOV SI,0200H

MOV AL,10H MOV [SI],AL MOV [SI+1],AL MOV DI,0205H

CALL CHANGECR ;QUITSHO: MOV DX,MY8255_C ; MOV AL,00H OUT DX,AL

RET SHOWO ENDP

CHANGECR PROC NEAR ;CHG1: CALL KEYPAD CMP AL,0CH JZ CHG2 CALL PUTBUF CALL PUTBUFCR

输出开锁电平 返回键,退出开锁子程序 修改密码键 修改密码,数码管全灭,用于与输入密码区别 调用修改密码子程序

开锁电平置0 修改密码子程序 20


汇编语言-多功能密码锁(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:名言警句

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: