整理单片机应用之摩斯密码电子锁.docx
《整理单片机应用之摩斯密码电子锁.docx》由会员分享,可在线阅读,更多相关《整理单片机应用之摩斯密码电子锁.docx(33页珍藏版)》请在冰点文库上搜索。
![整理单片机应用之摩斯密码电子锁.docx](https://file1.bingdoc.com/fileroot1/2023-4/28/154a3798-aa32-4dd5-8388-83abb4d1fc34/154a3798-aa32-4dd5-8388-83abb4d1fc341.gif)
整理单片机应用之摩斯密码电子锁
单片机应用之摩斯密码电子锁
设计者:
吴志光地址:
广东省顺德
摩斯密码相信学习无线电和电子的都非常熟耳,可能这东西已经过时的缘故吧,可能大家不太了解这东西。
本着多学一点知识的原则,而且这东西熟悉以后可能再紧要关头可以救命的东东啊!
!
本人就对这东西解释一下:
电报最早是由美国的摩尔斯在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_____
基本上摩斯电码就是由一个短音的“嘀”,和长音的“嗒”构成,如果换成数字电路就是0和1。
而且由单个键控制其接奏长短通过其组合来待表不同的字母和数字。
本人设计的密码锁就是基于这种概念来设计的。
电路图(如图一)
电路特色:
本电路只有两个按键,一个为复位键(修改密码键),一个为密码键,密码键根据其按下的长短来实现“滴”“嗒”。
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代替电源方便调试。
但电路均能正常工作,程序一样,不便之处敬请原谅)
本实物图状态为等待输入密码进行比较开锁
对本电路有任何疑问请与本人联系!
程序如下:
hc0equ4ah;延时缓存区
hc1equ4bh
hc2equ4ch
hc3equ4dh
hc4equ4eh
xs_0equ50h;显示缓存区
xs_1equ51h
xs_2equ52h
xs_3equ53h
xs_4equ54h
xs_5equ55h
xs_6equ56h
xs_7equ57h
xs_8equ58h
xs_9equ59h
ps1equ5ah;设置密码缓存区
ps2equ5bh
ps3equ5ch
ps4equ5dh
mmbzequ5fh;密码输入次数
at1equ60h;输入密码缓存区
at2equ61h
at3equ62h
at4equ63h
;初始化
org00h
ajmpmain1
org30h
main1:
movps1,#00h
movps2,#00h
movps3,#00h
movps4,#00h
movat1,#00h
movat2,#00h
movat3,#00h
movat4,#00h
main:
movxs_0,#1fh;显示0的摩斯值
movxs_1,#0fh;显示1的摩斯值
movxs_2,#07h;显示2的摩斯值
movxs_3,#03h;显示3的摩斯值
movxs_4,#01h;显示4的摩斯值
movxs_5,#00h;显示5的摩斯值
movxs_6,#10h;显示6的摩斯值
movxs_7,#18h;显示7的摩斯值
movxs_8,#1ch;显示8的摩斯值
movxs_9,#1eh;显示9的摩斯值
clrp3.0
mova,#00h;密码缓存
movr2,#04h;四位密码
movr1,#00h
movr0,#ps1
movr7,#05h;摩斯次数,由于数字为5次
clrp2.7
start:
movp0,#0ffh
movp1,#0ffh
setbp2.4;按键位
jbp2.4,start
lcalldelay500ms
jbp2.4,start
ok:
;嘀的音
clrp0.0
lcalldelay500ms
jnbp2.4,daa;是否去嗒音
cun:
;
setbp0.2
setbp0.0
rla
adda,r1;存入一位摩斯码
djnzr7,yanshi;是否够五位摩斯码
ajmpxianshi
yanshi:
;输入一位摩斯码停顿1t
lcalldelay500ms
jbp2.4,main
ajmpok
daa:
;嗒的音
lcalldelay500ms
jbp2.4,stop
setbp0.0
clrp0.2
lcalldelay500ms
setbp0.2
jnbp2.4,stop
movr1,#01h
ajmpcun
stop:
;摩斯输入错误
clrp0.4
lcalldelay2s
setbp0.4
ajmpmain
cunchu:
mov@r0,a
incr0
mova,#00h
movr1,#00h
movr7,#05h
djnzr2,yanshi
clrp0.6
lcalldelay2s
setbp0.6
ajmpshuru
xianshi:
cjnea,xs_0,next1;够五位摩斯码显示0
movp1,#0c0h
clrp3.2;报警器
lcalldelay1s
setbp3.2;报警器
movp1,#0ffh
ajmpcunchu
next1:
cjnea,xs_1,next2;够五位摩斯码显示1
movp1,#0f9h
clrp3.2
lcalldelay1s
setbp3.2
movp0,#0ffh
ajmpcunchu
next2:
cjnea,xs_2,next3;够五位摩斯码显示2
movp1,#0a4h
clrp3.2
lcalldelay1s
setbp3.2
movp1,#0ffh
ajmpcunchu
next3:
cjnea,xs_3,next4;够五位摩斯码显示3
movp1,#0b0h
clrp3.2
lcalldelay1s
setbp3.2
movp1,#0ffh
ajmpcunchu
next4:
cjnea,xs_4,next5;够五位摩斯码显示4
movp1,#99h
clrp3.2
lcalldelay1s
setbp3.2
movp1,#0ffh
ajmpcunchu
next5:
cjnea,xs_5,next6;够五位摩斯码显示5
movp1,#92h
clrp3.2
lcalldelay1s
setbp3.2
movp1,#0ffh
ajmpcunchu
next6:
cjnea,xs_6,next7;够五位摩斯码显示6
movp1,#7dh
clrp3.2
lcalldelay1s
setbp3.2
movp1,#0ffh
ajmpcunchu
next7:
cjnea,xs_7,next8;够五位摩斯码显示7
movp1,#0f8h
clrp3.2
lcalldelay1s
setbp3.2
movp1,#0ffh
ajmpcunchu
next8:
cjnea,xs_8,next9;够五位摩斯码显示8
movp1,#080h
clrp3.2
lcalldelay1s
setbp3.2
movp1,#0ffh
ajmpcunchu
next9:
cjnea,xs_9,cw;够五位摩斯码显示9
movp1,#90h
clrp3.2
lcalldelay1s
setbp3.2
movp1,#0ffh
ajmpcunchu
cw:
clrp3.2
clrp0.4
lcalldelay5s
clrp0.4
setbp3.2
ajmpmain1
shuru:
;开门复位
movmmbz,#03;错误密码次数
movat1,#00h
movat2,#00h
movat3,#00h
movat4,#00h
shuru2:
clrp0.6
mova,#00h;密码缓存
movr2,#04h;四位密码
movr1,#00h
movr0,#at1
movr7,#05h
start1:
jbp2.4,start1
lcalldelay500ms
jbp2.4,start1
ok1:
;滴音
setbp3.0;开门后再按键1t以上关门
setbp0.6
clrp0.0
lcalldelay500ms
jnbp2.4,daaa
cun1:
setbp0.2
setbp0.0
rla
adda,r1
djnzr7,yanshi1
ajmpxianshi1
yanshi1:
;每个摩斯码之间延时1t
lcalldelay500ms
jbp2.4,stop1
ajmpok1
daaa:
;嗒音
lcalldelay500ms
jbp2.4,stop1
setbp0.0
clrp0.2
lcalldelay500ms
setbp0.2
jnbp2.4,stop1
movr1,#01h
ajmpcun1
stop1:
;摩斯码错误处理
clrp0.4
lcalldelay2s
setbp0.4
ajmpshuru2
cunchu2:
mov@r0,a
incr0
mova,#00h
movr1,#00h
movr7,#05h
djnzr2,yanshi1
ajmpbijiao
xianshi1:
;显示处理
cjnea,xs_0,next1_1
movp1,#0c0h
clrp3.2
lcalldelay1s
setbp3.2
movp1,#0ffh
ajmpcunchu2
next1_1:
cjnea,xs_1,next2_2
movp1,#0f9h
clrp3.2
lcalldelay1s
setbp3.2
movp1,#0ffh
ajmpcunchu2
next2_2:
cjnea,xs_2,next3_3
movp1,#0a4h
clrp3.2
lcalldelay1s
setbp3.2
movp1,#0ffh
ajmpcunchu2
next3_3:
cjnea,xs_3,next4_4
movp1,#0b0h
clrp3.2
lcalldelay1s
setbp3.2
movp1,#0ffh
ajmpcunchu2
next4_4:
cjnea,xs_4,next5_5
movp1,#99h
clrp3.2
lcalldelay1s
setbp3.2
movp1,#0ffh
ajmpcunchu2
next5_5:
cjnea,xs_5,next6_6
movp1,#92h
clrp3.2
lcalldelay1s
setbp3.2
movp1,#0ffh
ajmpcunchu2
next6_6:
cjnea,xs_6,next7_7
movp1,#82h
clrp3.2
lcalldelay1s
setbp3.2
movp1,#0ffh
ajmpcunchu2
next7_7:
cjnea,xs_7,next8_8
movp1,#0f8h
clrp3.2
lcalldelay1s
setbp3.2
movp1,#0ffh
ajmpcunchu2
next8_8:
cjnea,xs_8,next9_9
movp1,#80h
clrp3.2
lcalldelay1s
setbp3.2
movp1,#0ffh
ajmpcunchu2
next9_9:
cjnea,xs_9,cw2
movp1,#90h
clrp3.2
lcalldelay1s
setbp3.2
movp1,#0ffh
ajmpcunchu2
bijiao:
;比较密码
movr6,#04
movr1,#ps1
movr0,#at1
bj2:
clrc
mova,@r0
subba,@r1
cjnea,#00h,cw2
incr1
incr0
djnzr6,bj2
clrp3.2;密码正确
clrp3.0
lcalldelay5s
setbp3.2
ajmpshuru
cw2:
;密码错误处理
djnzmmbz,bjd
movp0,#00h
clrp3.2
lcalldelay5min
setbp3.2
movp0,#0ffh
ajmpshuru2
bjd:
movp0,#00h
clrp3.2
lcalldelay5s
setbp3.2
movp0,#0ffh
ajmpshuru2
delay500ms:
movhc0,#05
ff1:
movhc1,#200
fff1:
movhc2,#250
djnzhc2,$
djnzhc1,fff1
djnzhc0,ff1
ret
delay1s:
movhc0,#10
ff2:
movhc1,#200
ff3:
movhc2,#250
djnzhc2,$
djnzhc1,ff3
djnzhc0,ff2
ret
delay2s:
movhc0,#20
ff4:
movhc1,#200
ff5:
movhc2,#250
djnzhc2,$
djnzhc1,ff5
djnzhc0,ff4
ret
delay5s:
movhc0,#50
ff6:
movhc1,#200
ff7:
movhc2,#250
djnzhc2,$
djnzhc1,ff7
djnzhc0,ff6
ret
delay5min:
movhc0,#12
qq1:
movhc1,#200
qq2:
movhc2,#250
qq3:
movhc3,#250
djnzhc3,$
djnzhc2,qq3
djnzhc1,qq2
djnzhc0,qq1
ret
end
电路特色:
本电路只有两个按键,一个为复位键(修改密码键),一个为密码键,密码键根据其按下的长短来实现“滴”“嗒”。
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代替电源方便调试。
但电路均能正常工作,程序一样,不便之处敬请原谅)
本实物图状态为等待输入密码进行比较开锁
对本电路有任何疑问请与本人联系!
程序如下:
hc0equ4ah;延时缓存区
hc1equ4bh
hc2equ4ch
hc3equ4dh
hc4equ4eh
xs_0equ50h;显示缓存区
xs_1equ51h
xs_2equ52h
xs_3equ53h
xs_4equ54h
xs_5equ55h
xs_6equ56h
xs_7equ57h
xs_8equ58h
xs_9equ59h
ps1equ5ah;设置密码缓存区
ps2equ5bh
ps3equ5ch
ps4equ5dh
mmbzequ5fh;密码输入次数
at1equ60h;输入密码缓存区
at2equ61h
at3equ62h
at4equ63h
;初始化
org00h
ajmpmain1
org30h
main1:
movps1,#00h
movps2,#00h
movps3,#00h
movps4,#00h
movat1,#00h
movat2,#00h
movat3,#00h
movat4,#00h
main:
movxs_0,#1fh;显示0的摩斯值
movxs_1,#0fh;显示1的摩斯值
movxs_2,#07h;显示2的摩斯值
movxs_3,#03h;显示3的摩斯值
movxs_4,#01h;显示4的摩斯值
movxs_5,#00h;显示5的摩斯值
movxs_6,#10h;显示6的摩斯值
movxs_7,#18h;显示7的摩斯值
movxs_8,#1ch;显示8的摩斯值
movxs_9,#1eh;显示9的摩斯值
clrp3.0
mova,#00h;密码缓存
movr2,#04h;四位密码
movr1,#00h
movr0,#ps1
movr7,#05h;摩斯次数,由于数字为5次
clrp2.7
start:
movp0,#0ffh
movp1,#0ffh
setbp2.4;按键位
jbp2.4,start
lcalldelay500ms
jbp2.4,start
ok:
;嘀的音
clrp0.0
lcalldelay500ms
jnbp2.4,daa;是否去嗒音
cun:
;
setbp0.2
setbp0.0
rla
adda,r1;存入一位摩斯码
djnzr7,yanshi;是否够五位摩斯码
ajmpxianshi
yanshi:
;输入一位摩斯码停顿1t
lcalldelay500ms
jbp2.4,main
ajmpok
daa:
;嗒的音
lcalldelay500ms
jbp2.4,stop
setbp0.0
clrp0.2
lcalldelay500ms
setbp0.2
jnbp2.4,stop
movr1,#01h
ajmpcun
stop:
;摩斯输入错误
clrp0.4
lcalldelay2s
setbp0.4
ajmpmain
cunchu:
mov@r0,a
incr0
mova,#00h
movr1,#00h
movr7,#05h
djnzr2,yanshi
clrp0.6
lcalldelay2s
setbp0.6
ajmpshuru
xianshi:
cjnea,xs_0,next1;够五位摩斯码显示0
movp1,#0c0h
clrp3.2;报警器
lcalldelay1s
setbp3.2;报警器
movp1,#0ffh
ajmpcunchu
next1:
cjnea,xs_1,next2;够五位摩斯码显示1
movp1,#0f9h
clrp3.2
lcalldelay1s
setbp3.2
movp0,#0ffh
ajmpcunchu
next2:
cjnea,xs_2,next3;够五位摩斯码显示2
movp1,#0a4h
clrp3.2
lcalldelay1s
setbp3.2
movp1,#0ffh
ajmpcunchu
next3:
cjnea,xs_3,next4;够五位摩斯码显示3
movp1,#0b0h
clrp3.2
lcalldelay1s
setbp3.2
movp1,#0