莫尔斯电码翻译器的设计

摘 要

摩尔斯电码在世界上的位置曾一度的被刷新,他简单的像个孩子,只有点与线。却被誉为永不消逝的电波。摩尔斯电码在上世纪五六十年代无线电历史上曾扮演着中流砥柱的角色,几乎每个从事通讯工作的人都知道的。由于随着通讯技术之进步,摩尔斯码全世界已于1999年全部停止使用,不过因为它所占的带宽是最少的,同时又包揽技术与艺术的特性,直到现在的生活中还是处处可见[1]。
基于单片机的摩尔斯电码翻译器系统, 是紧紧围绕单片机系统来工作的,论证中采用了Intel公司的89C52作为控制核心[6] 以单片机89C52为核心结及外围电路以实现对模拟输入的摩尔斯电码进行翻译并且由单片机驱动一块1602液晶显示器来显示翻译出信息。根据摩尔斯电码翻译器的功能效率要求,从功能要求、硬件设计、软件设计三个方面描述了一个以51单片机为核心的摩尔斯电码翻译系统。硬件线路及控制程序的设计是该系统的重要 组成部分。本文围绕摩尔斯电码翻译系统的硬件和软件进行设计,设计了一个简单可行的摩尔斯电码翻译系统,包括模拟信号的转化,模数转换,跟踪速度,编码翻译,显示等功能。硬件线路设计主要包括电键电路、中央处理器、摩尔斯电码显示、蜂鸣器。软件部分设计主要包括主函数、外部中断函数的设计[11]
关键词:单片机,摩尔斯电码,翻译器 ,二进制

Morse code Translate
Author : Ren Shaohua
Tutor : Wang Yuqiao
Abstract
Morse’s position in the world once he was refreshed, simple like a child, only the points and lines. But as the radio waves never. Morse code radio play a decisive role in the early on, each of the radio communication is required to know. Due to communication, technology progress, all countries agreed in 1999 to stop using Morse code, but because it accounts for at least the characteristics of bandwidth, and a technology and art, with the wide application of [1] in real life.Morse code translator system based on single chip microcomputer system to focus on work, this design uses Intel’s 89C52 as the control core of [6] (the development of this paragraph references references of sixth MCU), based on 89C52 microcontroller as the core chip bonding interface and peripheral circuit to realize the Morse code for analog input the translation and the single-chip drives a 1602 LCD display to the translation of information. According to the requirements of the functional efficiency of Morse code interpreter, requirements, hardware design and software design three aspects of one to 51 single-chip microcomputer as the core of the Morse code translation system is described from the function. The design of hardware circuit and the control program is an important part of the system. This paper focuses on the design of the Morse code translation software and hardware of the system, designed a simple and feasible Morse code translation system, including analog signal conversion, analog to digital conversion, the tracking speed, code translation, display and other functions. Hardware circuit design includes power, function and control system, the Morse code display. Control program design mainly includes the design of [11] main program, external interrupt service program (see reference eleven articles from the control system).
Keywords: single chip microcomputer, Morse code, STC89C52, translation

目 录

1绪论 1
1.1 课题背景及意义 1
1.2 莫尔斯电码的特点 2
1.3 STC51单片机特点 2
1.4 单片机特殊领域的应用 3
1.5摩尔斯电码翻译器对个人的意义 4
1.6电码翻译器对社会的意义 4
2系统设计的方案论证及选择 6
2.1方案论证与比较 6
2.1.1 拍报电键的选择 6
2.1.2 模数转换电路选择 6
2.1.3 控制器模块的选择 6
2.2 方案配置与计算 7
3 系统设计的理论依据 8
3.1系统设计总体分析 8
3.2信号采集质量分析 8
4 系统硬件电路的设计 10
4.1 系统硬件电路原理框图 10
4.2电源电路 10
4.3复位电路 11
4.4时钟电路 11
4.5按键电路 12
5 系统软件部分的设计 13
5.1 系统软件框图 13
6 系统调试 13
6.1软件调试 14
6.2硬件及总体电路调试 14
6.3系统改进方案 14
结 论 15
致 谢 16
参考文献 17
附 录 18
附录A 原理图 18
附录B PCB图 19
附录C 实物图 20

1绪 论

1.1 课题背景及意义
随着科技的发展各种电子产品的发展可谓是层出不穷,特别是通讯设备无论是民用还是军事,航天等各个领域都无所不在的高速更新,里我们最近的手机就可以看出发展之快真是日新月异,通讯设备的换代虽然很快,但万变不离其中,他们的原理还是很相像的。莫尔斯电码无非是他们几个当中最具有代表性和最经典的。摩尔斯电码[10表达英文字母、数字和标点符号靠的是时通时断的信号代码通过不同的排列顺序。在1837年一个叫艾尔菲德•维尔于的美国人发明了它。 摩尔斯电码[3]是一种早期化的数字化通信形式,但是它不同于现代数字通信电路中的0和1两种电平状态的二进制字两种电平在时间上长短上是一样的而莫尔斯电码不一样它由各种不同长短的点与线以不同的组合,在它的代码包括五种: 点、划、点与划之间的停顿、而每个字符间短的停顿(在点和划之间)、每个词之间的小停顿以及句子之间长的停顿。
刚开始了解这些东西,像小蚂蚁一样参差不齐或许不是太和谐。大家一定会有诸多疑问。摩斯密码究竟是什么东西?那么,我先简单介绍一下,摩斯电码是类似信号的传播。就像在茫茫的大海上间歇性的鸣笛也可以被用来传播Morse代码,如果按照不同的鸣笛频率来进行辨别,不难得出,它所含有的意义的就可以不依靠其他任何东西进行通讯了。假如我们在飞机上,看到地面海滩的水面上有一闪一闪的火光,我们就有必要仔细识辨别一下了。假如我们看到火光顺序是按照“短亮 、短亮 、短亮 、长亮、长亮、长亮、短亮、短亮、短亮”这个规律来闪动的话,那么它所代表的意思就是全球通用求救信号SOS。对了。“短亮暗、短亮、暗、短亮、暗”代表字母S,“长亮、暗、长亮、暗、长亮暗”则代表字母O。根据信号规律和莫尔斯电码列表,就可以得出就是SOS!
怎么样?是不是很神奇。这就是最原始的数字通信,他让我们在很长一段时间沉浸在这项伟大的创举中,它主导了18世纪和19世纪的通信,主导第二次世界大战。直到现在莫尔斯电码还穿插在我们的生活中的方方面面,被无数人喜爱被无数人视为经典,被无数人称作永不消失的电波。
而单片机控制器,我们已经很熟悉了,作为我们最熟悉最长用的控制器来书他的应用领域在此也被创新,这就是单片机特殊领域的应用。要的研究课题,最终应用于各个领域。
1.2 莫尔斯电码的特点
因为摩尔斯仅仅依靠一个简单的电平的无线电信号,所以它的通讯设备要比其他的通讯设备简单的多还省电的多,就拿手机来对比噪声大的比较吵的地方你必须堵住耳朵才能交流,还不一定能听清因为其他人比你的声音要吵。而莫尔斯就不一样了,再大再吵的环境丝毫不会影响他的通讯质量。也只能工作在一个很窄的带宽,并且还可以帮助两个本机语言不同,会遇到运营商之间很大的困难沟通交流。
美国1999年之前,以25WPM技能水平,以获得的业余无线电证书(额外)的最高水平; 1999年12月13日,FCC把13wpm这个要求作为业界唯一的要求。
尽管美国和加拿大都写下来,但在其他一些国家正准备彻底去除这个要求。
熟练的军事爱好者和经营者通常可以接收(复印件)40WPM比摩尔斯电码的速度。虽然传统键控仍有许多爱好者在使用,但在今天的半自动和全自动电子键控器或电脑键盘使用越来越广泛。该计算机软件也越来越多地被用于生成和解码莫尔斯电码的无线电信号。
1.3 STC51单片机特点
VCC:供电电压。
GND:接地。
P0口:单片机的P0口是比较常用的一个8位漏极开路俗称三态们的全双工I / O端口,每个引脚可以吸收20ma左右的电流。
P1口:P1口内部有上拉电阻,其他的跟P0一样的。
P2:也是比较常用的口,大家常用它来检测键盘,等什么的作为输入口,不过这里要说一下,尽管大家这样用,它还是一个标准的IO不是单向的这一点很明确。
P3口:P3口也是有8个引脚,但是他的8个引脚可以有第二功能的。比如,
RST:这是单片机的复位端当9脚接收到一个由低到高的电平持续超过2MS的时候单片机就会复位。

其他的不会经常用到这里就不在过多解释了。
XTAL1:接晶振。
XTAL2:接晶振的另一端逆过程。
供应链管理的独特结构决定了它具有以下特点[8]。
(1)单片机程序指令常数和形式固化在ROM和不容易被损坏,许多信号传导途径是在一个芯片上,因此可靠性高。
(2)强大的控制功能,以满足对象的控制要求,单芯片的指令系统有非常丰富的条件:转移能力,I / O逻辑运算和处理能力的港口,非常适合专业的控制功能。
(3)低电压,低电流的满足。它已被广泛应用于便携式系统中,许多单片电压只有1.8V〜3.6V,工作电流仅为数百微安,耗电极少的。
(4)优异的性能价格比单片机的性能更高。
为了提高单片机的速度和效率,已开始采用DSP技术标准[9]。 MCU的处理能力已经超过了64KB的限制,许多可以达到1MB和16MB的片上ROM容量可达到62MB,最高可达2 MB的RAM容量。由于广泛使用的MCU,各大公司企业的竞争使得价格非常低,性价比高的国产宏晶科技,生产STC单片机最常用的功能强大拥有极高的性价比。
1.4 单片机特殊领域的应用
单片机被业界誉为体积最小的计算机。许多电子方面的设计者的很喜欢和支持它是因为有小、全、通俗易懂好上手、造价便宜、开发简单方便的优势,它特别适合于长时间在线控制,又可构成简单的工业控制器、精密仪器、接口协议驱动、航空航天装置,农业自动化,汽车电子,教学仪器,医疗器具,家用电器等。作为一个好用不贵的中央处理器,单片机被大面积应用在各种数字系统,模拟系统,准数字系统中 [2]。使用单片机控制的电子产品不仅使用方便,而且善解人意,大大提高了人们的计算水平,已成为大家追捧的偶像,也已渐渐被中国的广大电工所接受认识。因此,在不久的将来单片机特殊领域的应用有着极其广泛的前景。
在这里,对于初学者澄清单片机在实际使用的产品概念,直到现在,MCS-51系列的内核兼容的单片机,主流产品仍然是使用(如流行的80S51,和过时的89C51等),地方高校和专业学校的教学与MCS-51系列单片机作为学习的理论基础的代表性。
基于单片机的摩尔斯电码翻译系统是单片机应用的一个很精妙的例子。它将传统摩尔斯电码和现代微电子技术进行一个很好的结合,对基于单片机的摩尔斯电码翻译系统设计进行深入研究,可使我们掌握摩尔斯电码翻译器的工作原理和控制系统,进一步了解单片机在特殊领域的应用方法,学会摩尔斯电码翻译器基本设计要领,同时也为将来从事电子信息行业打下一定基础,所以本题课具有重大的意义。

1.5摩尔斯电码翻译器对个人的意义
摩尔斯电码翻译器是一个经典的电子设备,尽管它的科技含量不高,但都代表着人们最经典的创造。它将人们之间的交流变得极其简单,而高效。对自己而言这可以充分认识和学习摩尔斯电码的应用和组成。另外可以熟悉单片机的工作原理,和特殊应领域的应用[7]。让一个简单串行数据的输入设备。可以从另一个角度近距离的认识模拟信号和数字信号。作为信号较为原始的形态,莫尔斯翻译器会帮助充分认识这个经典的信号,对个人而言第一次和信号有着这么近的亲密接触。也有助你了解信号的组成对今后从事信号更深层的研究有着很大的帮助。对个人的进步是有很大的帮助的,小小翻译器,简单的密码就可以承载着巨大而简单的信息,一定会让人爱不释手,带在身边,让这个小小的翻译器和莫尔斯陪伴左右。

1.6电码翻译器对社会的意义
电码翻译器让更多的人认识摩尔斯电码,并且掌握这种古老的语言。在灾难中,危机情况下可以救自己、亲人。另外熟悉摩尔斯电码翻译器可以。摩尔斯电码在我们的现代生活中好像并不常见,其实仔细观察却处处发挥着它膜厚的作用,黑夜中一只手电筒在安静的夜里就可以交流信息。好莱坞电影里也经常出现这些镜头。有顺序的敲击墙壁就可以给同伴发送信息。最经典的莫过于星际穿越中如果你懂得什么是摩尔斯电码?你就会觉得很有意思。如果不懂也只能看热闹了。你错过了什么?
2008年的汶川大地震震撼了世人,对中华民族是一次巨大的灾难,震后通讯设施一度被破坏手机、电话、网络,这些20世纪最成功的通讯方式却由于基站被毁光缆断裂儿失去了效果。滇藏地形一夫当关万夫莫开通讯车也失去了效果。这是全世界的业余无线电爱好者自发做成了通讯团队,靠着这简单的点与线硬是建立起了一条绿色通讯通道。这件事虽然过去很久但我们无时无刻的不在感动着,也充分证明了莫尔斯电码翻译器的意义之大。

2系统设计的方案论证及选择

2.1方案论证与比较

莫尔斯电码翻译器构架主要包括电键、处理器,显示单元、供电电源等,其组成框图如图2.1所示。
在这里插入图片描述

图2.1 莫尔斯电码翻译器系统组成框图
2.1.1 拍报电键的选择
电键就是莫尔斯电码翻译器的输入设备,就像电脑的键盘一样,能够将要发送的信息输入进去机器,不同的是它只有一个按键,所有的信息都是靠着这个按键表达,所以这就要求它有充分的机械强度,和良好的弹性。这里由于条件的限制由按键开关代替具体就是按一下送给模数转换设备一个低电平。如图2.2所示
在这里插入图片描述

图2.2按键电路原理图
2.1.2 模数转换电路选择
由于电键输入的特点,其输出特性的要求,这里只需要一个简单的模数转换系统而不需要专门的多位模数转换器,这也体现了器件的选择要求和系统设计的成本严谨。
2.1.3 控制器模块的选择
STC89C52单片机,是我最常用而且喜欢用的单片机,身边朋友也都是用它,大家都说好。不是它有多强大,第一:它很便宜,商场价格5.8元,淘宝3.8元。大家都用得起。而且又是DIP封装好焊接也不容易弄坏,第二:网上介绍这款单片机的资料最多,而且其中大部分都是免费的,很好学习上手。第四:宏晶科技的官网罪的特别好资料全不花哨,列出的都是最实用的东西。这款单片机对于初学者来说已经大大满足他们的需求了。而且他的性能在同行业中,已经是很不错的成绩,而被越来越多的人接受,熟悉,了解。据说他能下载1000次左右。数据能保留十年,够用了。他的性能就不在过多介绍,其引脚分配如图2.2所示。
在这里插入图片描述

图2.2 AT89C51芯片管脚
由于个人对AT89C51比较熟悉,又考虑到运行、维护成本,性价比以及系统可靠性,因此选择此款芯片。
2.2 方案配置与计算
既要确保系统工作的正常与稳定,又要计算性价比,所以在设计的过程中对于器件的选择,电路的巧用要涉及的比较多,同时也要充分考虑他的必要性。

3 系统设计的理论依据

3.1系统设计总体分析
摩尔斯电码翻译器由电键产生5V电平信号送入有LM339组成的电压跟随器进行模数转换,然后由单片机对时序进行分析然后对比字母表,然后送入1602液晶显示出来,同时时序信号转变为蜂鸣器的响声表现信号的长短输入。如图3.1
在这里插入图片描述

图3.1 A\D转换图

3.2信号采集质量分析
利用单片机的中断系统对莫尔斯电码的长短进行分析,由AD转换电路转换过来的信号是一个很好的方波故完全可以利用中断进行采集。同时对单片机的速度要求不是很高可以留下更多时间去驱动液晶显示让其有更高的灵敏度和更小的反应时间如图3.2波形
在这里插入图片描述

图3.2交替按键产生的波形

4 系统硬件电路的设计

4.1 系统硬件电路原理框图
硬件采用单片机89C51进行控制,A/D转换器采用LM393,都是考虑到既经济又实用的原因[5]。本设计不但在理论上实现,又能做出实际的翻译系统,是本设计的又一惊喜之处。利用它就可以畅游在点和线的电波之中。如图4.1电键的采集采用机械电键,模数转换采用跟随器,控制器对比采用列表法,蜂鸣器用喇叭代替。

在这里插入图片描述

图4.1 系统硬件电路原理框图

4.2电源电路
系统由12V供电,+12V电压经过三端稳压器78L05稳压后输出稳定的+5V电压,作为整个系统的主电源。电容C6、C7作为滤波电容,将高频信号旁路到地,电流产生的阻抗噪声。同样电容C4、C5为滤波电容,可以完美的去除掉电源上出现的杂波。如图4.2所示。

在这里插入图片描述

图4.2 电源稳压电路
4.3复位电路
复位电路的基本功能是:系统上电时让单片机的第九脚有一个持续一段时间的高电平来作为复位信号,直到整个电路电源稳定后,停止高电平。在时钟电路正常时,一但在单片机 (RST)脚上出现24个时钟脉冲以上的高电平,单片机便启动初始化状态。故,要想保证mcu能够可靠的复位,在实际系统的电路设计中,就要使第九脚引脚保持10ms以上的高电平,使单片机能循环到复位状态。如图4.3所示。

在这里插入图片描述

图4.3复位电路

4.4时钟电路
时钟电路是为单片机提供步调的内置电路,他的基本功能是用于执行程序、提供时钟周期。时钟端XTAL1、XTAL2及12MHz晶振、瓷片电容30P两个组成,为单片机提供时钟周期信号。如图4.4所示。
在这里插入图片描述

图4.4 晶振电路
4.5按键电路
电键电路由于经济原因由一个按键开关代替,拖过长短按键输入长短低电平再有电容滤去高频杂波输入到模数转换电路。如图4.5所示。
在这里插入图片描述

图4.5 电键输入电路

5 系统软件部分的设计

5.1 系统软件框图
系统主程序包括初始化、循环,中断,功能子程序等。流程图如图5.1所示。

在这里插入图片描述

图5.1 主程序流程图

6 系统调试

6.1软件调试
本设计程序采用的是C语言编写程序,利用宏晶科技的下载器烧录调试软件配合所设计的硬件电路进行系统的调试。根据硬件设计要求,控制显示器显示、蜂鸣器发声。

6.2硬件及总体电路调试
根据自己用AD设计的原理图用三氯化铁腐蚀法制作的电路板,插上器件,通过两天两夜焊接完成后,把程序烧写到单片机中,把芯片插到电路中,接入12V源,打开开关系统正常工作,一次成功。首先映入眼帘的是设置项,LED显示屏显示“”如果没有操作就自动跳转到下一个设置项,这时通过按键可以调节发报速度。然后蜂鸣器响起LED小灯开始按照声音闪烁。还可以通过调节电位器调节声音大小。当显示屏幕显示光标一闪一闪时候则是准备工作已经做好。可以正常发报了。
6.3系统改进方案
在本设计中,首先存在不足的是莫尔斯电码的长按与短按不能有个很清晰的适应,只能人为地凭感觉去感受长和短。这样的话就会影响发报速度,没有很好的普适性。还有就是断电后不能保存电码,还要重新发送接收也是一样所以它具有很强的瞬时性。这给使用者会带来很大的不便。改进方案:可以增加单独芯片处理器采集发报者的速度在应用到识别中的时间段,就可以保证自适应了。对于存储,则可以增加EPROM存储代码可以翻阅和删除。这样这个设计就更加完美了,等答辩完之后。我走上工作岗位业余时间我还是要完成这些功能让他变得更加完美。

结 论

本文通过对莫尔斯电码翻译器的背景和结构以及社会意义等方面阐述了莫尔斯电码翻译器被制作的原因和必要,又从他的结构组成电路系统,细说了莫尔斯电码翻译器的工作原理,根据本文摩尔斯电码翻译器既有硬件设计又有软件编程,实现莫尔斯电码翻译已经不是什么困难的事情了,一个电键就可以采集完成代码翻译的全过程。让我们感受到了科技与艺术相结合带来的好处和惊喜。让我们从一个从来没有的角度去了解了信号。
通过我的近三个月的辛勤劳动,终于向我的学校地上了一个满意的答卷,和一个近乎完美的作品,而且这三个月我体会到了大学期间的真正的学下是要靠双手的而不是以为的看自己的课本,这样子也不会有今天的成绩也不会做出我的翻译器作品,学习知识是用来用的创造的而不是用来考试的。在这次设计当中能将以前所学习的专业知识进一步理解,学以致用。并且查阅了很多资料和文献,咨询了很多认识的老师同学,扩增了知识面,增多了经验。这不再是一个毕业设计而是我的一次尝试一次自我的尝试。再次感谢所有给我知识的人!

致 谢

在王玉巧导师的精心指导和严格要求下我才得以完成此文,从课题选择、方案论证到具体设计,王玉巧老师都始终给予我亲切关怀和悉心指导。在本次设计过程中,王玉巧不仅在科研上积极引导和指导我,而且还在思想和生活上热心帮助和关怀我。她严肃务实的科学态度、严谨认真的治学精神、精益求精的工作作风、时刻忘我的工作热情,以及对学科前沿方向敏锐的洞察力和判断力都深深感染我,使我受益匪浅,借此机会特向王玉巧老师致以诚挚的谢意和崇高的敬意!
同时还要感谢肜瑶、李文芳、王照平等几位老师在毕业设计给予我的无私帮助,感谢实验中心领导,还有吴亮、马绿野、王涛等同学,在设计的过程中也给予我很多帮助,这份难得的友谊我将永远铭记在心!再次感谢院系老师给我的指导和帮助!
本文参阅大量国内外资料,未能一一列出,借此特向所参考著作和文献的作者表示衷心的感谢!
特别感谢这些年来默默支持我的父母和大姐!

参考文献

[1] 孙小美,永不消失的电波[M],北京:北京科技月报1998,1-10。
[2] 杨素行,模拟电子技术基础简明教程[J],北京:高等教育出版社,1998, 100-105,
[3] 杨颂华,冯毛官,孙万蓉,胡力山,数字电子技术基础[M],西安:西安电子科技大学出版社,2000.,134-145.。
[4] 清源计算机工作室,Protel99se原理图与PCB及仿真[J],北京:机械工业出版社,2004, 56-58.。
[5] 谭浩强,C语言程序设计[N],北京:清华大学出版社,2004,57-100。
[6] 刘宝琴,许海根.数字电路与系统[M],北京:清华大学出版社,1993, 12-13。
[7] 赵学泉,张国化,新型电子电路应用指南[M],北京:电子工业出版社,1995, 189-192。
[8] 余孟尝,数子电子技术基础简明教程[N],北京:高等教育社,2005,163-167。
[9] 马威,摩尔斯电码编码系统[J],解放军炮兵学院出版社,2007,43-96。
[10] 蔡佳,摩尔斯电码[R],人民教育出版社,2008,32-34。
[11] 蒋力培,单片机微机系统实用教程[M],北京:机械工业出版社,2007, 192~200。
[12] Rudolf F.Grafthe Encyclopedia of Electronic Circuits[A].Tab Books Inc.1985. 139-143.
[13] D.Roy Choudhury and Shail Jain.Linear Integrated Circuits[M].New Yoyk:John wiley and Sons Inc.1991. 123-130.

附 录
附录A 原理图
在这里插入图片描述

附录B PCB图
在这里插入图片描述

附录C 实物图
在这里插入图片描述

附录D 源程序
#include <reg52.h>
#include <stdlib.h>
#include <string.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

sbit E=P2^7; //1602使能引脚
sbit RW=P2^6; //1602读写引脚
sbit RS=P2^5; //1602数据/命令选择引脚

void delay()
{
nop();
nop();
nop();
nop();
nop();
}

void Delay(uint i)
{
uint x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/********************************************************************

  • 名称 : bit Busy(void)
  • 功能 : 这个是一个读状态函数,读出函数是否处在忙状态
  • 输入 : 输入的命令值
  • 输出 : 无
    ***********************************************************************/
    bit Busy(void)
    {
    bit busy_flag = 0;
    RS = 0;
    RW = 1;
    E = 1;
    delay();
    busy_flag = (bit)(P0 & 0x80);
    E = 0;
    return busy_flag;
    }
    void wcmd(uchar del)
    {
    while(Busy());
    RS = 0;
    RW = 0;
    E = 0;
    delay();
    P0 = del;
    delay();
    E = 1;
    delay();
    E = 0;
    }

void wdata(uchar del)
{
while(Busy());
RS = 1;
RW = 0;
E = 0;
delay();
P0 = del;
delay();
E = 1;
delay();
E = 0;
}

/********************************************************************

  • 名称 : L1602_init()
  • 功能 : 1602初始化,请参考1602的资料
  • 输入 : 无
  • 输出 : 无
    ***********************************************************************/
    void L1602_init(void)
    {
    wcmd(0x38);
    Delay(5);
    wcmd(0x38);
    Delay(5);
    wcmd(0x38);
    Delay(5);
    wcmd(0x38);
    wcmd(0x08);
    wcmd(0x0c);
    wcmd(0x04);
    wcmd(0x01);
    }

void L1602_char(uchar hang,uchar lie,char sign)
{
uchar a;
if(hang == 1) a = 0x80;
if(hang == 2) a = 0xc0;
a = a + lie - 1;
wcmd(a);
wdata(sign);
}

void L1602_string(uchar hang,uchar lie,uchar *p)
{
uchar a,b=0;
if(hang == 1) a = 0x80;
if(hang == 2) a = 0xc0;
a = a + lie - 1;
while(1)
{
wcmd(a++);
if((*p == ‘\0’)||(b==16)) break;
b++;
wdata(*p);
p++;
}
}

/********************************************************************

  • 名称 : Main()
  • 功能 : 主函数
  • 输入 : 无
  • 输出 : 无
    ***********************************************************************/
    void Main()
    {
    Delay(30);
    L1602_init();
    L1602_string(1,1," “);
    L1602_string(2,1,” ");
    L1602_char(1,1,‘‘);
    L1602_char(1,16,’
    ’);
    while(1);
    void show_intwords(1,2,“morse code play YES DOWN KEY m?”)
    Delay(30);
    void show_intwords(1,2,“sound ….---- Program----….”)

}
void show_words(char *p)
{
int code;
if(!strcmp(p,“.-”))printf(“A”);
if(!strcmp(p,“-…”))printf(“B”);
if(!strcmp(p,“-.-.”))printf(“C”);
if(!strcmp(p,“-…”))printf(“D”);
if(!strcmp(p,“.”))printf(“E”);
if(!strcmp(p,“…-.”))printf(“F”);
if(!strcmp(p,“–.”))printf(“G”);
if(!strcmp(p,“…”))printf(“H”);
if(!strcmp(p,“…”))printf(“I”);
if(!strcmp(p,“.—”))printf(“J”);
if(!strcmp(p,“-.-”))printf(“K”);
if(!strcmp(p,“.-…”))printf(“L”);
if(!strcmp(p,“–”))printf(“M”);
if(!strcmp(p,“-.”))printf(“N”);
if(!strcmp(p,“—”))printf(“O”);
if(!strcmp(p,“.–.”))printf(“P”);
if(!strcmp(p,“–.-”))printf(“Q”);
if(!strcmp(p,“.-.”))printf(“R”);
if(!strcmp(p,“…”))printf(“S”);
if(!strcmp(p,“-”))printf(“T”);
if(!strcmp(p,“…-”))printf(“U”);
if(!strcmp(p,“…-”))printf(“V”);
if(!strcmp(p,“.–”))printf(“W”);
if(!strcmp(p,“-…-”))printf(“X”);
if(!strcmp(p,“-.–”))printf(“Y”);
if(!strcmp(p,“–.”))printf(“Z”);
if(!strcmp(p,“-----”))printf(“0”);
if(!strcmp(p,“.----”))printf(“1”);
if(!strcmp(p,“…—”))printf(“2”);
if(!strcmp(p,“…–”))printf(“3”);
if(!strcmp(p,“…-”))printf(“4”);
if(!strcmp(p,“…”))printf(“5”);
if(!strcmp(p,“-…”))printf(“6”);
if(!strcmp(p,“–…”))printf(“7”);
if(!strcmp(p,“—…”))printf(“8”);
if(!strcmp(p,“----.”))printf(“9”);
}

void handle_morse_code(char s)
{
char tmp[6];
int len;
int x,y,p;
len = strlen(s);
y = 0;
for(x=0;x<len+1;x++)
{
if( s[x] == ‘_’ || s[x] == ‘.’ || s[x] == ‘-’ || s[x] == '
')
{
if(y==0)
{
p=x;
}
if(s[x] == ‘_’)
{
s[x] = ‘-’;
}
else if(s[x] == ‘*’)
{
s[x] = ‘.’;
}
y++;
if(y>5)
{
printf(“your morse code is wrong!\n”);
return ;
}
Else;

}
else
{

memcpy(tmp,s+p,y);
tmp[y] = ‘\0’;
show_words(tmp);
memset(tmp,0,6);
y=0;
}
}
}

int main()
{
char buf[512];
while(1)
{
printf(“input EXIT to exit:\n”);
printf(“please input morse code:\n”);
fgets(buf,512,stdin);
if(!memcmp(buf,“EXIT”,4))
{
return 0;
}
printf(“------------------------\n”);
handle_morse_code(buf);
printf(“\n------------------------\n”);
}
return 0;
}
}

  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
莫尔斯电码是一种用于发送电报的编码方式,其中字母和数字被编码成长短不同的信号,例如点和划线。如果您想在MATLAB中生成莫尔斯电码,可以按照以下步骤进行: 1. 定义莫尔斯电码的字母和数字对应的编码方式。例如,字母A的莫尔斯电码为“.-”,数字1的莫尔斯电码为“.----”。 2. 将需要转换为莫尔斯电码的本分解成单个字符。 3. 将每个字符转换为其莫尔斯电码等效项,例如“-”和“.”。 4. 将每个字符的莫尔斯电码等效项连接起来,以形成完整的莫尔斯电码序列。 以下是一个简单的MATLAB代码示例,用于将字符串“HELLO WORLD”转换为莫尔斯电码: ```matlab % 定义莫尔斯电码字母和数字对应的编码方式 morseCode = struct('A', '.-', 'B', '-...', 'C', '-.-.', 'D', '-..', 'E', '.', 'F', '..-.', 'G', '--.', 'H', '....', 'I', '..', 'J', '.---', 'K', '-.-', 'L', '.-..', 'M', '--', 'N', '-.', 'O', '---', 'P', '.--.', 'Q', '--.-', 'R', '.-.', 'S', '...', 'T', '-', 'U', '..-', 'V', '...-', 'W', '.--', 'X', '-..-', 'Y', '-.--', 'Z', '--..', '0', '-----', '1', '.----', '2', '..---', '3', '...--', '4', '....-', '5', '.....', '6', '-....', '7', '--...', '8', '---..', '9', '----.'); % 要转换的字符串 text = 'HELLO WORLD'; % 将字符串转换为大写形式 text = upper(text); % 将每个字符转换为莫尔斯电码等效项 morseText = cell(size(text)); for i = 1:length(text) if isfield(morseCode, text(i)) morseText{i} = morseCode.(text(i)); else morseText{i} = ''; end end % 将每个字符的莫尔斯电码等效项连接起来,以形成完整的莫尔斯电码序列 morseSequence = strjoin(morseText, ' '); % 输出结果 disp(morseSequence); ``` 该代码将输出以下结果: ``` .... . .-.. .-.. --- / .-- --- .-. .-.. -.. ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值