新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 用AT89C2051設(shè)計的多功能密碼鎖

        用AT89C2051設(shè)計的多功能密碼鎖

        作者: 時間:2011-01-27 來源:網(wǎng)絡(luò) 收藏
        本站介紹一種由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 INT
        START ;初始化
        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



        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 太康县| 山丹县| 江北区| 城市| 高要市| 桃源县| 盘锦市| 郯城县| 临西县| 铜鼓县| 晴隆县| 尉犁县| 镇坪县| 哈巴河县| 乌海市| 尚义县| 岢岚县| 黄陵县| 香港 | 克拉玛依市| 仪陇县| 江口县| 江孜县| 定结县| 慈利县| 建昌县| 同德县| 新龙县| 大田县| 黄龙县| 星子县| 金秀| 临邑县| 子长县| 辉县市| 北辰区| 漳浦县| 孝昌县| 清镇市| 松桃| 阿坝|