📄 0802pass.asm
字号:
;腾龙套件的液晶屏密码输入器程序:开机显示PASS WOR D:000000
;按16位矩阵键盘屏幕显示输入的字,按#清除输入,全部显示回到000
RS EQU p2.0;液晶接口的定义
RW EQU p2.1
E EQU p2.2
org 0000h
MOV SP ,#70H;设置堆栈
MOV p0,#01H ;清屏
CALL ENABLE
MOV p0,#38H ;显示功能
CALL ENABLE
MOV p0,#0FH ;显示开关控制
CALL ENABLE
MOV p0,#06H ;+1
CALL ENABLE
MOV p0,#80H;第一行的开始位置
cALL ENABLE
MOV DPTR,#TABLE1;显示PASS WORD
CALL WRITE1;到TABLE1取码?
MOV p0,#0C0H;第二行的位置
CALL ENABLE
MOV DPTR,#TABLE2;显示D:000000
CALL WRITE1;到TABLE2 取码
MOV p0,#0C2H;光标定位0C2H
CALL ENABLE
L1: MOV R3,#0F7H;键盘扫描初值
MOV R1,#00H;取码指针
L2:MOV A,R3;输出行扫描
MOV p1,A
MOV A,p1;读数,并存R4,判断是否放开?
MOV R4,A
SETB C;C=1
MOV R5,#03H;监测列(3列)
L3: RLC A;左移,C=0表示有键按下
JNC KEYIN;有键按下那么跳到KEYIN
INC R1;无按下,取码指针+1
DJNZ R5,L3;扫描下一列
mov a,r3
SETB C
RRC A
MOV R3,A
JC L2 ;C=0表示列扫描完成
JMP L1;否则重新开始
KEYIN: MOV R7,#10;消除抖动
D2: MOV R6,#248
dJNZ R6,$
DJNZ R7,D2
D3: MOV A,p1; 键盘放开否
XRL A,R4
JZ D3
MOV A,R1; 到table3取码
MOV DPTR,#TABLE3
MOVC a,@a+dptr
MOV R0,A
XRL A,#41H;是否按*, 则跳l1
JZ L1
MOV A,R0 ; 否则继续
XRL A,#42H ;是否按#, 是则清除
JZ CLEAR
MOV A,R0;不是#就是数字
CALL WRITE2;调用显示
CALL CHECK;读内部地址计数器,是否最后位置
JMP L1
CHECK: MOV p0,#0FFH
CLR RS
SETB RW;rs=0,rw=1 读地址计数器
CLR E
NOP
SETB E
JB p0.7,CHECK;检查p07
MOV A,p0
ANL A,#7FH
CJNE A,#48H,A3
MOV p0,#0C2H;是则让光标回到0c2h的位置
CALL ENABLE
A3:RET
CLEAR: MOV p0,#0C2H;清除6个数为000000
CALL ENABLE
MOV R1,#06H
A2: MOV A,#30H;30h是0的ascii码
CALL WRITE2
DJNZ R1,A2
MOV p0,#0C2H ;光标返回
CALL ENABLE
JMP L1
ENABLE: ;写指令
CLR RS
CLR RW
CLR E
CALL DELAY
SETB E
RET
WRITE1: MOV R1,#00H ;显示table中的值
A1: MOV A,R1;到table取码
MOVC A,@A+DPTR
call wRITE2 ;显示到lcd
INC R1
CJNE A,#00H,A1 ;是否到00h
RET
WRITE2:MOV p0,A ;显示
SETB RS
CLR RW
CLR E
CALL DELAY
SETB E
RET
DELAY: MOV R4,#05
D1:MOV R5,#0FFH
DJNZ R5,$
DJNZ R4,D1
RET
TABLE1:DB "PASS WOR",00H
TABLE2:DB "D:000000",00H
TABLE3:DB 31H,32H,33H,34H,35H,36H,37H,38H,39H,41H,30H,42H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -