<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > EDA/PCB > 能防止多次試探密碼的單片機密碼鎖

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

          ——
          作者:哈爾濱信息技術職業(yè)學院 董繼成 時間:2007-09-17 來源:國外電子元器件 收藏

            摘要:提出了一種能防止多次試探的基于設計方案,根據(jù)用戶的10條總體要求,給出了該的硬件電路和軟件程序,同時給出了型號的選擇、硬件設計、軟件流程圖、單片機存儲單元的分配、匯編語言源程序及詳細注釋等內容。
              關鍵詞:單片機;;密碼

          1 引言

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

          2 硬件電路

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

           ?。ǎ保┕玻肝幻艽a,每位的取值范圍為1~8。

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

           ?。ǎ常┌疵總€密碼鍵時都有聲、光提示。

           ?。ǎ矗┤翩I入的8位開鎖密碼不完全正確,則報警5秒鐘,以提醒他人注意。

           ?。ǎ担╅_鎖密碼錯3次要報警10分鐘,報警期間輸入密碼無效,以防竊賊多次試探密碼。

           ?。ǎ叮╂I入的8位開鎖密碼完全正確才能開鎖,開鎖時要有1秒的提示音。

           ?。ǎ罚╇姶沛i的電磁線圈必須用脈沖驅動,每次通電時間不多于2秒,以防燒壞。

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

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

           ?。ǎ保埃┏杀疽容^低,硬件和軟件都要盡可能簡潔可靠,易于批量生產。

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

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

          3 軟件設計

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

          3.1 存儲單元的分配

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

          ?。常保取常福龋阂来未娣牛肝辉O定的密碼,首位密碼存放在31H單元;

           ?。遥埃褐赶蛎艽a地址;

           ?。遥玻阂呀涙I入密碼的位數(shù);

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

           ?。遥粗粒遥罚貉訒r用;

           ?。埃埃龋哄e碼標志位。

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



          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();