標(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)
下載附件
2020-12-24 20:34 上傳
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1