新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 能防止多次試探密碼的51單片機密碼鎖

        能防止多次試探密碼的51單片機密碼鎖

        作者: 時間:2011-12-28 來源:網絡 收藏

        1 引言

        很多行業的許多地方都需要,但普通容易被多次試探而破譯。本文給出了一種能防止多次試探密碼的設計方法,從而有效地克服了上述缺點。

        2 硬件電路

        圖1所示是筆者設計的一種密碼鎖電路。該密碼鎖主要是按照以下10條用戶要求進行設計的:

        (1)共8位密碼,每位的取值范圍為1~8。

        (2)用戶可以自行設定和修改密碼。

        (3)按每個密碼鍵時都有聲、光提示。

        (4)若鍵入的8位開鎖密碼不完全正確,則報警5秒鐘,以提醒他人注意。

        (5)開鎖密碼錯3次要報警10分鐘,報警期間輸入密碼無效,以防竊賊多次試探密碼。

        (6)鍵入的8位開鎖密碼完全正確才能開鎖,開鎖時要有1秒的提示音。

        (7)電磁鎖的電磁線圈必須用脈沖驅動,每次通電時間不多于2秒,以防燒壞。

        (8)密碼鍵盤上只允許有8個密碼按鍵和1個發光管。鎖內有備用電池,只有內部上電復位時才能設置或修改密碼,因此,僅在門外按鍵是不能修改或設置密碼的。

        (9)密碼設定完畢后要有2秒的提示音。

        (10)成本要比較低,硬件和軟件都要盡可能簡潔可靠,易于批量生產。

        根據總體要求分析,該密碼鎖電路所需要的I/O口線少于15個,若設計得當,程序不會超過200條指令,所以可選擇質優價廉的AT89C1051/2051或者GMS1051/2051,而且不需要外接程序存儲器和數據存儲器及其它擴展部件。

        在圖1所示電路中,P1口連接8個密碼按鍵AN1~AN8,開鎖脈沖由P3.5輸出,報警和提示音由P3.7輸出。BL是用于報警與聲音提示的喇叭,發光管D1用于報警和提示,L是電磁鎖的電磁線圈。

        3 軟件設計

        圖2給出了該密碼鎖電路的軟件流程圖。圖中AA1~AA8以及START、SET、SAVE是程序中的標號,是為了理解程序而專門標在流程圖的對應位置的,分析程序時可以仔細對照參考。

        3.1 存儲單元的分配

        該密碼鎖中RAM存儲單元的分配方案如下:

        31H~38H:依次存放8位設定的密碼,首位密碼存放在31H單元;

        R0:指向密碼地址;

        R2:已經鍵入密碼的位數;

        R3:存放允許的錯碼次數3與實際錯碼次數的差值;

        R4至R7:延時用;

        00H:錯碼標志位。

        對于ROM存儲單元的分配,由于程序比較短,而且占用的存儲空間比較少,因此,在無特殊要求時,可以從0030H單元(其它地址也可以)開始存放主程序。

        3.2 源程序

        下面是該電子密碼鎖的軟件源程序代碼:

        ORG 0000H

        AJMP START

        ORG 0030H

        START:ACALL BP

        MOV R0,#31H

        MOV R2,#8

        SET: MOV P1,#0FFH

        MOV A,P1

        CJNE A,#0FFH,L8

        AJMP SET

        L8: ACALL DELAY

        CJNE A,#0FFH,SAVE

        AJMP SET

        SAVE: ACALL BP

        MOV @R0A

        INC R0

        DJNZ R2,SET

        MOV R5,#16

        D2S: ACALL BP

        DJNZ R5,D2S

        MOV R0,#31H

        MOV R3,#3

        AA1: MOV R2,#8

        AA2: MOV P1,#0FFH

        MOV A,P1

        CJNE A,#0FFH, L9

        AJMP AA2

        L9 ACALL DELAY

        CJNE A,#0FFH,AA3

        AJMP AA2

        AA3: ACALL BP

        CLR C

        SUBB A, @R0

        INC R0

        CJNE A,#00H,AA4

        AJMP AA5

        AA4: SETB 00H

        AA5: DJNZ R2,AA2

        JB 00HAA6

        CLR P3.5

        L3 MOV R5,#8

        ACALL BP

        DJNZ R4,L3

        MOV R3,#3

        SETB P3.5

        AJMP AA1

        AA6: DJNZ R3,AA7

        MOV R5,#24

        L5: MOV R4,#200

        L4: ACALL BP

        DJNZ R4,L4

        DJNZ R5,L5

        MOV R3,#3

        AA7: MOV R5,#40

        ACALL BP

        DJNZ R5,AA7

        AA8: CLR 00H

        AJMP AA1

        BP: CLR P3.7

        MOV R7,#250

        L2: MOV R6,#124

        L1: DJNZ R6,L1

        CPL P3.7

        DJNZ R7,L2

        SETB P3.7

        RET

        DELAYMOV R7,#20

        L7: MOV R6,#125

        L6: DJNZ R6,L6

        DJNZ R7,L7

        RET

        END

        4 應用說明

        若按鍵AN1~AN7分別代表數碼1~7,按鍵AN0代表數碼8。在沒有鍵按下時,P1.0~P1.7全是高電平1,若某個鍵被按下,相應的口線就變為低電平0。假如設定的密碼是61234578,當按鍵AN6被按下時,P1.6變為低電平,P1端口其余口線為高電平,此時從P1端口讀入的數值為10111111,存到31H單元的密碼值就是10111111,也就是BFH。依此類推,存到32H至38H單元的密碼值分別是FDH、FBH、F7H、EFH、DFH、7FH、FEH。開鎖時必須先按AN6,使從P1口讀入的第一個密碼值與31H單元存儲的設定值相同,再順序按AN1、AN2、AN3、AN4、AN5、AN7、AN0才能開鎖。否則不能開鎖,同時開始報警。




        關鍵詞: 單片機 密碼鎖 密碼

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 大宁县| 收藏| 五河县| 锡林郭勒盟| 瑞金市| 九寨沟县| 仁寿县| 彝良县| 黄梅县| 浮山县| 罗山县| 比如县| 仁化县| 图们市| 那曲县| 历史| 苏尼特左旗| 民勤县| 迭部县| 沙田区| 尉犁县| 连山| 阜康市| 叶城县| 泸西县| 长宁县| 淮阳县| 古田县| 泗阳县| 孝义市| 轮台县| 龙川县| 延吉市| 四平市| 丘北县| 新泰市| 合水县| 依安县| 娄底市| 西宁市| 磴口县|