51 匯編語(yǔ)言編程--輸入密碼
;某些觸屏手機(jī)上,有個(gè)滑動(dòng)開(kāi)鎖的操作。
;筆記本電腦,一般都是用鍵盤(pán)輸入密碼。
;也有人把密碼設(shè)置成:ASDFGHJKL;'Enter,當(dāng)開(kāi)機(jī)時(shí),只需用手指在鍵盤(pán)上劃一下,即可。
;單片機(jī),也可以設(shè)置這樣形式的密碼,依次按下某些鍵,即可成功進(jìn)入下一步的操作。
;下圖電路,就是依次按鍵,進(jìn)行輸入開(kāi)機(jī)密碼的:
;P1.0 到 P1.5 是密碼鍵,P1.7 是確認(rèn)鍵,
;P2.1 到 P2.6 對(duì)應(yīng) 5 個(gè)密碼鍵,平常點(diǎn)亮,--原文如此,應(yīng)該是6個(gè)
;按下對(duì)應(yīng)的密碼后對(duì)應(yīng)的LED熄滅,松開(kāi)再次點(diǎn)亮,
;P2.7 上的藍(lán)色 LED 對(duì)應(yīng)的是確認(rèn)鍵。
;密碼順序是依次按 P1.0 到 P1.5,
;密碼數(shù)值和順序都正確才點(diǎn)亮 P1.6 上的LED,否則點(diǎn)亮 P2.0 上的紅色 LED。
;題目中的原程序,不可用。
;仿照原程序的思路,做而論道編寫(xiě)的程序如下:
;--------------------------------------
ORG 0000H
JMP START
START:
MOV R0, #7 ;將R0作為計(jì)數(shù)器,檢驗(yàn)密碼順序
CLR P1.6 ;關(guān)閉正確指示燈
MOV P2, #01111110B ;P2.1到P2.6對(duì)應(yīng)6個(gè)密碼鍵,平常點(diǎn)亮,
LOOP:
MOV A, P1 ;讀入
MOV B, A ;暫存
ORL A, #01000000B ;屏蔽指示燈
CPL A
JZ LOOP ;無(wú)鍵按下,循環(huán)檢測(cè)
CALL DL20MS ;延時(shí)
MOV A, P1 ;再讀一次
CJNE A, B, LOOP;消抖
;--------------------------------------
;已經(jīng)確認(rèn)有鍵按下:
MOV C, ACC.7 ;P1.7的鍵
CPL C
RL A
MOV ACC.7, C ;送到P2.7去
CLR ACC.0 ;關(guān)閉錯(cuò)誤指示燈
MOV P2, A ;驅(qū)動(dòng)各個(gè)按鍵的指示燈
;--------------------------------------
;下面等待釋放
LOP2:
MOV A, P1 ;讀入
ORL A, #01000000B ;屏蔽指示燈
CPL A
JNZ LOP2 ;循環(huán)檢測(cè),等待釋放
;--------------------------------------
;按鍵已經(jīng)釋放,
MOV P2, #01111110B ;P2.1到P2.6對(duì)應(yīng)6個(gè)密碼鍵,平常點(diǎn)亮,
;--------------------------------------
;下面處理剛才的按鍵
JNB B.0, KEY0
JNB B.1, KEY1
JNB B.2, KEY2
JNB B.3, KEY3
JNB B.4, KEY4
JNB B.5, KEY5
JNB B.7, KEY7
JMP LOOP
;--------------------------------------
KEY0:
CJNE R0, #7, LOOP
DEC R0
JMP LOOP
KEY1:
CJNE R0, #6, LOOP
DEC R0
JMP LOOP
KEY2:
CJNE R0, #5, LOOP
DEC R0
JMP LOOP
KEY3:
CJNE R0, #4, LOOP
DEC R0
JMP LOOP
KEY4:
CJNE R0, #3, LOOP
DEC R0
JMP LOOP
KEY5:
CJNE R0, #2, LOOP
DEC R0
JMP LOOP
KEY7:
CJNE R0, #1, ERROR
MOV P2, #0 ;關(guān)閉按鍵指示燈
SETB P1.6 ;正確指示
SJMP $ ;停機(jī)
ERROR:
MOV P2, #0 ;關(guān)閉按鍵指示燈
SETB P2.0 ;錯(cuò)誤指示
SJMP $ ;停機(jī)
;--------------------------------------
DL20MS:
MOV R6, #40
DJNZ R7, $
DJNZ R6, $ - 2
RET
;--------------------------------------
END