?? 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;設(shè)置堆棧
MOV p0,#01H ;清屏
CALL ENABLE
MOV p0,#38H ;顯示功能
CALL ENABLE
MOV p0,#0FH ;顯示開關(guān)控制
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;讀數(shù),并存R4,判斷是否放開?
MOV R4,A
SETB C;C=1
MOV R5,#03H;監(jiān)測列(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 ; 否則繼續(xù)
XRL A,#42H ;是否按#, 是則清除
JZ CLEAR
MOV A,R0;不是#就是數(shù)字
CALL WRITE2;調(diào)用顯示
CALL CHECK;讀內(nèi)部地址計數(shù)器,是否最后位置
JMP L1
CHECK: MOV p0,#0FFH
CLR RS
SETB RW;rs=0,rw=1 讀地址計數(shù)器
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個數(shù)為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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -