|
介紹一種由AT89C2051編程實現(xiàn)的控制電路,具有按鍵有效指示、輸入錯誤、解碼有效指示、控制開鎖、定時中斷、錯誤報警、密碼修改等功能;8位10進制密碼,保密好使用范圍廣,特適用家庭、賓館等場所。
一、硬件電路:


AT89C2051是與MCS-51系列兼容的一種高性能單片機,具有2KB片內(nèi)ROM、256字節(jié)片內(nèi)RAM,可以不需擴展外程序、數(shù)據(jù)存儲器,可滿足一般的程序需求,從硬件組成可以看出該密碼鎖有一個3X4陣列的鍵盤,只需7條I/O引腳就可以了余下的I/O引腳可以開發(fā)其他控制功能,如:控制空調(diào)、電燈、風(fēng)扇等。
二、功能實現(xiàn)
鍵盤掃描所用引腳P1.0-P1.6,其中P1.4-P1.6這3條引腳用于輸出掃描信號,P1.0-P1.3這4條引腳用于檢測按鍵的狀態(tài)。P1.0-P1.6的狀態(tài)組成的鍵碼以及對應(yīng)按鍵如表1所列。

在程序執(zhí)行中,是先從P1.6送出“0”,再判別P1.3-P1.0的輸入。所以,實質(zhì)是在P1.6-P1.4送出“011”,接收P1.3-P1.0的輸入狀態(tài),這時判別8,9,A這4個鍵。接著,在P1.6-P1.4送出“101”,接收P1.3-P1.0的輸入,這時判別4,5,6,7這4個鍵。再而,在P1.6-P1.4送出“110”,接收P1.3-P1.0的輸入,這時判別0,1,2,3這4個鍵的狀態(tài)。 開鎖電平UNLOCK的輸出腳P3.0,當(dāng)輸入的鍵正確時則在P3.0輸出開鎖電平UNLOCK。 報警電平DANG輸出腳P3.1。在6次誤碼輸入的條件下,進行報警。 LOCK控制引腳P3.2,90S之后停止輸入。 有效按鍵提示EFFI引腳P3.3。 錯誤輸入警告WARN引腳P3.4。 另外,還有引腳5,4接石英振蕩器的XTAL2,XTAL1端,組成石英振蕩器電路,在圖1中沒有畫出。引腳1用于復(fù)位。
三、密碼鎖的控制程序
密碼鎖的控制程序由延時子程序、修改密碼子程序、掃描輸入子程序、時鐘中斷子程序及主程序組成。程序框圖如圖2所示。它對輸入的8位十進制密碼進行判別,如果輸入密碼正確,則可以直接開鎖或修改密碼之后開鎖。如果不正確,并且6次以上輸入不正確,則報警并封鎖輸入口。

1.主程序: ORG 0H SJMP START ORG 0BH SJMP INTSTART ;初始化 MOV SP.#70H SETB P3.0 SETB P3.1 SETB P3.2 SETB P3.3 MOV TMOD,#01H MOV TL0,#00H MOV TH0,#00H SETB TR0 SETB ET0 SETB EA MOV R2,#0FFH MOV 3AH,#03H MOV R3,#06H PASSWORD:MOV R4,#08H ;設(shè)置初始密碼 MOV R0,#40H MOV A,#07H MOV @R0,A INC R0 INC A DJNZ R4,PASSWORD
DETPW: MOV R4,#08H ;輸入密碼 MOV R0,#30H AGAIN: ACALL INPUT MOV A,R7 CJ R7,#08H,IN ACALL CHPSW ;修改密碼子程序 JMP GETPW
IN: MOV @R0,A CLR P3.3 ;按鍵有效顯示 ACALL DELAY SETB P3.3 COMP: MOV R4,#08H ;比較密碼 MOV R0,#30H AGAI: MOV 50H,@R0 ADD R0,#010H MOV A,@R0 SUB R0,#010H CJNE A,50H,ONCEMORE INC R0 DJNZ R4,AGA1 CLR P3.0 HERE: AJMP HERE ONCEMORE:CLR P3.4 ;錯誤輸入警告 ACALL DELAY SETB P3.4 DJNZ R3,GETPW CLR P3.1 ;6次錯誤輸入報警 THERE: AJMP THERE
2.延時子程序 DELAY: MOV R5,#30H DELAY1: MOV A,#0FFH LOOOP: DEC A JNZ LOOP DJNZ R5,DELAY1 RET 3.修改密碼子程序 CHPSW: MOV R0,#40H ANOTHER: ACALL INPUT MOV A,R7 MOV @R0,A INC R0 CLR P3.3 ;按鍵有效提示 ACALL DELAY SETB P3.3 DJNZ R4,ANOTHER RET 4.掃描鍵盤輸入子程序 INPUT: MOV R6,#02H MOV R1,#40H LOP: ACALL DELAY MOV P1,#0FFH ;掃描碼 CLR P1.6 MOV A,P1 ANL A,#0FH ;檢驗有否按鍵 CJNE A,#0FH,INKEY MOV P1,#0FFH CLR P1.5 MOV A,P1 ANL A,#0FH CJNE AA,#0FH,INKEY MOV P1,#0FFH CLR P1,4 MOV A,P1 ANL A,#0FH CJNE A,#0FH,INKEY SJMP LOP INKEY: MOV @R1,P1 INC R1 DJNZ R6,LOP DEC R1 MOV A,@R1 DEC R1 CJNE A,40H,INPUT RET
5.時鐘中斷子程序 INT: PUSH ACC MOV TMOD,#01H MOV TL0,#00H MOV TH0,#00H SETB TR0 SETB ET0 SETB EA DJNZ R2,CONT CONTINUE DJNA 3AH,CONT CLR P3.2 ;時鐘中斷控制 STOP: AJMP STOP CONT: POP ACC RET1
|