昨天收到板子后,一直想先写一篇关于点灯的测评、逛了一遍论坛后发现大家都已写了这方面的内容。普通的点灯、流水灯呼吸灯等等,花样繁多。我在想怎样写才能有新意呢?看着一部老电影忽然想到可以通过点灯传递摩尔斯电码。于是寻找这方面的资料,编写这个例程。
一、摩尔斯码的规则
摩尔斯码是由点(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)
|