|
摩斯密碼相信學習無線電和電子的都非常熟耳,可能這東西已經過時的緣故吧,可能大家不太了解這東西。本著多學一點知識的原則,而且這東西熟悉以后可能再緊要關頭可以救命的東東。!本人就對這東西解釋一下:
電報最早是由美國的摩爾斯在1844年發(fā)明的,故也被叫做摩爾斯電碼。它由兩種基本信號和不同的間隔時間組成:短促的點信號" .",讀" 嘀 "(Di);保持一定時間的長信號"—",讀"嗒 "(Da)。間隔時間:"嘀"1t;"嗒"3t;"滴嗒"間1t;字母間3t;字間5t。
摩斯密碼表
A . _ M _ _ Y _ . _ _
B _ . . . N _ . Z _ _ . .
C _ . _ . O _ _ _ 1 . _ _ _ _
D _ . . P . _ _ . 2 . . _ _ _
E . Q _ _ . _ 3 . . . _ _
F . . _ . R . _ . 4 . . . . _
G _ _ . S . . . 5 . . . . .
H . . . . T _ 6 _ . . . .
I . . U . . _ 7 _ _ . . .
J . _ _ _ V . . . _ 8 _ _ _ . .
K _ . _ W . _ _ 9 _ _ _ _ .
L . _ . . X _ . . _ 0 _ _ _ _ _
基本上摩斯電碼就是由一個短音的“嘀”,和長音的“嗒”構成,如果換成數字電路就是0和1。而且由單個鍵控制其接奏長短通過其組合來待表不同的字母和數字。本人設計的密碼鎖就是基于這種概念來設計的。電路圖(如圖一)

電路特色:本電路只有兩個按鍵,一個為復位鍵(修改密碼鍵),一個為密碼鍵,密碼鍵根據其按下的長短來實現“滴”“嗒”。1t為滴,3t為嗒(t約為500ms)。若按鍵s1小于1t,或大于1t小于3t ,或大于5t則被認為無效按法,則重新輸入。本電路只取0~9數字摩斯值為有效值。其余的英文字母和其它的按值均被認作無效值。(有興趣的可把英文碼都寫進去增強其密碼廣泛性)。由于設置有后備電源,所以無須增加存儲器降低編程難度。八段數碼管顯示你的摩斯按鍵是否正確對應你要輸入的數字密碼。由于采取上電設置密碼的編程方法復位鍵即密碼修改鍵設置在門后,要打開門才能修改密碼。設置密碼后若輸入密碼不對的前兩次5秒報警,最后一次10分鐘報警,摩斯按發(fā)錯誤除外(但有兩秒報警,并且須全部密碼重新輸入)。本電路設置四位密碼,由于每位數字鍵均由五位摩斯碼構成則要輸入20次摩斯碼鍵。p0.0(綠色)“滴”顯示,p0.2(黃色)“嗒”音顯示,p0.4(紅色)摩斯碼按法錯誤或密碼錯誤,p0.6(藍色)表示該電路已設置了密碼,等待輸入密碼進行比較。
Ls1為報警器。
本電路優(yōu)點:電路簡單可靠,保密性強。就算密碼泄露但不懂摩斯密碼輸入法則則是徒勞。
本電路缺點:用戶須一段時間掌握摩斯輸入技巧。經本人使用一段時間掌握了一些技巧現拿來分享,摩斯輸入技巧:按鍵之后燈亮則松,燈滅則按。
以下是電路實物圖:(由于特殊原因,不能提供實樣板實物圖,只能提供實驗板實物圖區(qū)別在于實驗板的用led代替了繼電器,用USB代替電源方便調試。但電路均能正常工作,程序一樣,不便之處敬請原諒)

本實物圖狀態(tài)為等待輸入密碼進行比較開鎖
對本電路有任何疑問請與本人聯系!
程序如下:
hc0 equ 4ah ;延時緩存區(qū)
hc1 equ 4bh
hc2 equ 4ch
hc3 equ 4dh
hc4 equ 4eh
xs_0 equ 50h ;顯示緩存區(qū)
xs_1 equ 51h
xs_2 equ 52h
xs_3 equ 53h
xs_4 equ 54h
xs_5 equ 55h
xs_6 equ 56h
xs_7 equ 57h
xs_8 equ 58h
xs_9 equ 59h
ps1 equ 5ah ;設置密碼緩存區(qū)
ps2 equ 5bh
ps3 equ 5ch
ps4 equ 5dh
mmbz equ 5fh ;密碼輸入次數
at1 equ 60h ;輸入密碼緩存區(qū)
at2 equ 61h
at3 equ 62h
at4 equ 63h
;初始化
org 00h
ajmp main1
org 30h
main1:
mov ps1 ,#00h
mov ps2 ,#00h
mov ps3 ,#00h
mov ps4 ,#00h
mov at1 ,#00h
mov at2 ,#00h
mov at3 ,#00h
mov at4 ,#00h
main:
mov xs_0 ,#1fh ;顯示0的摩斯值
mov xs_1 ,#0fh ;顯示1的摩斯值
mov xs_2 ,#07h ;顯示2的摩斯值
mov xs_3 ,#03h ;顯示3的摩斯值
mov xs_4 ,#01h ;顯示4的摩斯值
mov xs_5 ,#00h ;顯示5的摩斯值
mov xs_6 ,#10h ;顯示6的摩斯值
mov xs_7 ,#18h ;顯示7的摩斯值
mov xs_8 ,#1ch ;顯示8的摩斯值
mov xs_9 ,#1eh ;顯示9的摩斯值
clr p3.0
mov a ,#00h ;密碼緩存
mov r2 ,#04h ;四位密碼
mov r1 ,#00h
mov r0 ,#ps1
mov r7 ,#05h ;摩斯次數,由于數字為5次
clr p2.7
start:
mov p0 ,#0ffh
mov p1 ,#0ffh
setb p2.4 ;按鍵位
jb p2.4 ,start
lcall delay500ms
jb p2.4 ,start
ok: ;嘀的音
clr p0.0
lcall delay500ms
jnb p2.4 ,daa ;是否去嗒音
cun: ;
setb p0.2
setb p0.0
rl a
add a ,r1 ;存入一位摩斯碼
djnz r7 ,yanshi ;是否夠五位摩斯碼
ajmp xianshi
yanshi: ;輸入一位摩斯碼停頓1t
lcall delay500ms
jb p2.4 ,main
ajmp ok
daa: ;嗒的音
lcall delay500ms
jb p2.4 ,stop
setb p0.0
clr p0.2
lcall delay500ms
setb p0.2
jnb p2.4 ,stop
mov r1 ,#01h
ajmp cun
stop: ;摩斯輸入錯誤
clr p0.4
lcall delay2s
setb p0.4
ajmp main
cunchu:
mov @r0 ,a
inc r0
mov a ,#00h
mov r1 ,#00h
mov r7 ,#05h
djnz r2 ,yanshi
clr p0.6
lcall delay2s
setb p0.6
ajmp shuru
xianshi:
cjne a ,xs_0 ,next1 ;夠五位摩斯碼顯示0
mov p1 ,#0c0h
clr p3.2 ;報警器
lcall delay1s
setb p3.2 ;報警器
mov p1 ,#0ffh
ajmp cunchu
next1:
cjne a ,xs_1 ,next2 ;夠五位摩斯碼顯示1
mov p1 ,#0f9h
clr p3.2
lcall delay1s
setb p3.2
mov p0 ,#0ffh
ajmp cunchu
next2:
cjne a ,xs_2 ,next3 ;夠五位摩斯碼顯示2
mov p1 ,#0a4h
clr p3.2
lcall delay1s
setb p3.2
mov p1 ,#0ffh
ajmp cunchu
next3:
cjne a ,xs_3 ,next4 ;夠五位摩斯碼顯示3
mov p1 ,#0b0h
clr p3.2
lcall delay1s
setb p3.2
mov p1 ,#0ffh
ajmp cunchu
next4:
cjne a ,xs_4 ,next5 ;夠五位摩斯碼顯示4
mov p1 ,#99h
clr p3.2
lcall delay1s
setb p3.2
mov p1 ,#0ffh
ajmp cunchu
next5:
cjne a ,xs_5 ,next6 ;夠五位摩斯碼顯示5
mov p1 ,#92h
clr p3.2
lcall delay1s
setb p3.2
mov p1 ,#0ffh
ajmp cunchu
next6:
cjne a ,xs_6 ,next7 ;夠五位摩斯碼顯示6
mov p1 ,#7dh
clr p3.2
lcall delay1s
setb p3.2
mov p1 ,#0ffh
ajmp cunchu
next7:
cjne a ,xs_7 ,next8 ;夠五位摩斯碼顯示7
mov p1 ,#0f8h
clr p3.2
lcall delay1s
setb p3.2
mov p1 ,#0ffh
ajmp cunchu
next8:
cjne a ,xs_8 ,next9 ;夠五位摩斯碼顯示8
mov p1 ,#080h
clr p3.2
lcall delay1s
setb p3.2
mov p1 ,#0ffh
ajmp cunchu
next9:
cjne a ,xs_9 ,cw ;夠五位摩斯碼顯示9
mov p1 ,#90h
clr p3.2
lcall delay1s
setb p3.2
mov p1 ,#0ffh
ajmp cunchu
cw:
clr p3.2
clr p0.4
lcall delay5s
clr p0.4
setb p3.2
ajmp main1
shuru: ;開門復位
mov mmbz ,#03 ;錯誤密碼次數
mov at1 ,#00h
mov at2 ,#00h
mov at3 ,#00h
mov at4 ,#00h
shuru2:
clr p0.6
mov a ,#00h ;密碼緩存
mov r2 ,#04h ;四位密碼
mov r1 ,#00h
mov r0 ,#at1
mov r7 ,#05h
start1:
jb p2.4 ,start1
lcall delay500ms
jb p2.4 ,start1
ok1: ;滴音
setb p3.0 ;開門后再按鍵1t以上關門
setb p0.6
clr p0.0
lcall delay500ms
jnb p2.4 ,daaa
cun1:
setb p0.2
setb p0.0
rl a
add a ,r1
djnz r7 ,yanshi1
ajmp xianshi1
yanshi1: ;每個摩斯碼之間延時1t
lcall delay500ms
jb p2.4 ,stop1
ajmp ok1
daaa: ;嗒音
lcall delay500ms
jb p2.4 ,stop1
setb p0.0
clr p0.2
lcall delay500ms
setb p0.2
jnb p2.4 ,stop1
mov r1 ,#01h
ajmp cun1
stop1: ;摩斯碼錯誤處理
clr p0.4
lcall delay2s
setb p0.4
ajmp shuru2
cunchu2:
mov @r0 ,a
inc r0
mov a ,#00h
mov r1 ,#00h
mov r7 ,#05h
djnz r2 ,yanshi1
ajmp bijiao
xianshi1: ;顯示處理
cjne a ,xs_0 ,next1_1
mov p1 ,#0c0h
clr p3.2
lcall delay1s
setb p3.2
mov p1 ,#0ffh
ajmp cunchu2
next1_1:
cjne a ,xs_1 ,next2_2
mov p1 ,#0f9h
clr p3.2
lcall delay1s
setb p3.2
mov p1 ,#0ffh
ajmp cunchu2
next2_2:
cjne a ,xs_2 ,next3_3
mov p1 ,#0a4h
clr p3.2
lcall delay1s
setb p3.2
mov p1 ,#0ffh
ajmp cunchu2
next3_3:
cjne a ,xs_3 ,next4_4
mov p1 ,#0b0h
clr p3.2
lcall delay1s
setb p3.2
mov p1 ,#0ffh
ajmp cunchu2
next4_4:
cjne a ,xs_4 ,next5_5
mov p1 ,#99h
clr p3.2
lcall delay1s
setb p3.2
mov p1 ,#0ffh
ajmp cunchu2
next5_5:
cjne a ,xs_5 ,next6_6
mov p1 ,#92h
clr p3.2
lcall delay1s
setb p3.2
mov p1 ,#0ffh
ajmp cunchu2
next6_6:
cjne a ,xs_6 ,next7_7
mov p1 ,#82h
clr p3.2
lcall delay1s
setb p3.2
mov p1 ,#0ffh
ajmp cunchu2
next7_7:
cjne a ,xs_7 ,next8_8
mov p1 ,#0f8h
clr p3.2
lcall delay1s
setb p3.2
mov p1 ,#0ffh
ajmp cunchu2
next8_8:
cjne a ,xs_8 ,next9_9
mov p1 ,#80h
clr p3.2
lcall delay1s
setb p3.2
mov p1 ,#0ffh
ajmp cunchu2
next9_9:
cjne a ,xs_9 ,cw2
mov p1 ,#90h
clr p3.2
lcall delay1s
setb p3.2
mov p1 ,#0ffh
ajmp cunchu2
bijiao: ;比較密碼
mov r6 ,#04
mov r1 ,#ps1
mov r0 ,#at1
bj2:
clr c
mov a ,@r0
subb a ,@r1
cjne a ,#00h ,cw2
inc r1
inc r0
djnz r6 ,bj2
clr p3.2 ;密碼正確
clr p3.0
lcall delay5s
setb p3.2
ajmp shuru
cw2: ;密碼錯誤處理
djnz mmbz ,bjd
mov p0 ,#00h
clr p3.2
lcall delay5min
setb p3.2
mov p0 ,#0ffh
ajmp shuru2
bjd:
mov p0 ,#00h
clr p3.2
lcall delay5s
setb p3.2
mov p0 ,#0ffh
ajmp shuru2
delay500ms:
mov hc0 ,#05
ff1:
mov hc1 ,#200
fff1:
mov hc2,#250
djnz hc2 ,$
djnz hc1 ,fff1
djnz hc0 ,ff1
ret
delay1s:
mov hc0 ,#10
ff2:
mov hc1 ,#200
ff3:
mov hc2 ,#250
djnz hc2 ,$
djnz hc1 ,ff3
djnz hc0 ,ff2
ret
delay2s:
mov hc0 ,#20
ff4:
mov hc1 ,#200
ff5:
mov hc2 ,#250
djnz hc2 ,$
djnz hc1 ,ff5
djnz hc0 ,ff4
ret
delay5s:
mov hc0 ,#50
ff6:
mov hc1 ,#200
ff7:
mov hc2 ,#250
djnz hc2 ,$
djnz hc1 ,ff7
djnz hc0 ,ff6
ret
delay5min:
mov hc0 ,#12
qq1:
mov hc1 ,#200
qq2:
mov hc2 ,#250
qq3:
mov hc3 ,#250
djnz hc3 ,$
djnz hc2,qq3
djnz hc1 ,qq2
djnz hc0 ,qq1
ret
end |