360截圖20190602062653514.jpg (169.42 KB, 下載次數: 64)
下載附件
2019-6-2 06:27 上傳
0.png (7.52 KB, 下載次數: 67)
下載附件
2019-6-2 17:12 上傳
單片機源程序如下:
- ;R3——輸入錯誤次數
- ;R4——密碼個數
- ;R7——輸入密碼暫存
- ;R2——鍵值暫存
- ;R6——延時參數
- ORG 00H
- SJMP START
- ORG 0BH
- START:
- ;設置初始密碼
- PASSWORD:
- MOV R4,#08H ;密碼個數8個
- MOV R0,#40H ;密碼暫存區
- MOV A,#00H ;初始密碼0,1,2,3,4,5,6,7
- PASSNEXT:
- MOV @R0,A
- INC R0
- INC A
- DJNZ R4,PASSNEXT
- MLOOP:
- CLR P3.0 ;鎖合
- SETB P3.1 ;鎖開
- SETB P3.2 ;鍵有效
- SETB P3.3 ;錯誤
- SETB P3.4 ;報警
- MOV R3,#03H ;錯誤次數3次
- ;輸入密碼
- GETPW: MOV R4,#08H ;密碼個數
- MOV R0,#30H ;輸入密碼暫存區
- AGAIN: ACALL KEY ;輸入密碼
- CJNE A,#0AH,CONTIUE ;按確認鍵無效
- SJMP AGAIN
- CONTIUE:
- MOV @R0,A
- ACALL DISPLED ;按鍵有效顯示
- INC R0
- DJNZ R4,AGAIN
- AGAIN1: ACALL KEY ;按確認鍵
- CJNE A,#0AH,AGAIN1
- ACALL DISPLED ;按確認鍵有效顯示
- ACALL COMP ;比較密碼
- SETB P3.0 ;息鎖合
- CLR P3.1 ;開鎖
- WAIT: MOV C,P3.5 ;是否重新上鎖
- JNC MLOOP ;主循環
- ACALL TestKey ;是否有鍵按下,是否修改密碼
- JZ WAIT ;累加器的內容為0,則轉移;否則執行下一條指令
- ACALL CHPSW ;修改密碼子程序
- SJMP WAIT
- COMP: MOV R4,#08H
- MOV R0,#30H
- AGAI: MOV 50H,@R0 ;取輸入密碼到50H
- MOV A,R0
- ADD A,#010H ;40H
- MOV R0,A
- MOV A,@R0 ;取密碼
- MOV B,A
- MOV A,R0
- SUBB A,#010H ;30H
- MOV R0,A
- MOV A,B
- CJNE A,50H,ONCEMORE ;比較
- INC R0
- DJNZ R4,AGAI
- RET ;正確返回
- ONCEMORE:
- CLR P3.3 ;輸入錯誤
- MOV R6,#0FFH
- ACALL DELAY
- MOV R6,#0FFH
- ACALL DELAY
- SETB P3.3
- DJNZ R3,GETPW ;3次錯誤輸入
- CLR P3.4 ;聲報警
- CLR P3.3 ;光報警
- W: SJMP W
- ;修改密碼子程序
- CHPSW: MOV R4,#07H
- MOV R0,#48H
- ACALL KEY
- CJNE A,#0AH,CONTIUE2 ;按確認鍵無效
- LJMP WAIT ;返回
- CONTIUE2:
- MOV @R0,A
- INC R0
- ACALL DISPLED ;按鍵有效顯示
- ANOTHER:
- ACALL KEY
- CJNE A,#0AH,CONTIUE3 ;按確認鍵無效
- SJMP ANOTHER
- CONTIUE3:
- MOV @R0,A
- INC R0
- ACALL DISPLED ;按鍵有效顯示
- DJNZ R4,ANOTHER
- AGAIN2: ACALL KEY ;按確認鍵
- CJNE A,#0AH,AGAIN2
- ACALL DISPLED ;按確認鍵有效顯示
- MOV R4,#08H
- MOV R0,#40H
- MOV R1,#48H
- CHANGE: ;確認后修改密碼
- MOV A,@R1
- MOV @R0,A
- INC R0
- INC R1
- DJNZ R4,CHANGE
- RET
- ;按鍵有效顯示
- DISPLED:
- CLR P3.2 ;按鍵有效顯示
- MOV R6,#80H
- ACALL DELAY
- SETB P3.2
- RET
- TestKey:MOV P1,#0FH
- MOV A,P1 ;讀入鍵狀態
- CPL A ;累加器取
- ANL A,#0F0H
- RET
- ;取鍵值子程序,陣列式鍵盤
- KEY: MOV P1,#0F0H
- MOV A,P1
- CJNE A,#0F0H,K11
- K10: AJMP KEY
- K11: MOV R6,#02H
- ACALL DELAY
- MOV P1,#0F0H
- MOV A,P1
- CJNE A,0F0H,K12
- SJMP K10
- K12: MOV B,A
- MOV P1,#0FH
- MOV A,P1
- CJNE A,#0FH,K122
- K121: AJMP KEY
- K122: MOV R6,#02H
- ACALL DELAY
- MOV P1,#0FH
- MOV A,P1
- CJNE A,0FH,K13
- AJMP K10
- K13:
- ANL A,B
- MOV B,A
- MOV R1,#11
- MOV R2,#0
- MOV DPTR,#K1TAB
- K14: MOV A,R2
- MOVC A,@A+DPTR
- CJNE A,B,K16
- MOV P1,#0FH
- K15: MOV A,P1
- CJNE A,#0FH,K15
- MOV R6,#02H
- ACALL DELAY
- MOV A,R2
- RET
- K16: INC R2
- DJNZ R1,K14
- AJMP K10
- ;鍵碼表
- K1TAB: DB 81H,41H,21H,11H
- DB 82H,42H,22H,12H
- DB 84H,44H,24H
- ;延時子程序
- DELAY: MOV R6,#80H
- AA1: MOV R5,#0F8H
- AA: NOP
- NOP
- DJNZ R5,AA
- DJNZ R6,AA1
- RET
- END
復制代碼
所有資料51hei提供下載:
222222.rar
(41.37 KB, 下載次數: 54)
2019-6-2 06:28 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|