|
辛苦幾天編寫了基于89C52單片機(jī)的摩爾斯電碼自動(手動)收發(fā)報程序,核心代碼都已實現(xiàn),并仿真通過,其它功能正在完善。
自認(rèn)為是首創(chuàng),沒想到今天早上在閱讀貼子時,已有大神在昨天發(fā)表了相關(guān)程序,很是慚愧,本人太寡聞了。
本人由于知識和水平有限,加之書本和網(wǎng)上沒有現(xiàn)成的源代碼可參考,辛苦了幾天,設(shè)計了自認(rèn)比較合理高效占用資源少的數(shù)據(jù)結(jié)構(gòu)和算法。現(xiàn)發(fā)表出來,供大家評論,指出不足,讓我加以改進(jìn),學(xué)習(xí)提高。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif (98.21 KB, 下載次數(shù): 103)
下載附件
2021-10-21 17:13 上傳
1.png (40.9 KB, 下載次數(shù): 106)
下載附件
2021-10-21 17:14 上傳
程序編譯后占用的內(nèi)存
搜狗截圖20211021093928.png (24.03 KB, 下載次數(shù): 92)
下載附件
2021-10-21 09:39 上傳
單片機(jī)源程序如下:
- /*-----------------------------------------------
- * 【實驗平臺】: QX-MCS51 單片機(jī)開發(fā)板
- * 【外部晶振】: 11.0592mhz
- * 【主控芯片】: STC89C52
- * 【編譯環(huán)境】: Keil μVisio4
- * 【程序編寫】: wzqwxx 水上人家
- 名稱:摩爾斯電碼發(fā)送
- 內(nèi)容:……
- ------------------------------------------------*/
- #include <REGX52.H>
- #include <stdio.H>
- #include "1602.h"
- #include "MRScode.h"
- unsigned char *showbuffer;//顯示緩沖
- // //常用短語庫
- //unsigned char code *phrase[] = {"ok","NO", "hello","thank you","receive",
- // /*好,不,你好,謝謝你,收到,*/
- //"retransmission","Goodbye", "Help me!", "my location:"
- ///*重復(fù),再見,救我或幫我,我的位置:后面寫兩組數(shù)字 東經(jīng)和北緯*/
- //
- ///******其它可再添加*****/ } ;
- //
- void UART_init()
- {
- TMOD |= 0x20; //T1工作模式2 8位自動重裝
- TH1 = 0xfd;
- TL1 = 0xfd; //比特率9600 時鐘頻率11.0592MHZ
- TR1 = 1; //啟動T1定時器
- SM0 = 0;
- SM1 = 1; //串口工作方式1 10位異步
- REN = 1; //串口允許接收
- TI = 1;
- }
- void main()
- {
- unsigned char inputbufstr[26],k,num;
- UART_init();
- lcd_init();
- showbuffer = "Hello! 51hei.com"; //測試文本
- Lcdwritestring(0,0,showbuffer);
- send_mrs_code_TEXT(showbuffer); //發(fā)送字符串
- while(1)
- {
- scanf("%s",inputbufstr); //運行后在仿真終端輸入英文字符串
-
- showbuffer = "";
- showbuffer = inputbufstr+'\n';
- Lcdwritestring(0,0,inputbufstr);
- send_mrs_code_TEXT(inputbufstr);
-
- };
- }
復(fù)制代碼- /******本函數(shù)ASCII碼轉(zhuǎn)摩爾斯碼字符串發(fā)送*****/
- void send_mrs_code_TEXT(unsigned char *p)
- {
- unsigned char i; //i即摩爾斯碼字庫數(shù)組下標(biāo)
- while(*p)
- {
- if(*p != 0x20)//是否是空格
- {
- if(*p >= 0x41 && *p <= 0x5A )//大寫字母A~Z
- {
- i = *p-0x41; //i取字母字庫 ,0x00地址開始
- }
- else if(*p >= 0x61 && *p <= 0x7A) //小寫字母a~z
- {
- i = *p-0x61; //i取字母字庫 ,0x00地址開始 ,摩斯碼字母不區(qū)分大小寫
- }
- else if(*p >= 0x30 && *p <= 0x39) //數(shù)字0~9
- {
- i = *p-0x16; //i取數(shù)字字庫 ,0x1A地址開始
- }
- else
- {
- switch (*p)
- {
- case '?': i =36; //即字庫數(shù)組下標(biāo)
- break;
- case ',': i =37;
- break;
- case '.': i =38;
- break;
- case '!': i =39;
- break;
- case '@': i =40;
- break;
- case ':': i =41;
- break;
- case '-': i =42;
- break;
- default:goto AAA;//其它字符當(dāng)空格處理
- break;
- }
- }
- count = 0;//清摩爾碼顯示位置
- write_com(0x01);// 清屏
- Lcdwritestring(0,0,showbuffer); //第一行顯示待發(fā)字符串
- Lcdwritechar(1,3,*p);//第二行顯示待發(fā)字符
- p++;
- MRS_code_send(MRSZK[i]); //發(fā)送一個摩爾碼
- }
- else
- {
- AAA: p++;
- J4_beep(); // 是空格,單詞間隔3+4=7個點靜音
- }
- }
- }
復(fù)制代碼 接收部分代碼中午在另貼發(fā)布
仿真文件和源碼
摩斯碼自動收發(fā)程序4.zip
(449.37 KB, 下載次數(shù): 31)
2021-10-21 09:27 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|