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