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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 51單片機的LCD1602液晶屏密碼鎖匯編程序

          51單片機的LCD1602液晶屏密碼鎖匯編程序

          作者: 時間:2016-11-28 來源:網(wǎng)絡 收藏
          ;說 明:首先顯示器提示輸入密碼,密碼在12.5S內輸入有效,
          ; 輸入次三次錯誤報警10S,輸入正確開門,7秒后返回初態(tài)
          ; 以上參數(shù)均可在主程序里設定,修改系統(tǒng)密碼在程序的結尾
          RS BIT P2.7
          RW BIT P2.6
          E BIT P2.5
          ENTER BIT 22H.0
          OPEN BIT P3.6
          SPEAK BIT P3.7
          PASSBUF EQU 40H
          KEYNUMBER EQU 41H ;存放識別后的按鍵號
          ORG 0000H
          AJMP MAIN
          ORG 0003H
          JMP KEY_INT
          ORG 000BH
          AJMP INTT0
          ORG 001BH
          AJMP INTT1
          ORG 0030H
          ;========== 主程序開始 ==============
          MAIN: MOV 30H,#07H ;輸入密碼為7位 最高只可設15位
          MOV 42H,#200 ;設定報警的時間,42H單元里的數(shù)*50MS
          MOV 43H,#250 ;設定開門時間 14的倍數(shù)(實際上液晶顯示器執(zhí)行指令占用了時間,開門時間會比14*250MS大)
          ;44H號單元存放輸入錯誤的次數(shù)
          ;45H為定時器0中斷次數(shù)
          ;46H為定時器1中斷次數(shù)
          MOV 47H,#250 ;輸入密碼時間設定,50MS倍數(shù)
          MOV SP,#60H
          CLR OPEN
          CLR SPEAK ;初始化輸出設備
          CLR ENTER ;標志位初始化
          MOV TMOD,#11H ;定時器工作方式2
          MOV TH0,#3CH ;初值50MS
          MOV TL0,#0BH
          MOV TH1,#3CH
          MOV TL1,#0BH
          SETB EA
          SETB ET0
          SETB ET1
          MOV TCON,#00000000B ;電平觸發(fā)
          START: MOV R0,30H
          MOV R1,#31H
          SS1: MOV @R1,#00H
          INC R1
          DJNZ R0,SS1 ;將輸入密碼緩沖單元清零
          MOV P1,#0FH ;初始化按鍵口
          MOV R1,#31H ;從31號單元開始存放按建輸入的密碼
          CLR 20H ;報警標志清零
          CLR 21H ;密碼超時標志
          MOV 46H,#00H ;超時后對定時器中斷次數(shù)清零,便于下一輪重新計時
          INIT: ACALL SELLCD ;設定液晶工作方式
          ACALL LINE1 ;在第一行顯示
          MOV DPTR,#MES_P ;顯示請輸入密碼
          ACALL DISPLAY
          setb EX0 ;開中斷,允許鍵盤輸入
          KEYIN: JB 21H,ERR ;超時轉到錯誤程序
          JNB ENTER,KEYIN ;等待ENTER按下
          CLR ENTER
          clr EX0 ;密碼輸入完后鎖定鍵盤
          ;當使用邊沿觸發(fā)時用上面的指令為什么禁止不了中斷???
          ;========== 密碼判斷程序 ============
          COMP:
          MOV DPTR,#PASS
          MOV R4,30H ;密碼的長度
          MOV A,#0
          MOV R1,#31H
          LOOP: MOV R5,A
          MOVC A,@A+DPTR
          MOV PASSBUF,A ;取出系統(tǒng)設定的密碼
          MOV A,@R1 ;從31號單元開始取出輸入的密碼
          CJNE A,PASSBUF,ERR ;比較
          MOV A,R5
          INC A
          INC R1 ;取下一位
          DJNZ R4,LOOP
          ;正確
          MATCH: MOV A,#01H
          ACALL ENABLE ;清屏,光標復位
          ACALL LINE1 ;從第一行開始顯示
          MOV DPTR,#MES_C
          ACALL DISPLAY ;顯示"請進"
          ACALL LINE2
          MOV DPTR,#TAB_1
          ACALL DISPLAY
          SETB OPEN ;開門
          MOV 44H,#00H ;輸入錯誤次數(shù)清零
          MOV R6,43H
          ACALL DELAY
          CLR OPEN ;復位
          JMP START
          ;錯誤
          ERR: ACALL BACK
          MOV R6,#03H
          ACALL DELAY
          ACALL BACK ;輸錯提示音,鳴兩下
          MOV A,#01H
          ACALL ENABLE
          ACALL LINE1
          MOV DPTR,#MES_E
          ACALL DISPLAY ;顯示錯誤
          MOV R6,#40H
          ACALL DELAY
          INC 44H
          MOV A,44H
          CJNE A,#03H,EE0
          EE0: JC ERROUT ;輸錯不到三次返回
          MOV 44H,#00H ;清零
          ACALL WRANING ;報警
          ERROUT: JMP START
          ;=========== 按鍵中斷服務程序 ==========
          KEY_INT:push acc
          push psw
          clr ex0
          acall delay10ms ;延時消抖
          SETB TR1 ;啟動定時器
          ACALL SMKEY ;按鍵識別
          MOV A,KEYNUMBER ;返回按鍵號
          ACALL BACK ;按鍵發(fā)聲
          MOV R3,A
          CJNE R3,#0BH,K1 ;ENTER是否按下
          SETB ENTER
          clr tr1 ;按下確認后關畢定時器
          mov 46h,#00h ;對中斷次數(shù)清零
          AJMP KEY_RTN
          K1: ADD A,#30H ;將按鍵號轉換為ASCⅡ碼
          MOV @R1,A ;將輸入的密碼存入緩沖單元
          INC R1 ;修改地址
          ACALL WRDATA ;輸入一位顯示一個"*"
          KEY_RTN:pop psw
          pop acc
          setb ex0
          RETI
          ;=========== 按鍵識別程序 ==========
          SMKEY:
          MOV A,P1
          ANL A,#0FH
          WKEY: MOV B,A ;反轉法查詢
          MOV P1,#0F0H
          NOP
          MOV A,P1
          ANL A,#0F0H
          ORL A,B
          MOV P1,#0FH ;還原P1口初態(tài)
          CJNE A,#0EEH,WKEY1
          MOV KEYNUMBER,#00H
          AJMP RETURN
          WKEY1: CJNE A,#0EDH,WKEY2
          MOV KEYNUMBER,#01H
          AJMP RETURN
          WKEY2: CJNE A,#0EBH,WKEY3
          MOV KEYNUMBER,#02H
          AJMP RETURN
          WKEY3: CJNE A,#0E7H,WKEY4
          MOV KEYNUMBER,#03H
          AJMP RETURN
          WKEY4: CJNE A,#0DEH,WKEY5
          MOV KEYNUMBER,#04H
          AJMP RETURN
          WKEY5: CJNE A,#0DDH,WKEY6
          MOV KEYNUMBER,#05H
          AJMP RETURN
          WKEY6: CJNE A,#0DBH,WKEY7
          MOV KEYNUMBER,#06H
          AJMP RETURN
          WKEY7: CJNE A,#0D7H,WKEY8
          MOV KEYNUMBER,#07H
          AJMP RETURN
          WKEY8: CJNE A,#0BEH,WKEY9
          MOV KEYNUMBER,#08H
          AJMP RETURN
          WKEY9: CJNE A,#0BdH,WKEY10
          MOV KEYNUMBER,#09H
          AJMP RETURN
          WKEY10: CJNE A,#0BbH,WKEY11
          MOV KEYNUMBER,#0AH
          AJMP RETURN
          WKEY11: CJNE A,#0B7H,RETURN
          MOV KEYNUMBER,#0BH ;判斷哪個鍵按下,返回相應按鍵號碼
          RETURN: MOV P1,#0FH
          NOP
          NOP
          MOV A,P1
          CPL A
          ANL A,#0FH
          JNZ RETURN ;等待按鍵松開
          RET

          上一頁 1 2 下一頁

          評論


          技術專區(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); })();