;某些觸屏手機(jī)上,有個滑動開鎖的操作。
;筆記本電腦,一般都是用鍵盤輸入密碼。
;也有人把密碼設(shè)置成:ASDFGHJKL;'Enter,當(dāng)開機(jī)時,只需用手指在鍵盤上劃一下,即可。
;單片機(jī),也可以設(shè)置這樣形式的密碼,依次按下某些鍵,即可成功進(jìn)入下一步的操作。
;下圖電路,就是依次按鍵,進(jìn)行輸入開機(jī)密碼的:
;P1.0 到 P1.5 是密碼鍵,P1.7 是確認(rèn)鍵,
;P2.1 到 P2.6 對應(yīng) 5 個密碼鍵,平常點(diǎn)亮,--原文如此,應(yīng)該是6個
;按下對應(yīng)的密碼后對應(yīng)的LED熄滅,松開再次點(diǎn)亮,
;P2.7 上的藍(lán)色 LED 對應(yīng)的是確認(rèn)鍵。
;密碼順序是依次按 P1.0 到 P1.5,
;密碼數(shù)值和順序都正確才點(diǎn)亮 P1.6 上的LED,否則點(diǎn)亮 P2.0 上的紅色 LED。
;題目中的原程序,不可用。
;仿照原程序的思路,做而論道編寫的程序如下:
;--------------------------------------
? ? 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對應(yīng)6個密碼鍵,平常點(diǎn)亮,
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)確認(rèn)有鍵按下:
? ? MOV ? C, ACC.7 ?;P1.7的鍵
? ? CPL ? C
? ? RL ? ?A
? ? MOV ? ACC.7, C ?;送到P2.7去
? ? CLR ? ACC.0 ? ? ;關(guān)閉錯誤指示燈
? ? MOV ? P2, A ? ? ;驅(qū)動各個按鍵的指示燈
;--------------------------------------
;下面等待釋放
LOP2:
? ? MOV ? A, P1 ? ? ;讀入
? ? ORL ? A, #01000000B ?;屏蔽指示燈
? ? CPL ? A
? ? JNZ ? LOP2 ? ? ?;循環(huán)檢測,等待釋放
;--------------------------------------
;按鍵已經(jīng)釋放,
? ? MOV ? P2, #01111110B ?;P2.1到P2.6對應(yīng)6個密碼鍵,平常點(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 ? ? ?;錯誤指示
? ? SJMP ?$ ? ? ? ? ;停機(jī)
;--------------------------------------
DL20MS:
? ? MOV ? R6, #40
? ? DJNZ ?R7, $
? ? DJNZ ?R6, $ - 2
? ? RET
;--------------------------------------
END
;當(dāng)輸入了正確的密碼,單片機(jī)如何顯示 ?可點(diǎn)擊題目網(wǎng)址,去觀察網(wǎng)上的插圖。