|
摩斯密碼相信學(xué)習(xí)無(wú)線電和電子的都非常熟耳,可能這東西已經(jīng)過(guò)時(shí)的緣故吧,可能大家不太了解這東西。本著多學(xué)一點(diǎn)知識(shí)的原則,而且這東西熟悉以后可能再緊要關(guān)頭可以救命的東東啊!!本人就對(duì)這東西解釋一下:
電報(bào)最早是由美國(guó)的摩爾斯在1844年發(fā)明的,故也被叫做摩爾斯電碼。它由兩種基本信號(hào)和不同的間隔時(shí)間組成:短促的點(diǎn)信號(hào)" .",讀" 嘀 "(Di);保持一定時(shí)間的長(zhǎng)信號(hào)"—",讀"嗒 "(Da)。間隔時(shí)間:"嘀"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 _ _ _ _ _
基本上摩斯電碼就是由一個(gè)短音的“嘀”,和長(zhǎng)音的“嗒”構(gòu)成,如果換成數(shù)字電路就是0和1。而且由單個(gè)鍵控制其接奏長(zhǎng)短通過(guò)其組合來(lái)待表不同的字母和數(shù)字。本人設(shè)計(jì)的密碼鎖就是基于這種概念來(lái)設(shè)計(jì)的。電路圖(如圖一)

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

本實(shí)物圖狀態(tài)為等待輸入密碼進(jìn)行比較開(kāi)鎖
對(duì)本電路有任何疑問(wèn)請(qǐng)與本人聯(lián)系!
程序如下:
hc0 equ 4ah ;延時(shí)緩存區(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 ;設(shè)置密碼緩存區(qū)
ps2 equ 5bh
ps3 equ 5ch
ps4 equ 5dh
mmbz equ 5fh ;密碼輸入次數(shù)
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 ;摩斯次數(shù),由于數(shù)字為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: ;摩斯輸入錯(cuò)誤
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 ;報(bào)警器
lcall delay1s
setb p3.2 ;報(bào)警器
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: ;開(kāi)門復(fù)位
mov mmbz ,#03 ;錯(cuò)誤密碼次數(shù)
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 ;開(kāi)門后再按鍵1t以上關(guān)門
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: ;每個(gè)摩斯碼之間延時(shí)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: ;摩斯碼錯(cuò)誤處理
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: ;密碼錯(cuò)誤處理
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 |