返回主页 单片机教程XL2000开发板 单片机学习 自制编程器 单片机资料 软件下载 电子技术产品介绍如何购买 进入论坛

学林杯第二届单片机征文大赛公开评奖稿件 深圳学林电子www.51c51.com 版权所有 转载注明出处   请不要忘了:现在为你喜欢的稿件投票!
作品1:征文-我是怎样开始学习电子的 山西省大同市作品6:多功能自行车测速仪  北京大学    崔健
作品2:数字温度计的设计  杭州电子科技大学    陈智杰作品7:带闹钟智能电子钟 深圳市天安数码城    谢玉平 
作品3:如何使自制的单片机电子钟走时精准     舒新生作品8:电话回拨服务告知装置 武汉市桥口区    詹显德
作品4:宽带数控放大器 陕西省西安通信学院    韩宏伟作品9:单片机应用之摩斯密码电子锁广东省顺德    吴志光
作品5:一些事,一些情    韶关市  冯敬锋作品10:基于aduc842瞬态波形存储器 华中师范大学物理学院   杨程泽
作品11:基于AT89S52单片机的毫欧表电路设计中南林业科技大学涉外学院    郭海

单片机应用之摩斯密码电子锁

设计者:吴志光   地址:广东省顺德

     

摩斯密码相信学习无线电和电子的都非常熟耳,可能这东西已经过时的缘故吧,可能大家不太了解这东西。本着多学一点知识的原则,而且这东西熟悉以后可能再紧要关头可以救命的东东啊!!本人就对这东西解释一下:

电报最早是由美国的摩尔斯在1844年发明的,故也被叫做摩尔斯电码。它由两种基本信号和不同的间隔时间组成:短促的点信号" ",读" "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 _ _ _ _ _  

 

 

基本上摩斯电码就是由一个短音的“嘀”,和长音的“嗒”构成,如果换成数字电路就是01。而且由单个键控制其接奏长短通过其组合来待表不同的字母和数字。本人设计的密码锁就是基于这种概念来设计的。电路图(如图一)

 

 

 

电路特色:本电路只有两个按键,一个为复位键(修改密码键),一个为密码键,密码键根据其按下的长短来实现“滴”“嗒”。1t为滴,3t为嗒(t约为500ms)。若按键s1小于1t,或大于1t小于3t ,或大于5t则被认为无效按法,则重新输入。本电路只取0~9数字摩斯值为有效值。其余的英文字母和其它的按值均被认作无效值。(有兴趣的可把英文码都写进去增强其密码广泛性)。由于设置有后备电源,所以无须增加存储器降低编程难度。八段数码管显示你的摩斯按键是否正确对应你要输入的数字密码。由于采取上电设置密码的编程方法复位键即密码修改键设置在门后,要打开门才能修改密码。设置密码后若输入密码不对的前两次5秒报警,最后一次10分钟报警,摩斯按发错误除外(但有两秒报警,并且须全部密码重新输入)。本电路设置四位密码,由于每位数字键均由五位摩斯码构成则要输入20次摩斯码键!!p0.0(绿色)“滴”显示p0.2(黄色)“嗒”音显示,p0.4(红色)摩斯码按法错误或密码错误,p0.6(蓝色)表示该电路已设置了密码,等待输入密码进行比较。

Ls1为报警器。

   本电路优点:电路简单可靠,保密性强。就算密码泄露但不懂摩斯密码输入法则则是徒劳。

本电路缺点:用户须一段时间掌握摩斯输入技巧。经本人使用一段时间掌握了一些技巧现拿来分享,摩斯输入技巧:按键之后灯亮则松,灯灭则按。

 

以下是电路实物图:(由于特殊原因,不能提供实样板实物图,只能提供实验板实物图区别在于实验板的用led代替了继电器,用USB代替电源方便调试。但电路均能正常工作,程序一样,不便之处敬请原谅)

本实物图状态为等待输入密码进行比较开锁

对本电路有任何疑问请与本人联系!

 

 

程序如下:

 

hc0 equ 4ah    ;延时缓存区

hc1 equ 4bh

hc2 equ 4ch

hc3 equ 4dh

hc4 equ 4eh

 

xs_0 equ 50h   ;显示缓存区

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    ;设置密码缓存区

ps2 equ 5bh

ps3 equ 5ch

ps4 equ 5dh

 

mmbz equ 5fh   ;密码输入次数

 

at1 equ 60h    ;输入密码缓存区

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