找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2519|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

我的DIY ( 51單片機(jī)匯編+藍(lán)牙串口 ) 實(shí)現(xiàn)手機(jī)輸入密碼開鎖

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:858964 發(fā)表于 2020-12-22 13:17 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本帖最后由 Kxuan163 于 2020-12-24 20:34 編輯

【電路圖】

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




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

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

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表