张娜 邓文波
摘要:摩尔斯电码,又称为摩斯电码,是一种时通时断的信号代码,这种信号代码通过不同的排列顺序来表达不同的英文字母、数字和标点符号等。该系统硬件以单片机AT89C51为核心,采用C语言编程,实现按键功能设置,然后驱动喇叭播放摩尔斯电码,最后再利用液晶屏同步显示播放的摩尔斯电码。该系统可实现摩尔斯码码速、方式可调,具有一定的现实价值和意义。
关键词:AT89C51单片机;摩尔斯码;播报机;系统设计;
中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2018)35-0220-04
电报通信的语言是由电码符号组成的,是美国萨缪尔·摩尔斯在1844年发明的,所以电码符号也被叫做摩尔斯电码(Morse code)。摩尔斯电码(又称为摩斯电码)是一种时通时断的信号代码,这种信号代码通过不同的排列顺序来表达不同的英文字母、数字和标点符号等。它是一种早期的数字化通信形式。由于通信技术的进步,摩尔斯码已被其他通信编码所取代,但由于它所占的频宽最少,又具一种技术及艺术的特性,在实际生活中有广泛的应用,现主要用于航海、远航通信等领域。
1 硬件系统
1.1 整体设计
本设计主要包括四部分:51单片机系统、按键检测模块、声音驱动模块和显示模块,系统框图如图1所示。
本设计主要是基于51单片机的摩尔斯报播报系统。通过制作相关电路板构建该系统的硬件实物平台,并采用 Keil软件编程实现摩尔斯码播报机的相关功能。
本设计主要完成的功能:
1) 对摩尔斯码播报机参数的设置。通过对按键电路的检测,实现摩尔斯码播报相关参数的设置,主要实现播报速度、播报方式的设置。
2) 实现摩尔斯电码的播报。设定好相关参数后,驱动声音驱动模块实现摩尔斯码的播报,同时利用显示模块对播报的摩尔斯码实时显示。
1.2 单片机最小系统
51单片机最小系统由单片机、晶振电路和复位电路组成,如图2所示所示。晶振电路,又称为时钟电路,是系统的心脏部分,为单片机的运行提供时钟脉冲信号。晶振频率f为22.1184Mhz,即单片机执行一条机械指令所需要的时间为1/f。复位电路主要用于程序运行不正常、死机或者需要重新复位运行时对单片机进行复位。正常情况下,单片机RST端为低电位,单片机正常运行。当按键按下后松开,单片机RST端出现短暂的高电位,从而致使单片机执行复位操作。
1.3 其他辅助电路
如图3所示为发报机系统外围电路设计图,主要有三部分组成:功能设置(按键电路)、音响播报(声响驱动电路)、结果显示(液晶显示电路)。按键主要用于测试喇叭的音效和播报码数、播报方式的设置;音响电路主要用去驱动喇叭发声,实现摩尔斯码的播报;液晶显示电路主要用于对相关参数和播報电码的显示。
2 摩尔斯编码
2.1 摩尔斯码简介
摩尔斯电码(Morse alphabet)是一种时通时断的信号,这种信号通过不同的排序来表示不同的英文字母、数字和符号等内容。它不同于现代的二进制代码,摩尔斯电码由两种最基本信号和不同的间隔时间组成:短促的点信号(·,通常读‘滴)和保持一定时间的长信号(—,通常读为‘哒)。它的代码主要包括五种: 点(·)、划(—)、字间点(·)和划(—)之间的停顿、字符与字符之间的停顿、词(组)与词(组)之间的停顿。摩尔斯码如图4所示,以一个点(·)为一基本信号单位,则有:
1) 一划(—)的时间长度为3点(·)的时间长度。
2) 在一个字符内,点(·)与点(·)、点(·)与划(—)、划(—)与划(—)之间的间隔为一点(·)的时间长度。
3) 字符与字符之间的间隔为3点(·)的时间长度。
4) 字(组)与字(组)之间的间隔为5点(·)的时间长度。
利用点(·)和划(—)两个基本信号,然后通关不同的排序来表示对应的字母、数字和符号等,如表1、2所示为常用的字母和数字摩尔斯编码。
2.2 三进制编码方式
计算机数据处理通常采用二进制编码,为方便处理,摩尔斯码在计算机处理中必须进行数据化。当利用二进制编码方式对编码进行处理时,即点(·)为0、划(—)为1,则会出现编码后不同的字母或者数字量化结果相同,无法进行区分,如字母h、i、s和数字5的编码结果都为0。为解决该问题,可采用在编码前增加一位编码校验位,该位编码为1,也可采用其他编码方式。本设计采用三进制进行编码,以点(·)为1、划(—)为2,同时为方便计算处理,本文采用倒序编码,如字母a的摩尔斯编码为(· —),则三进制倒序编码后为(21)3,编码结果为7。表1、2字母和数字对应三进制倒序编码结果如表3、4所示。表中括号内数字为对应三进制编码结果。
2.3 电报播报方式
常用的摩尔斯码电报播报方式有三种:字母报、数字报和混合报。其中数字报又分为数字长码报和数字短码报;混码报是常用的发包方式,是由字母码与数字长码的混合而成。
3 软件设计
3.1 软件整体设计
系统软件设计整体框图如图5所示。硬件初始化后,进入摩尔斯码播报机相关参数的设定状态。系统对按键状态进行扫描检测,实现摩尔斯码播报码数、播报方式的设置。播报码数:即单位时间内播报滴(·)的个数。以播报滴(·)的时间为一个基本的时间单元t,码数为V,则一个基本时间单元t的时长为60/V/2秒,公式中除以2是因为在播报中滴(·)与滴(·)之间的间隔刚好为一个基本时间单元t。播报方式的设定,即对字母报、数字长码报、数字短码报或者混合报播报方式进行选择。参数设定完毕后,系统随机产生字母或者数字,然后播放该字符的摩尔斯码,同时实时通过液晶显示所播报的字码。当需要对码数和播报方式重新设定时,只需要启动复位按键,对单片机进行复位启动,然后重新对各参数进行设定即可。
3.2 按键按识
按键识别程序采用基于按键状态的扫描设计,该方法能有效消除因按键抖动而产生的短促电位改变致使对按键结果产生的误判。程序开始后进入按键扫描的初始0状态,检测按键是否按下。当存在按键按下时,进入下一状态,利用延时判断对按键状态再次确认,如果确实按下,则转入下一状态,否则返回0状态继续按键检测。当确实有按键按下后,进入下一状态等待按键的松开,同样利用延时法消除按键抖动产生的误判,在按键确实松开后置按键标志位为高电平。部分程序及注解如下所示:
void key_mainloop()//按键扫描函数
{ static unsigned char key1_state = 0;//按键扫描状态号
static unsigned char key1_count = 0; //计数器
switch(key1_state)
{case 0:
{if(key1 == 0)key1_state = 1;}break;//当有按键按下时,进如1状态
case 1:
{if(key1_count++ >=10)//延时消除抖动
{key1_count = 0;
if(key1 == 0) key1_state = 2;
else key1_state = 0;} //确实存在按键按下,则进入2状态,否则回0状态
} break;
case 2:
{if(key1 == 1) key1_state = 3;}//当检测到按键松开时,进入3状态
case 3:
{if(key1_count++ >= 10) //延时消除抖动
{key1_count = 0;
if(key1 == 1){key1_state = 0;key1_flag_g = 1;}
else key1_state = 2; }//当该按键确实松开后,则把按键标志位置1,并使程序进入0状态,继续扫描按键;否则回到2状态继续等待按键松开。
} break;
}}
当按键扫描程序获得按键状态后,程序通过读取不同按键的按键标志位状态,区分是否存在按键按下和哪一个按键按下,从而执行不同的程序段,实现不同功能按键的实现和参数的设定。
3.3 声音驱动
音响驱动如图3(b)所示,当单片机P3-3端口输出为高电平时,则此时三极管导通,音响发声,当P3-3端口输出为低电平时,则此时三极管断开,音响静音状态。通过控制输出端P3-3的電位随时间的变化,便可以产生不同的影响效果。
以滴(·)为一个基本时间单位t,则哒(—)的时间为3t,字中滴(·)与哒(—)之间的时间间隔为1t,字与字之间的时间间隔为3t,而词(组)与词(组)之间的时间间隔为5t。
单片机开始播报后,通过读取rand()函数结合单片机定时计数器1低八位数据产生随机序列,然后读取对应序号的三进制倒序编码,执行声音驱动字码播放程序,过程中执行液晶显示程序,对播报的摩尔斯码字符进行实时显示。本文采用倒序三进制编码对摩尔斯码进行编码,主要为了方便程序的设计。部分代码如下所示:
switch(Step_flag)
case 0:{Now = (TL1+rand()) % Z_Num;Now_S = zimu[Now+Z_begin];
Step_flag++; }//产生随机序列,并读取对应序列字码摩尔斯编码的三进制倒序编码
case 1:{g = Now_S%3; Step_flag++;}//三进制编码对3取余
case 2:{if(g==1) speak_1();//余数为1,则播报(·)
else if(g==2) speak_2();//余数为2,则播报(—)
if(Sp_flag==1) Step_flag++;
}break;
case 3:{Now_S = Now_S/3;Step_flag++;}//三进制编码除以3取整
case 4:{if(Now_S) Step_flag=1;循环能,如果数据不为0,则继续进行取余循环。
3.4 结果测试
液晶显示结果如图6所示。图中①V为播报码数;②M为播报方式,其中Z为字母码播报,H为混码播报,C为数字长码播报,D为数字短码播报。③为组号,在播报过程中,每5个字符划分为一组。
4 结论
基于51单片机的摩尔斯码播报系统,是以AT89C51单片机为主控芯片,利用按键、声响及液晶模块,实现摩尔斯码的播报功能,并实现摩尔斯码播报码数、播报方式的调节。该系统设计简单,方便实现,且体积小、耗电低、造价便宜等优点,具有一定的现实价值和实际意义。
参考文献:
[1] 汪满明. 永远的摩尔斯[J].中国海事,2011(9):71-72.
[2] 韦醒超.摩尔斯短波无线通信系统的设计与实现研究[M].长沙:湖南大学,2017:19-30.
[3] 萧如珀,杨信男. 1844年5月24日:摩尔斯与电报[J].现代物理知识,2011(3):61-62.
[4] 李科文. 别了,“SOS”[J].科学之友,1999(5):21.
[通联编辑:梁书]