標(biāo)題: 我的DIY ( 51單片機匯編+藍牙串口 ) 實現(xiàn)手機輸入密碼開鎖 [打印本頁]

作者: Kxuan163    時間: 2020-12-22 13:17
標(biāo)題: 我的DIY ( 51單片機匯編+藍牙串口 ) 實現(xiàn)手機輸入密碼開鎖
本帖最后由 Kxuan163 于 2020-12-24 20:34 編輯

【電路圖】
[attach]259114[/attach]
.
【工作原理】
BT05藍牙串口模塊連接單片機的串行口(如圖),單片機及電磁鎖安裝于室內(nèi),
主人歸家時,在門外操作安卓手機,運行手機端藍牙串口APP,
搜索到室內(nèi)BT05藍牙,隨即在手機輸入開鎖密碼,以串行通信方送密碼,
室內(nèi)的單片機接收串行數(shù)據(jù)并校驗密碼,若校驗無誤則由P0.1腳輸出低電平,
再經(jīng)光耦4N25及反向驅(qū)動芯片MC1413使繼電器J3線包通電,觸頭K3閉合,
電磁鐵L通電開鎖。
.
【匯編語言源程序】 Kxuan163 原創(chuàng)
          ORG           0000H
         JMP         START
;;--------------------------------------------
         ORG   000BH      ;定時器T0中斷處理入口地址
         AJMP   T0_INT
;;--------------------------------------------
           ORG     0030H        ;; 主程序入口地址
START:   MOV     SP, #60H     ;; 設(shè)定棧頂初址
;;--------------------------------------------  
         ACALL   DSPLED        ;; LED7~LED0逐個顯示1遍
         ACALL   SET_T0
         ACALL   SET_T1
;;--------------------------------------------  
R_X:                              ;; 串行接收
         SETB    P0.1             ;; P0.1高電平,防止控制對象誤動作
         MOV     R2, #5           ;; 接收出錯允許次數(shù)
R_X_A:                            ;; 開始接收
         CLR     RI               ;; RI清零,允許接收字符
         MOV     P2, #11111110B   ;; LED指示燈亮,表示開始接收數(shù)據(jù)
         MOV     R3, #12          ;; 開鎖密碼由12個字符組成
         MOV     DPTR, #DAT_tab   ;; 數(shù)據(jù)表首址                    
RX_1chr:                          ;; 接收1個字符
         JNB     RI, $            ;; 等待1個字符幀接收完畢         
RX_check:       ;; 檢測收到的字符與數(shù)據(jù)表DAT_tab對應(yīng)字符相同否?
         CLR     A
         MOVC    A,  @A+DPTR      ;; A←數(shù)據(jù)表的1個字符
         CJNE    A,  SBUF, RX_err
         DJNZ    R3, RX_next      ;; 該字符無誤,接收另一字符
OK:                                 ;; 全部字符接收檢測無誤
         CLR     P0.1             ;; P0.1低電平,驅(qū)動外設(shè)動作
         MOV     P2, #01010101B   ;;#11111101B   ;; 藍LED亮1秒[attach]259114[/attach]         ACALL   DLY1s
         AJMP    START      
RX_next:                          ;; 接收另一字符
         INC     DPTR             ;; 數(shù)據(jù)表指針移動
         CLR     RI               ;; RI清零,允許接收字符
         SJMP    RX_1chr          ;; 接收另一字符
RX_err:                           ;; 接收字符出錯
RX_errA: DJNZ    R2, R_X_A        ;; 若出錯未夠5次,重新開始接收
         ACALL   DLY20s
         AJMP    START            ;; 若出錯達5次,延時20秒后初始化
;;--------------------------------------------
SET_T1:                   ;; 用T1產(chǎn)生波特率的設(shè)置
         MOV         TMOD, #20H   ;; T1定時模式.方式2(8位自動重載計數(shù)初值)
              MOV         TH1, #0FDH   ;;
         MOV         TL1, #0FDH   ;; 波特率9600
         MOV         SCON, #70H   ;; 設(shè)定串口工作方式1,8位UART,接收允許                                ANL         PCON, #00H   ;; 波特率不倍增
         SETB         TR1                ;; 啟動定時器T1        
         RET
;;--------------------------------------------
SET_T0:          ;; T0初始化,
        ;; 定時65ms的計數(shù)值 =65000μs/1μs =65000
;; 方式1,16位計數(shù)器,計數(shù)值 =65536-65000 =536 =218H
         MOV   TMOD, #01H    ;; T0定時模式.方式1(16位計數(shù)器)
         MOV   TH0,  #02H    ;; 裝入計數(shù)初值高字節(jié)
         MOV   TL0,  #18H    ;; 裝入計數(shù)初值低字節(jié)
         SETB  TR0           ;; 啟動T0
         SETB  ET0           ;; 允許T0中斷
         SETB  EA            ;; MPU開中斷
         RET
;;-------------------------------------------  
T0_INT:     ;; T0定時中斷處理程序,每隔65ms喂狗一次  
         CLR   P0.3          ;;  FeedDog 喂片外狗
         MOV   TH0,  #02H    ;; 重裝計數(shù)初值高字節(jié)
         MOV   TL0,  #18H    ;; 重裝計數(shù)初值低字節(jié)
         RETI
;;--------------------------------------------
DLY250:    ;; 延時250ms
DLY250A:   MOV  R5,#2           
DLY250B:   MOV  R6,#250
DLY250C:   MOV  R7,#250
           DJNZ R7,$
           DJNZ R6,DLY250C
           DJNZ R5,DLY250B
           RET
;; 1個機器周期 =12/(11.0592MHz) ≈1.085μs
;; 每條DJNZ Rn,rel指令耗費2個機器周期≈2μs
;; 2x250x250x2μs≈250 000μs =250ms
;;----------------------------------------------
DLY1s:      ;; 延時1秒        
DLY1sA:     MOV  R5,#8         
DLY1sB:     MOV  R6,#250           
DLY1sC:     MOV  R7,#250
            DJNZ R7,$
            DJNZ R6,DLY1sC
            DJNZ R5,DLY1sB
            RET
;; 8x250x250x2μs=1 000 000μs =1ms
;;--------------------------------------------
DLY20s:    ;; 延時20秒
DLY20sA:    MOV  R4,#4
DLY20sB:    MOV  R5,#40
DLY20sC:    MOV  R6,#250
DLY20sD:    MOV  R7,#250
            DJNZ R7,$
            DJNZ R6,DLY20sD
            DJNZ R5,DLY20sC
            DJNZ R4,DLY20sB
            RET
;;4x40x250x250x2μs =20 000 000μs =20s,
;;--------------------------------------------
DSPLED:   ;;LED7~LED0逐個顯示1遍然
LEDLP1:    MOV  A,  #01111111B
LEDLP2:    MOV  P2, A          ;; LED7亮
           CALL DLY250         ;; 延時250ms
           CJNE A, #11111110B, DSP_next
           SJMP END_LED
DSP_next:  RR   A              ;; 右移1位
           SJMP LEDLP2         ;; 另一個LED亮
END_LED:   RET      
;;--------------------------------------------
DAT_tab:  ;;12個字符的ASCII碼,例如 38H,39H,73H,35H,32H...
               ;;對應(yīng)手機端輸入的密碼:     8     9     s       5       2 ...
;;----------------------------------------------
           END                ;; 主程序結(jié)束




(89s52+藍牙串口)手機用密碼開鎖電路.jpg (53.85 KB, 下載次數(shù): 45)

(89s52+藍牙串口)手機用密碼開鎖電路.jpg





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1