打印
[MM32软件]

【MM32 eMiniBoard测评报告】+通过点灯传递摩尔斯码

[复制链接]
624|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
昨天收到板子后,一直想先写一篇关于点灯的测评、逛了一遍论坛后发现大家都已写了这方面的内容。普通的点灯、流水灯呼吸灯等等,花样繁多。我在想怎样写才能有新意呢?看着一部老电影忽然想到可以通过点灯传递摩尔斯电码。于是寻找这方面的资料,编写这个例程。
一、摩尔斯码的规则
摩尔斯码是由点(DOT)和划(DASH)为基本单元组成的一套编码。这套编码包含26个字母、10个数字以及一些特殊符号。如下图所示:

其中点为基本时间单元,即为1t;而划的时间长度为点的3倍,记为3t;点划之间需要停顿1t的时间;字母之间需要停顿3t的时间;单词之间需要停顿7t的时间、
二、用C描述摩尔斯码
首先定义两个结构体:
typedef struct
{
        char character;
        unsigned char str[6];
}Morse_Table;

typedef struct
{
        char character;
        unsigned char len;
        unsigned int code;
}Morse_Code_Table;

通过const Morse_Table tablel[TABLE_LENGTH]定义一个存储在FLASH中的字符-摩尔斯码对应表,例如字符A:{ 'A', { DOT, DASH, '\0' } }。然后通过Morse_Code_Table code_tablel[TABLE_LENGTH]定义一个开始运行后的字码翻译表。在Morse_Code_Table中,code用于表示将DOT、DASH翻译成机器可以识别的编码。编码中1表示接通,0表示停顿。之所以使用unsigned int,是由于其有32bit位,相较于数组,既节省空间也有足够的长度可供实用。
三、运行
开机运行MorseCode.c中的Test函数时,先通过Transfer_Morse_Code(tablel, code_tablel);将编码表转换。

然后运行Transfer_String(string1, string2);将预定的字符串翻译。其实主要是在字母中插入停顿符“|”。
之后通过Beep_State(string2);获取相应的状态控制直到字符串末尾输出0xFF为止。


代码如下: MM32L073.zip (306.36 KB)

使用特权

评论回复
沙发
纪国圣|  楼主 | 2020-5-21 22:35 | 只看该作者
通过改变delay_ms的参数可以改变单位时间的长短,即DOT和DASH的时间长度,从而控制发码的速度。
以程序规定的300ms时间计算,发完“Hello 21ic”这个字符串需要约35秒。
最后吐槽一下,由于拍摄的视频有69M,想多压缩包上传居然不行。建议论坛以后允许多压缩包上传,不然上传文件受限太麻烦了。大家只能下程序进板子里看效果了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

77

主题

407

帖子

5

粉丝