摩斯密碼相信學(xué)習(xí)無線電和電子的都非常熟耳,可能這東西已經(jīng)過時的緣故吧,可能大家不太了解這東西。本著多學(xué)一點(diǎn)知識的原則,而且這東西熟悉以后可能再緊要關(guān)頭可以救命的東東。。”救司蛯@東西解釋一下:電報最早是由美國的摩爾斯在1844年發(fā)明的,故也被叫做摩爾斯電碼。它由兩種基本信號和不同的間隔時間組成:短促的點(diǎn)信號" .",讀" 嘀 "(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 _ _ _ _ _ 基本上摩斯電碼就是由一個短音的“嘀”,和長音的“嗒”構(gòu)成,如果換成數(shù)字電路就是0和1。而且由單個鍵控制其接奏長短通過其組合來待表不同的字母和數(shù)字。本人設(shè)計(jì)的密碼鎖就是基于這種概念來設(shè)計(jì)的。電路圖(如圖一) 電路特色:本電路只有兩個按鍵,一個為復(fù)位鍵(修改密碼鍵),一個為密碼鍵,密碼鍵根據(jù)其按下的長短來實(shí)現(xiàn)“滴”“嗒”。1t為滴,3t為嗒(t約為500ms)。若按鍵s1小于1t,或大于1t小于3t ,或大于5t則被認(rèn)為無效按法,則重新輸入。本電路只取0~9數(shù)字摩斯值為有效值。其余的英文字母和其它的按值均被認(rèn)作無效值。(有興趣的可把英文碼都寫進(jìn)去增強(qiáng)其密碼廣泛性)。由于設(shè)置有后備電源,所以無須增加存儲器降低編程難度。八段數(shù)碼管顯示你的摩斯按鍵是否正確對應(yīng)你要輸入的數(shù)字密碼。由于采取上電設(shè)置密碼的編程方法復(fù)位鍵即密碼修改鍵設(shè)置在門后,要打開門才能修改密碼。設(shè)置密碼后若輸入密碼不對的前兩次5秒報警,最后一次10分鐘報警,摩斯按發(fā)錯誤除外(但有兩秒報警,并且須全部密碼重新輸入)。本電路設(shè)置四位密碼,由于每位數(shù)字鍵均由五位摩斯碼構(gòu)成則要輸入20次摩斯碼鍵。0.0(綠色)“滴”顯示 ,p0.2(黃色)“嗒”音顯示,p0.4(紅色)摩斯碼按法錯誤或密碼錯誤,p0.6(藍(lán)色)表示該電路已設(shè)置了密碼,等待輸入密碼進(jìn)行比較。Ls1為報警器。 本電路優(yōu)點(diǎn):電路簡單可靠,保密性強(qiáng)。就算密碼泄露但不懂摩斯密碼輸入法則則是徒勞。本電路缺點(diǎn):用戶須一段時間掌握摩斯輸入技巧。經(jīng)本人使用一段時間掌握了一些技巧現(xiàn)拿來分享,摩斯輸入技巧:按鍵之后燈亮則松,燈滅則按。 以下是電路實(shí)物圖:(由于特殊原因,不能提供實(shí)樣板實(shí)物圖,只能提供實(shí)驗(yàn)板實(shí)物圖區(qū)別在于實(shí)驗(yàn)板的用led代替了繼電器,用USB代替電源方便調(diào)試。但電路均能正常工作,程序一樣,不便之處敬請?jiān)彛┍緦?shí)物圖狀態(tài)為等待輸入密碼進(jìn)行比較開鎖對本電路有任何疑問請與本人聯(lián)系! 程序如下: hc0 equ 4ah ;延時緩存區(qū)hc1 equ 4bhhc2 equ 4chhc3 equ 4dhhc4 equ 4eh xs_0 equ 50h ;顯示緩存區(qū)xs_1 equ 51hxs_2 equ 52hxs_3 equ 53hxs_4 equ 54hxs_5 equ 55hxs_6 equ 56hxs_7 equ 57hxs_8 equ 58hxs_9 equ 59h ps1 equ 5ah ;設(shè)置密碼緩存區(qū)ps2 equ 5bhps3 equ 5chps4 equ 5dh mmbz equ 5fh ;密碼輸入次數(shù) at1 equ 60h ;輸入密碼緩存區(qū)at2 equ 61hat3 equ 62hat4 equ 63h ;初始化org 00hajmp main1 org 30h main1: mov ps1 ,#00hmov ps2 ,#00hmov ps3 ,#00hmov ps4 ,#00h mov at1 ,#00hmov at2 ,#00hmov at3 ,#00hmov 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.0mov a ,#00h ;密碼緩存mov r2 ,#04h ;四位密碼mov r1 ,#00hmov r0 ,#ps1mov r7 ,#05h ;摩斯次數(shù),由于數(shù)字為5次clr p2.7 start:mov p0 ,#0ffhmov p1 ,#0ffhsetb p2.4 ;按鍵位 jb p2.4 ,startlcall delay500msjb p2.4 ,start ok: ;嘀的音clr p0.0lcall delay500msjnb p2.4 ,daa ;是否去嗒音 cun: ;setb p0.2setb p0.0rl aadd a ,r1 ;存入一位摩斯碼djnz r7 ,yanshi ;是否夠五位摩斯碼ajmp xianshi yanshi: ;輸入一位摩斯碼停頓1tlcall delay500msjb p2.4 ,mainajmp ok daa: ;嗒的音lcall delay500msjb p2.4 ,stopsetb p0.0clr p0.2lcall delay500mssetb p0.2jnb p2.4 ,stopmov r1 ,#01hajmp cun stop: ;摩斯輸入錯誤 clr p0.4lcall delay2ssetb p0.4ajmp main cunchu:mov @r0 ,ainc r0mov a ,#00hmov r1 ,#00hmov r7 ,#05hdjnz r2 ,yanshiclr p0.6lcall delay2ssetb p0.6ajmp shuru xianshi:cjne a ,xs_0 ,next1 ;夠五位摩斯碼顯示0mov p1 ,#0c0hclr p3.2 ;報警器lcall delay1ssetb p3.2 ;報警器mov p1 ,#0ffhajmp cunchu next1:cjne a ,xs_1 ,next2 ;夠五位摩斯碼顯示1mov p1 ,#0f9hclr p3.2lcall delay1ssetb p3.2mov p0 ,#0ffhajmp cunchu next2:cjne a ,xs_2 ,next3 ;夠五位摩斯碼顯示2mov p1 ,#0a4hclr p3.2lcall delay1ssetb p3.2mov p1 ,#0ffhajmp cunchu next3:cjne a ,xs_3 ,next4 ;夠五位摩斯碼顯示3mov p1 ,#0b0hclr p3.2lcall delay1ssetb p3.2mov p1 ,#0ffhajmp cunchu next4:cjne a ,xs_4 ,next5 ;夠五位摩斯碼顯示4mov p1 ,#99hclr p3.2lcall delay1ssetb p3.2mov p1 ,#0ffhajmp cunchu next5:cjne a ,xs_5 ,next6 ;夠五位摩斯碼顯示5mov p1 ,#92hclr p3.2lcall delay1ssetb p3.2mov p1 ,#0ffhajmp cunchu next6:cjne a ,xs_6 ,next7 ;夠五位摩斯碼顯示6mov p1 ,#7dhclr p3.2lcall delay1ssetb p3.2mov p1 ,#0ffhajmp cunchu next7:cjne a ,xs_7 ,next8 ;夠五位摩斯碼顯示7mov p1 ,#0f8hclr p3.2lcall delay1ssetb p3.2mov p1 ,#0ffhajmp cunchu next8:cjne a ,xs_8 ,next9 ;夠五位摩斯碼顯示8mov p1 ,#080hclr p3.2lcall delay1ssetb p3.2mov p1 ,#0ffhajmp cunchu next9:cjne a ,xs_9 ,cw ;夠五位摩斯碼顯示9mov p1 ,#90hclr p3.2lcall delay1ssetb p3.2mov p1 ,#0ffhajmp cunchu cw:clr p3.2clr p0.4lcall delay5sclr p0.4setb p3.2ajmp main1 shuru: ;開門復(fù)位mov mmbz ,#03 ;錯誤密碼次數(shù)mov at1 ,#00h mov at2 ,#00hmov at3 ,#00hmov at4 ,#00hshuru2:clr p0.6mov a ,#00h ;密碼緩存mov r2 ,#04h ;四位密碼mov r1 ,#00hmov r0 ,#at1mov r7 ,#05h start1: jb p2.4 ,start1lcall delay500msjb p2.4 ,start1 ok1: ;滴音setb p3.0 ;開門后再按鍵1t以上關(guān)門setb p0.6clr p0.0lcall delay500msjnb p2.4 ,daaa cun1:setb p0.2setb p0.0rl aadd a ,r1djnz r7 ,yanshi1ajmp xianshi1 yanshi1: ;每個摩斯碼之間延時1tlcall delay500msjb p2.4 ,stop1ajmp ok1 daaa: ;嗒音lcall delay500msjb p2.4 ,stop1setb p0.0clr p0.2lcall delay500mssetb p0.2jnb p2.4 ,stop1mov r1 ,#01hajmp cun1 stop1: ;摩斯碼錯誤處理clr p0.4lcall delay2ssetb p0.4ajmp shuru2 cunchu2:mov @r0 ,ainc r0mov a ,#00hmov r1 ,#00hmov r7 ,#05hdjnz r2 ,yanshi1 ajmp bijiao xianshi1: ;顯示處理cjne a ,xs_0 ,next1_1mov p1 ,#0c0hclr p3.2lcall delay1ssetb p3.2mov p1 ,#0ffhajmp cunchu2 next1_1:cjne a ,xs_1 ,next2_2mov p1 ,#0f9hclr p3.2lcall delay1ssetb p3.2mov p1 ,#0ffhajmp cunchu2 next2_2:cjne a ,xs_2 ,next3_3mov p1 ,#0a4hclr p3.2lcall delay1ssetb p3.2mov p1 ,#0ffhajmp cunchu2 next3_3:cjne a ,xs_3 ,next4_4mov p1 ,#0b0hclr p3.2lcall delay1ssetb p3.2mov p1 ,#0ffhajmp cunchu2 next4_4:cjne a ,xs_4 ,next5_5mov p1 ,#99hclr p3.2lcall delay1ssetb p3.2mov p1 ,#0ffhajmp cunchu2 next5_5:cjne a ,xs_5 ,next6_6mov p1 ,#92hclr p3.2lcall delay1ssetb p3.2mov p1 ,#0ffhajmp cunchu2 next6_6:cjne a ,xs_6 ,next7_7mov p1 ,#82hclr p3.2lcall delay1ssetb p3.2mov p1 ,#0ffhajmp cunchu2 next7_7:cjne a ,xs_7 ,next8_8mov p1 ,#0f8hclr p3.2lcall delay1ssetb p3.2mov p1 ,#0ffhajmp cunchu2 next8_8:cjne a ,xs_8 ,next9_9mov p1 ,#80hclr p3.2lcall delay1ssetb p3.2mov p1 ,#0ffhajmp cunchu2 next9_9:cjne a ,xs_9 ,cw2mov p1 ,#90hclr p3.2lcall delay1ssetb p3.2mov p1 ,#0ffhajmp cunchu2 bijia ;比較密碼mov r6 ,#04mov r1 ,#ps1mov r0 ,#at1bj2:clr cmov a ,@r0subb a ,@r1cjne a ,#00h ,cw2inc r1inc r0djnz r6 ,bj2clr p3.2 ;密碼正確clr p3.0lcall delay5ssetb p3.2ajmp shuru cw2: ;密碼錯誤處理djnz mmbz ,bjdmov p0 ,#00hclr p3.2lcall delay5minsetb p3.2mov p0 ,#0ffhajmp shuru2bjd:mov p0 ,#00hclr p3.2lcall delay5ssetb p3.2mov p0 ,#0ffhajmp shuru2 delay500ms:mov hc0 ,#05ff1:mov hc1 ,#200fff1:mov hc2,#250djnz hc2 ,$djnz hc1 ,fff1djnz hc0 ,ff1ret delay1s:mov hc0 ,#10ff2:mov hc1 ,#200ff3:mov hc2 ,#250djnz hc2 ,$djnz hc1 ,ff3djnz hc0 ,ff2ret delay2s:mov hc0 ,#20ff4:mov hc1 ,#200ff5:mov hc2 ,#250djnz hc2 ,$djnz hc1 ,ff5djnz hc0 ,ff4ret delay5s:mov hc0 ,#50ff6:mov hc1 ,#200ff7:mov hc2 ,#250djnz hc2 ,$djnz hc1 ,ff7djnz hc0 ,ff6ret delay5min:mov hc0 ,#12qq1:mov hc1 ,#200qq2:mov hc2 ,#250qq3:mov hc3 ,#250djnz hc3 ,$djnz hc2,qq3djnz hc1 ,qq2djnz hc0 ,qq1retend |
|