張娜 鄧文波
摘要:摩爾斯電碼,又稱為摩斯電碼,是一種時通時斷的信號代碼,這種信號代碼通過不同的排列順序來表達不同的英文字母、數(shù)字和標點符號等。該系統(tǒng)硬件以單片機AT89C51為核心,采用C語言編程,實現(xiàn)按鍵功能設置,然后驅動喇叭播放摩爾斯電碼,最后再利用液晶屏同步顯示播放的摩爾斯電碼。該系統(tǒng)可實現(xiàn)摩爾斯碼碼速、方式可調,具有一定的現(xiàn)實價值和意義。
關鍵詞:AT89C51單片機;摩爾斯碼;播報機;系統(tǒng)設計;
中圖分類號:TP391? ? ? ? 文獻標識碼:A? ? ? ?文章編號:1009-3044(2018)35-0220-04
電報通信的語言是由電碼符號組成的,是美國薩繆爾·摩爾斯在1844年發(fā)明的,所以電碼符號也被叫做摩爾斯電碼(Morse code)。摩爾斯電碼(又稱為摩斯電碼)是一種時通時斷的信號代碼,這種信號代碼通過不同的排列順序來表達不同的英文字母、數(shù)字和標點符號等。它是一種早期的數(shù)字化通信形式。由于通信技術的進步,摩爾斯碼已被其他通信編碼所取代,但由于它所占的頻寬最少,又具一種技術及藝術的特性,在實際生活中有廣泛的應用,現(xiàn)主要用于航海、遠航通信等領域。
1 硬件系統(tǒng)
1.1 整體設計
本設計主要包括四部分:51單片機系統(tǒng)、按鍵檢測模塊、聲音驅動模塊和顯示模塊,系統(tǒng)框圖如圖1所示。
本設計主要是基于51單片機的摩爾斯報播報系統(tǒng)。通過制作相關電路板構建該系統(tǒng)的硬件實物平臺,并采用 Keil軟件編程實現(xiàn)摩爾斯碼播報機的相關功能。
本設計主要完成的功能:
1) 對摩爾斯碼播報機參數(shù)的設置。通過對按鍵電路的檢測,實現(xiàn)摩爾斯碼播報相關參數(shù)的設置,主要實現(xiàn)播報速度、播報方式的設置。
2) 實現(xiàn)摩爾斯電碼的播報。設定好相關參數(shù)后,驅動聲音驅動模塊實現(xiàn)摩爾斯碼的播報,同時利用顯示模塊對播報的摩爾斯碼實時顯示。
1.2 單片機最小系統(tǒng)
51單片機最小系統(tǒng)由單片機、晶振電路和復位電路組成,如圖2所示所示。晶振電路,又稱為時鐘電路,是系統(tǒng)的心臟部分,為單片機的運行提供時鐘脈沖信號。晶振頻率f為22.1184Mhz,即單片機執(zhí)行一條機械指令所需要的時間為1/f。復位電路主要用于程序運行不正常、死機或者需要重新復位運行時對單片機進行復位。正常情況下,單片機RST端為低電位,單片機正常運行。當按鍵按下后松開,單片機RST端出現(xiàn)短暫的高電位,從而致使單片機執(zhí)行復位操作。
1.3 其他輔助電路
如圖3所示為發(fā)報機系統(tǒng)外圍電路設計圖,主要有三部分組成:功能設置(按鍵電路)、音響播報(聲響驅動電路)、結果顯示(液晶顯示電路)。按鍵主要用于測試喇叭的音效和播報碼數(shù)、播報方式的設置;音響電路主要用去驅動喇叭發(fā)聲,實現(xiàn)摩爾斯碼的播報;液晶顯示電路主要用于對相關參數(shù)和播報電碼的顯示。
2 摩爾斯編碼
2.1 摩爾斯碼簡介
摩爾斯電碼(Morse alphabet)是一種時通時斷的信號,這種信號通過不同的排序來表示不同的英文字母、數(shù)字和符號等內容。它不同于現(xiàn)代的二進制代碼,摩爾斯電碼由兩種最基本信號和不同的間隔時間組成:短促的點信號(·,通常讀‘滴)和保持一定時間的長信號(—,通常讀為‘噠)。它的代碼主要包括五種: 點(·)、劃(—)、字間點(·)和劃(—)之間的停頓、字符與字符之間的停頓、詞(組)與詞(組)之間的停頓。摩爾斯碼如圖4所示,以一個點(·)為一基本信號單位,則有:
1) 一劃(—)的時間長度為3點(·)的時間長度。
2) 在一個字符內,點(·)與點(·)、點(·)與劃(—)、劃(—)與劃(—)之間的間隔為一點(·)的時間長度。
3) 字符與字符之間的間隔為3點(·)的時間長度。
4) 字(組)與字(組)之間的間隔為5點(·)的時間長度。
利用點(·)和劃(—)兩個基本信號,然后通關不同的排序來表示對應的字母、數(shù)字和符號等,如表1、2所示為常用的字母和數(shù)字摩爾斯編碼。
2.2 三進制編碼方式
計算機數(shù)據處理通常采用二進制編碼,為方便處理,摩爾斯碼在計算機處理中必須進行數(shù)據化。當利用二進制編碼方式對編碼進行處理時,即點(·)為0、劃(—)為1,則會出現(xiàn)編碼后不同的字母或者數(shù)字量化結果相同,無法進行區(qū)分,如字母h、i、s和數(shù)字5的編碼結果都為0。為解決該問題,可采用在編碼前增加一位編碼校驗位,該位編碼為1,也可采用其他編碼方式。本設計采用三進制進行編碼,以點(·)為1、劃(—)為2,同時為方便計算處理,本文采用倒序編碼,如字母a的摩爾斯編碼為(· —),則三進制倒序編碼后為(21)3,編碼結果為7。表1、2字母和數(shù)字對應三進制倒序編碼結果如表3、4所示。表中括號內數(shù)字為對應三進制編碼結果。
2.3 電報播報方式
常用的摩爾斯碼電報播報方式有三種:字母報、數(shù)字報和混合報。其中數(shù)字報又分為數(shù)字長碼報和數(shù)字短碼報;混碼報是常用的發(fā)包方式,是由字母碼與數(shù)字長碼的混合而成。
3 軟件設計
3.1 軟件整體設計
系統(tǒng)軟件設計整體框圖如圖5所示。硬件初始化后,進入摩爾斯碼播報機相關參數(shù)的設定狀態(tài)。系統(tǒng)對按鍵狀態(tài)進行掃描檢測,實現(xiàn)摩爾斯碼播報碼數(shù)、播報方式的設置。播報碼數(shù):即單位時間內播報滴(·)的個數(shù)。以播報滴(·)的時間為一個基本的時間單元t,碼數(shù)為V,則一個基本時間單元t的時長為60/V/2秒,公式中除以2是因為在播報中滴(·)與滴(·)之間的間隔剛好為一個基本時間單元t。播報方式的設定,即對字母報、數(shù)字長碼報、數(shù)字短碼報或者混合報播報方式進行選擇。參數(shù)設定完畢后,系統(tǒng)隨機產生字母或者數(shù)字,然后播放該字符的摩爾斯碼,同時實時通過液晶顯示所播報的字碼。當需要對碼數(shù)和播報方式重新設定時,只需要啟動復位按鍵,對單片機進行復位啟動,然后重新對各參數(shù)進行設定即可。
3.2 按鍵按識
按鍵識別程序采用基于按鍵狀態(tài)的掃描設計,該方法能有效消除因按鍵抖動而產生的短促電位改變致使對按鍵結果產生的誤判。程序開始后進入按鍵掃描的初始0狀態(tài),檢測按鍵是否按下。當存在按鍵按下時,進入下一狀態(tài),利用延時判斷對按鍵狀態(tài)再次確認,如果確實按下,則轉入下一狀態(tài),否則返回0狀態(tài)繼續(xù)按鍵檢測。當確實有按鍵按下后,進入下一狀態(tài)等待按鍵的松開,同樣利用延時法消除按鍵抖動產生的誤判,在按鍵確實松開后置按鍵標志位為高電平。部分程序及注解如下所示:
void key_mainloop()//按鍵掃描函數(shù)
{ static unsigned char key1_state = 0;//按鍵掃描狀態(tài)號
static unsigned char key1_count = 0; //計數(shù)器
switch(key1_state)
{case 0:
{if(key1 == 0)key1_state = 1;}break;//當有按鍵按下時,進如1狀態(tài)
case 1:
{if(key1_count++ >=10)//延時消除抖動
{key1_count = 0;
if(key1 == 0) key1_state = 2;
else key1_state = 0;} //確實存在按鍵按下,則進入2狀態(tài),否則回0狀態(tài)
} break;
case 2:
{if(key1 == 1) key1_state = 3;}//當檢測到按鍵松開時,進入3狀態(tài)
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狀態(tài),繼續(xù)掃描按鍵;否則回到2狀態(tài)繼續(xù)等待按鍵松開。
} break;
}}
當按鍵掃描程序獲得按鍵狀態(tài)后,程序通過讀取不同按鍵的按鍵標志位狀態(tài),區(qū)分是否存在按鍵按下和哪一個按鍵按下,從而執(zhí)行不同的程序段,實現(xiàn)不同功能按鍵的實現(xiàn)和參數(shù)的設定。
3.3 聲音驅動
音響驅動如圖3(b)所示,當單片機P3-3端口輸出為高電平時,則此時三極管導通,音響發(fā)聲,當P3-3端口輸出為低電平時,則此時三極管斷開,音響靜音狀態(tài)。通過控制輸出端P3-3的電位隨時間的變化,便可以產生不同的影響效果。
以滴(·)為一個基本時間單位t,則噠(—)的時間為3t,字中滴(·)與噠(—)之間的時間間隔為1t,字與字之間的時間間隔為3t,而詞(組)與詞(組)之間的時間間隔為5t。
單片機開始播報后,通過讀取rand()函數(shù)結合單片機定時計數(shù)器1低八位數(shù)據產生隨機序列,然后讀取對應序號的三進制倒序編碼,執(zhí)行聲音驅動字碼播放程序,過程中執(zhí)行液晶顯示程序,對播報的摩爾斯碼字符進行實時顯示。本文采用倒序三進制編碼對摩爾斯碼進行編碼,主要為了方便程序的設計。部分代碼如下所示:
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();//余數(shù)為1,則播報(·)
else if(g==2) speak_2();//余數(shù)為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;循環(huán)能,如果數(shù)據不為0,則繼續(xù)進行取余循環(huán)。
3.4 結果測試
液晶顯示結果如圖6所示。圖中①V為播報碼數(shù);②M為播報方式,其中Z為字母碼播報,H為混碼播報,C為數(shù)字長碼播報,D為數(shù)字短碼播報。③為組號,在播報過程中,每5個字符劃分為一組。
4 結論
基于51單片機的摩爾斯碼播報系統(tǒng),是以AT89C51單片機為主控芯片,利用按鍵、聲響及液晶模塊,實現(xiàn)摩爾斯碼的播報功能,并實現(xiàn)摩爾斯碼播報碼數(shù)、播報方式的調節(jié)。該系統(tǒng)設計簡單,方便實現(xiàn),且體積小、耗電低、造價便宜等優(yōu)點,具有一定的現(xiàn)實價值和實際意義。
參考文獻:
[1] 汪滿明. 永遠的摩爾斯[J].中國海事,2011(9):71-72.
[2] 韋醒超.摩爾斯短波無線通信系統(tǒng)的設計與實現(xiàn)研究[M].長沙:湖南大學,2017:19-30.
[3] 蕭如珀,楊信男. 1844年5月24日:摩爾斯與電報[J].現(xiàn)代物理知識,2011(3):61-62.
[4] 李科文. 別了,“SOS”[J].科學之友,1999(5):21.
[通聯(lián)編輯:梁書]