久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5372|回復(fù): 8
打印 上一主題 下一主題
收起左側(cè)

原創(chuàng):基于51單片機摩爾斯電碼收發(fā)系統(tǒng)仿真,附完整代碼和仿真,還有視頻演示喲

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:965487 發(fā)表于 2021-10-27 22:40 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
  因為上次太倉促,這次來真的,原創(chuàng):基于89C51單片機摩爾斯電碼收發(fā)系統(tǒng)仿真,附完整代碼和仿真,還有視頻演示喲。
  本人編制此程序僅為興趣和愛好,請大家多多指教和鼓勵。

  /*----------------------------------------------------------
* 【實驗平臺】: 89C52單片機開發(fā)板
* 【外部晶振】: 11.0592MHz        
* 【主控芯片】: STC89C52
* 【編譯環(huán)境】: Keil μVisio4         
* 【程序編寫】: wzqwxx 水上人家

名稱:摩爾斯電碼自動(手動)發(fā)送

內(nèi)容:僅供交流學(xué)習(xí),其他用途請注明編者,若有BUG請原諒編者。

  本程序僅實現(xiàn)了短電報自動發(fā)送功能,能用兩個鍵輸入報文,
能用單手鍵發(fā)送報文,或用PC機等終端輸入報文。
  編制程序過程本身就很有趣和充滿挑戰(zhàn),要不斷思考修改調(diào)試
完善,從中學(xué)到了不少知識。如果能制作成品,練習(xí)發(fā)報也十分有
趣,這也是對古老的電訊一種紀念,致敬充滿智慧的先輩們。
  播發(fā)摩爾斯電碼的一般要求是:以一個“點”的長度為一個時間
單位,“劃”是三個點的時間長度;點劃之間的間隔是一個點的長度;
字符之間的間隔是三個點的長度;單詞之間的間隔是七個點的長度。
這樣才能被收報人識別。
------------------------------------------------------------*/
仿真說明:
  1、開機后,出現(xiàn)問候語。即進入信息錄入界面。這時可按點劃鍵進行輸入,這時每輸入一點一劃,都會出現(xiàn)候選字,如是你想要的,可稍停,即可自動上屏。
若不是要連續(xù)輸入,直到找到。字母和數(shù)字可按摩斯碼輸入,空格輸入點點劃劃四筆。 注意,點劃輸入間隔時間不要過長,這個要學(xué)習(xí)適應(yīng)。
  2、若輸入出錯,可按菜單鍵一下,出現(xiàn)DEL,按點鍵可刪除一字,按劃鍵全部刪除。
  3、在錄入界面下,連按兩下菜單鍵,出現(xiàn)發(fā)送SEND菜單,再按點鍵可發(fā)送。
  4、在錄入界面下,連按三下菜單鍵,出現(xiàn)短語phrase菜單,按點劃鍵上下查找,找到短語后,按菜單鍵進入發(fā)送界面,按點鍵發(fā)送。
  5、在錄入界面下,連按四下菜單鍵,出現(xiàn)PCINPUT,再按點鍵可進入虛擬終端,點擊終端獲得焦點后,即可輸入字符。按退格鍵刪除一字,按回車發(fā)送,
按ESC返回點劃雙鍵輸入。在終端里,在沒有輸入任何字符下,輸入問號,再輸入數(shù)字,即短語的序號,可調(diào)出短語,按回車發(fā)送。
  6、在錄入界面下,按單手鍵可直接純手動發(fā)報。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)

單片機源程序如下:

  1. //   main.文件

  2. #include <REGX52.H>
  3. #include <stdio.H>
  4. #include "1602.h"
  5. #include "MRScode.h"

  6. unsigned char code *HI = "HELLO!";//開機問候語

  7. void Timer0Init(void)                //4毫秒@11.0592MHz
  8. {
  9.         TMOD &= 0xF0;                //設(shè)置定時器模式
  10.         TMOD |= 0x01;                //設(shè)置定時器模式
  11.         TL0 = 0x9A;                //設(shè)置定時初值
  12.         TH0 = 0xF1;                //設(shè)置定時初值
  13.         TF0 = 0;                //清除TF0標(biāo)志
  14.         ET0 = 1;
  15.         EA = 1;
  16.         TR0 = 0;                //定時器0由點鍵和劃鍵啟動計時
  17. }


  18. void UART_init()
  19. {
  20.         TMOD |= 0x20;          //T1工作模式2  8位自動重裝
  21.         TH1 = 0xfd;
  22.         TL1 = 0xfd;         //比特率9600   時鐘頻率11.0592MHZ
  23.         TR1 = 1;                //啟動T1定時器
  24.         SM0 = 0;
  25.         SM1 = 1;                 //串口工作方式1 10位異步
  26.         REN = 1;                //串口允許接收
  27.         TI = 1;
  28. }


  29. /*********按鍵輸入鍵值獲取*******/
  30. unsigned char keyget()
  31. {
  32.         unsigned char keyvalue;          //鍵值
  33.         beep = Hmove;
  34.         if(Di == 0 )           //點鍵按下
  35.         {
  36.                 delay_ms(25);
  37.                 if(Di == 0 )
  38.                 {
  39.                         while(Di == 0 ); //松手檢測
  40.                         keyvalue = 1;        
  41.                 }
  42.         }
  43.            else if(Hu == 0 )  //劃鍵按下
  44.         {
  45.                 delay_ms(25);
  46.                 if(Hu == 0 )
  47.                 {
  48.                         while(Hu == 0 );
  49.                         keyvalue = 2;        
  50.                 }
  51.         }
  52.            else if(GL == 0 )         //功能鍵按下
  53.         {
  54.                 delay_ms(25);
  55.                 if(GL == 0 )
  56.                 {
  57.                         while(GL == 0 );
  58.                         keyvalue = 3;
  59.                 }
  60.         }
  61.            else
  62.            {
  63.                   keyvalue = 255;
  64.         }
  65.           return(keyvalue);        
  66. }


  67. void main()
  68. {
  69.         char i;
  70.         Timer0Init();//初始化定時器0
  71.         UART_init();
  72.         lcd_init();
  73.         Lcdwritestring(0,5,HI);
  74.         for(i = 0; i < 100; i++)
  75.                 delay_ms(50);
  76.         send_mrs_code_TEXT(HI); //發(fā)送字符串
  77.         write_com(0x01);// 清屏

  78.         while(1)
  79.         {
  80.                 if(~F0)           //PSW^5
  81.                         keyin(keyget());  //實體鍵輸入
  82.                 else
  83.                     PCin();         //電腦終端輸入
  84.         };
  85. }

復(fù)制代碼


  1. //  MRScode.c文件

  2. #include <stdio.H>
  3. #include "1602.h"
  4. #include "MRScode.h"
  5. unsigned char count; //計算摩爾碼輸入顯示點劃的位置
  6. unsigned char showbuffer[L];  //顯示緩沖
  7. unsigned char i = 0;             //顯示緩沖數(shù)組下標(biāo)
  8. static unsigned char time;  //按鍵停頓延時計數(shù) 供字符自動上屏
  9. static unsigned char MODE; //功能切換 MODE=0 KEY輸入,=1按點鍵刪1字,按劃全刪
  10.                                                   //=2按點鍵發(fā)送,=3調(diào)用短語,=4進入PC輸入

  11. //摩爾斯碼字庫 字母A~Z(下標(biāo)0~25)計26個, 數(shù)字0~9(下標(biāo)26~35)計10個
  12. //  ? , . ! @ : -(下標(biāo)36~42)計7個,總共43個字節(jié)
  13. unsigned char code MRSZK[] = { 0x61,0X28,0X2a,0x44,0x80,0x22,
  14.         0x46,0x20,0x60,0x27,0x45,0x24,0x63,0x62,0x47,0x26,0x2d,0x42,
  15.         0x40,0x81,0x41,0x21,0x43,0x29,0x2b,0x2c,/*A~Z*/0xbf,0xaf,0xa7,
  16.         0xa3,0xa1,0xa0,0xb0,0xb8,0xbc,0xbe,/*0~9*/0xcc,0xf3,0xd5,0xeb,
  17.         0xda,0xf8,0xe1/*  ?,.!@:- */ };

  18. unsigned char code ASCIIZK[] = "?,.!@:-"; //符號庫,可擴展

  19. /***  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ
  20.        [\]^_`abcdefghijklmnopqrstuvwxyz{|}~  ASCII可見字符  ***/

  21. //常用短語庫
  22. unsigned char code *phrase[] = {"ok","NO", "SOS","hello","thank you","receive",
  23.                                                                 /*好,不,  求救, 你好,    謝謝你,   收到,*/
  24. "retransmission","Goodbye",         "Help me!",    "my location:"        ,  "MAX 10"         } ;
  25. /*重復(fù),          再見,      幫幫我,         我的位置,          最多10條短語*/
  26. /******不限于這些短語,拋轉(zhuǎn)引玉,其它可視EEPROM大小再添加*****/                        


  27. /*********此函數(shù)據(jù)鍵值實現(xiàn)摩斯碼轉(zhuǎn)ASCII碼、并切換菜單實現(xiàn)相關(guān)功能*******/

  28. void keyin(unsigned char keyvalue)
  29. {
  30.         static unsigned char MRScode,num;
  31.         unsigned char x,y,z,j;
  32.         bit flag;

  33.         if(keyvalue != 255) //有鍵按下
  34.         {               
  35.                 Lcdwritestring(1,0,"                "); // 16空格清第二行
  36.                 if(keyvalue == 1) //點鍵
  37.                 {
  38.                         switch (MODE)  //功能模式切換
  39.                         {
  40.                                 case 0:          //本機正常輸入點
  41.                                         TR0 = 1;  
  42.                                         MRScode <<= 1;          //發(fā)送端從高位開始的
  43.                                         Lcdwritechar(1,6+num,'.'); //num為點劃輸入的次數(shù)
  44.                                         num++;        
  45.                                         break;

  46.                                 case 1:                //按點鍵刪除一字
  47.                                         MODE = 0;
  48.                                         if(i > 0)  //有字符就刪除
  49.                                                 i--;        
  50.                                         goto CCC;

  51.                                 case 2:                //輸完按點鍵發(fā)送
  52.                                         MODE = 0;
  53.                                         send_mrs_code_TEXT(showbuffer);
  54.                                         goto DDD;

  55.                                 case 3:                //上翻查找調(diào)用短語
  56.                                         write_com(0x01); //清屏
  57.                                         for(j= 0;j<L;j++)
  58.                                                 showbuffer[j] = phrase[x][j];                                
  59.                                         if(++x > 10)
  60.                                                 x = 10;
  61.                                         flag = 1;
  62.                                         goto DDD;

  63.                                 case 4:           //切換到Pc終端輸入
  64.                                         MODE = 0;
  65.                                         i = 0;
  66.                                         F0 = 1;
  67.                                         Lcdwritestring(1,0,"PC:");
  68.                                         return;
  69.                                                                         
  70.                                 default:
  71.                                         MODE = 0;
  72.                                         return;                                       
  73.                         }
  74.                 }
  75.                 if(keyvalue == 2) //劃鍵
  76.                 {
  77.                         if(MODE == 1)  //按劃鍵全部刪除
  78.                         {
  79.                                 MODE = 0;
  80.                                 i = 0;
  81.                                 goto CCC;
  82.                         }
  83.                         else if(MODE == 3)        //下翻查找短語
  84.                         {        
  85.                                 write_com(0x01);
  86.                                 for(j= 0;j<L;j++)
  87.                                         showbuffer[j] = phrase[x][j];                                
  88.                                 if(x>0)
  89.                                         x--;
  90.                                 flag = 1;
  91.                                 goto DDD;
  92.                         }

  93.                         TR0 = 1;        //本機正常輸入劃
  94.                         MRScode <<= 1;          //發(fā)送端從高位開始的
  95.                         MRScode |= 0x01;
  96.                         Lcdwritechar(1,6+num,'_');
  97.                         num++;
  98.                 }
  99.                 if(keyvalue == 3 )//功能鍵        
  100.                 {         
  101.                         if( ++MODE > 4 ) //循環(huán)顯示菜單
  102.                                 MODE = 0;
  103.                         if(flag == 1)         //查找到短語后直接進入發(fā)送菜單
  104.                                 MODE = 2;
  105.                         flag = 0;
  106.                
  107.                         switch (MODE)         //屏上顯示功能菜單
  108.                         {
  109.                                 case 1:
  110.                                         write_com(0x01);
  111.                                         Lcdwritestring(1,13,"DEL"); //刪除
  112.                                         goto DDD;
  113.                                 
  114.                                 case 2:
  115.                                         write_com(0x01);
  116.                                         Lcdwritestring(1,8,"SEND->"); //發(fā)送
  117.                                         goto DDD;
  118.                                 
  119.                                 case 3:
  120.                                         write_com(0x01);
  121.                                         Lcdwritestring(1,6,"phrase"); // 調(diào)用短語
  122.                                         goto DDD;
  123.                                 
  124.                                 case 4:
  125.                                         write_com(0x01);
  126.                                         Lcdwritestring(1,3,"PC IN"); // 進入PC輸入
  127.                                         goto DDD;                                       
  128.                                 
  129.                                 default:
  130.                                         write_com(0x01);
  131.                                         Lcdwritestring(1,0,"KEY IN"); // 本機輸入
  132.                                         goto DDD;                                       
  133.                         }        
  134.                 }

  135.                 if(num<5 && num > 0)          //處理字母
  136.                 {
  137.                         if(num == 4 && MRScode == 3) // 輸入 ..-- 是空格
  138.                         {
  139.                                   z = '_';         //顯示用_代替
  140.                                   goto BBB;
  141.                         }
  142.                                  
  143.                         y = (8-3-num) << 5;  //得到字母前三位識別碼值
  144.                          for(j = 0; j <= 25;j++)//字母字庫地址0~25;
  145.                         {
  146.                                 if( MRSZK[j] == ( MRScode | y) )
  147.                                 {
  148.                                         z = j+0x41;//轉(zhuǎn)化成ASCII碼送顯示
  149.                                         break;
  150.                                 }
  151.                         }
  152.                 }                        
  153.                    else if(num>5)   //處理符號
  154.                 {
  155.                          for(j = 36; j <= 42;j++)//符號字庫地址36~42;
  156.                         {
  157.                                 if((MRSZK[j]&0x3F) == MRScode )        //清零高兩位
  158.                                 {
  159.                                         z = ASCIIZK[j-36];
  160.                                         break;        
  161.                                 }
  162.                         }                        
  163.                 }
  164.                 else //處理數(shù)字
  165.                 {
  166.                          for(j = 26; j <= 35;j++)//數(shù)字地址26~35;
  167.                         {
  168.                                 if((MRSZK[j]&0x1F) == MRScode )        //清零高三位
  169.                                 {
  170.                                         z = j+0x16;
  171.                                         break;        
  172.                                 }
  173.                         }
  174.                 }
  175.                 Lcdwritechar(1,4,z);//顯示候選字符
  176.                 if(num > 5)        //滿6個點劃自動上屏
  177.                 {
  178.         BBB:        time = 0;        
  179.                         TR0 = 0;
  180.                         MRScode = 0;
  181.                         num = 0;
  182.                         showbuffer[i] = z;//轉(zhuǎn)化成的ASCII碼送顯示
  183.                         i++;
  184.         CCC:        showbuffer[i] = 0; //字符串結(jié)束加0
  185.                         write_com(0x01);
  186.         DDD:        Lcdwritestring(0,0,showbuffer);
  187.                         
  188.                 }
  189.                 if(i > L-2)
  190.                 {
  191.                         Lcdwritestring(1,0,"MEMORY FULL!");        //不能超過顯存最大長度
  192.                         showbuffer[i] = 0;//字符串結(jié)束加0  
  193.                 }
  194.         }
  195.         else
  196.         {
  197.                 if(        time > 250)          //時間到,自動上屏
  198.                 {
  199.                         goto BBB;
  200.                 }
  201.         }
  202. }


  203. /*********電腦終端輸入ASCII碼**********/

  204. void PCin()
  205. {
  206.         unsigned char j,k,n,Char;
  207.         for(k = 0;k < L;k++)
  208.                 showbuffer[k] = 0;//清緩沖
  209.         k = 0;

  210.         do{
  211.                 while(!RI);
  212.                 RI = 0;
  213.                 Char = SBUF; //運行后在仿真終端輸入半角字符
  214.                 if(Char == 0x1B)   //按ESC鍵退出PC輸入
  215.                 {
  216.                         write_com(0x01);
  217.                         showbuffer[0] = 0;//清緩沖
  218.                         Lcdwritestring(0,0,"KEY:");
  219.                         F0 = 0;        //PSW 用戶位
  220.                         MODE = 0;
  221.                         return;        
  222.                 }
  223.                 if(Char == 0x08) //按Backspace鍵
  224.                 {
  225.                         k--;  //退格刪除一個字
  226.                         if(k == 0xff)
  227.                                 k = 0 ;  
  228.                         showbuffer[k] = 0;
  229.                         write_com(0x01);// 清屏
  230.                         Lcdwritestring(0,0,showbuffer);
  231.                         continue;
  232.                 }
  233.                 showbuffer[k] = Char;
  234.                 write_com(0x01);// 清屏
  235.                 Lcdwritestring(0,0,showbuffer);
  236.         
  237.                 /***此段為輸入短語數(shù)字代碼調(diào)用短語**/
  238.                 if(showbuffer[0] == '?') //調(diào)用短語用問號開頭
  239.                 {
  240.                         if(Char >= '0' && Char <= '9')
  241.                         {        //如果是數(shù)字
  242.                         
  243.                                 n = n * 10 + (Char-'0');  //轉(zhuǎn)成十進制數(shù)
  244.                                 if(n>10)         //暫時短語只有9個
  245.                                 {
  246.                                         n = 10;
  247.                                         write_com(0x01);
  248.                                         Lcdwritestring(1,0,phrase[n]);//調(diào)用短語
  249.                                         for(n = 1;n <= k+1; n++)
  250.                                                 showbuffer[n] = 0;
  251.                                         Lcdwritestring(0,0,showbuffer);                                                
  252.                                         n = 0;
  253.                                         k = 0;
  254.                                 }
  255.                                 else
  256.                                         Lcdwritestring(1,0,phrase[n]);//調(diào)用短語
  257.                         }
  258.                 }
  259.                 k++;
  260.         }while(Char != 0x0D);//回車發(fā)送
  261.         if(showbuffer[0] == '?')
  262.         {
  263.                 for(j= 0;j<L;j++)
  264.                         showbuffer[j] = phrase[n][j];                                
  265.         }
  266.         Lcdwritestring(0,0,showbuffer);
  267.         send_mrs_code_TEXT(showbuffer);
  268. }


  269. /******此函數(shù)可調(diào)節(jié)整體發(fā)送速度*****/        

  270. void delay_ms(unsigned char date)
  271. {
  272.         unsigned char i,j;
  273.         for(i = 0;i < date;i++)
  274.                 for(j = 0; j < 138; j++);
  275. }          //一點時長138約92ms  188約124.6ms  90約61.5ms


  276. void S_beep() //1個短滴聲
  277. {          char i;        
  278.         for(i=0;i<1;i++)
  279.         {
  280.                 beep = 0;
  281.                 delay_ms(100);        
  282.                 beep = 0;
  283.                 delay_ms(100);        
  284.         }
  285.         beep = 1;
  286.         count++;
  287.         Lcdwritechar(1,9+count,'.');
  288. }

  289. void L_beep() //一個長滴音
  290. {        char i;
  291.         for(i=0;i<3;i++)
  292.         {
  293.                 beep = 0;
  294.                 delay_ms(100);        
  295.                 beep = 0;
  296.                 delay_ms(100);        
  297.         }
  298.         beep = 1;
  299.         count++;
  300.         Lcdwritechar(1,9+count,'_');
  301. }

  302. void J2_beep() // 間隔2個點靜音
  303. {        char i;
  304.         for(i=0;i<2;i++)
  305.         {
  306.                 beep = 1;
  307.                 delay_ms(100);        
  308.                 beep = 1;
  309.                 delay_ms(100);        
  310.         }
  311. }

  312. void J1_beep() // 間隔1個點靜音
  313. {        char i;
  314.         for(i=0;i<1;i++)
  315.         {
  316.                 beep = 1;
  317.                 delay_ms(100);        
  318.                 beep = 1;
  319.                 delay_ms(100);        
  320.         }
  321. }

  322. void J4_beep() // 間隔4個點靜音
  323. {        char i;
  324.         for(i=0;i<4;i++)
  325.         {
  326.                 beep = 1;
  327.                 delay_ms(100);        
  328.                 beep = 1;
  329.                 delay_ms(100);        
  330.         }
  331. }

  332. /***********發(fā)送一個摩爾斯碼************/
  333. void MRS_code_send(unsigned char MRS_code )
  334. {
  335.         unsigned char i; //數(shù)組下標(biāo)
  336.         bit bt;         //識別長短聲音

  337.         if(MRS_code < 0x90)         //小于是字母
  338.         {
  339.                 i = 3 + MRS_code /0x20;         //取前三位
  340.                 MRS_code <<= i-1;

  341.                 for(; i< 8; i++)
  342.                 {
  343.                         bt = (MRS_code <<= 1)&0x80;
  344.                         if(bt)
  345.                                 L_beep(); //一個長滴音
  346.                         else
  347.                                 S_beep(); //1個短滴聲                        
  348.                         J1_beep(); // 間隔1個點靜音;        
  349.                 }
  350.         }
  351.         else if(MRS_code > 0x90 && MRS_code < 0xc0)  //否則是發(fā)送數(shù)字
  352.         {
  353.                 MRS_code <<= 2;
  354.                 for(i = 3; i< 8; i++)
  355.                 {
  356.                         bt = (MRS_code <<= 1)&0x80;
  357.                         if(bt)
  358.                                 L_beep(); //一個長滴音
  359.                         else
  360.                                 S_beep(); //1個短滴聲                        
  361.                         J1_beep(); // 間隔1個點靜音;        
  362.                 }
  363.         }
  364.         else  //否則是發(fā)送符號
  365.         {
  366.                 MRS_code <<= 1;
  367.                 for(i = 2; i< 8; i++)
  368.                 {
  369.                         bt = (MRS_code <<= 1)&0x80;
  370.                         if(bt)
  371.                                 L_beep(); //一個長滴音
  372.                         else
  373.                                 S_beep(); //1個短滴聲                        
  374.                         J1_beep(); // 間隔1個點靜音;        
  375.                 }
  376.         }
  377.         J2_beep(); //字元間隔1+2=3個點靜音
  378. }

  379. /******本函數(shù)ASCII碼轉(zhuǎn)摩爾斯碼字符串發(fā)送*****/
  380. void send_mrs_code_TEXT(unsigned char *p)
  381. {
  382.         unsigned char i; //i即摩爾斯碼字庫數(shù)組下標(biāo)
  383.         while(*p)
  384.         {
  385.                 if(*p != 0x20)//是否是空格
  386.                 {
  387.                         if(*p >= 0x41 && *p <= 0x5A )//大寫字母A~Z        
  388.                         {
  389.                                 i = *p-0x41;  //i取字母字庫 ,0x00地址開始
  390.                         }
  391.                         else if(*p >= 0x61 && *p <= 0x7A) //小寫字母a~z
  392.                         {
  393.                                 i = *p-0x61;  //i取字母字庫 ,0x00地址開始 ,
  394.                         }                                  //摩斯碼字母不區(qū)分大小寫
  395.                         else if(*p >= 0x30 && *p <= 0x39) //數(shù)字0~9
  396.                         {
  397.                                 i = *p-0x16;  //i取數(shù)字字庫 ,0x1A地址開始                                
  398.                         }
  399.                         else
  400.                         {
  401.                                 switch (*p)
  402.                                 {
  403.                                         case '?': i =36;  //即字庫數(shù)組下標(biāo)
  404.                                                 break;
  405.                                         case ',': i =37;
  406.                                                 break;
  407.                                         case '.': i =38;
  408.                                                 break;
  409.                                         case '!': i =39;
  410.                                                 break;
  411.                                         case '@': i =40;
  412.                                                 break;
  413.                                         case ':': i =41;
  414.                                                 break;
  415.                                         case '-': i =42;
  416.                                                 break;
  417.                                         default:goto AAA;//其它字符當(dāng)空格處理
  418.                                                 break;
  419.                                 }
  420.                         }  
  421.                         count = 0;//清摩爾碼顯示位置
  422.                         write_com(0x01);// 清屏
  423.                         Lcdwritestring(0,0,p);        //第一行顯示待發(fā)字符串
  424.                         Lcdwritestring(1,0,"SEND->");        //第二行顯示正在發(fā)送:
  425.                         Lcdwritechar(1,8,*p);//第二行顯示待發(fā)字符
  426.                         p++;
  427.                         MRS_code_send(MRSZK[i]); //發(fā)送一個摩爾碼
  428.                 }
  429.                 else
  430.                 {
  431.         AAA:        p++;
  432.                         J4_beep(); // 是空格,單詞間隔3+4=7個點靜音                        
  433.                 }
  434.         }
  435. }



  436. void time0_MRS (void) interrupt 1  //STC89C52 4毫秒@11.0592MHz
  437. {
  438.         TL0 = 0x9A;                //設(shè)置定時初值        我這是按點平均時長90ms,劃時長270ms設(shè)置的
  439.         TH0 = 0xF1;                //設(shè)置定時初值        在接收人工發(fā)送的要設(shè)計智能調(diào)整適應(yīng)
  440.         ++time; //按鍵停頓延時計數(shù) 供字符自動上屏
  441. }

  442. ..................................
  443. 其他,限于篇幅,請在附件里查看。
復(fù)制代碼


Proteus7.5版本的仿真代碼下載: 摩斯碼104.zip (371.54 KB, 下載次數(shù): 100)
仿真演示視頻
https://www.bilibili.com/video/BV15h41187pu?share_source=copy_web

評分

參與人數(shù) 2黑幣 +102 收起 理由
絕望的萌新 + 12 很給力!
admin + 90 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏10 分享淘帖 頂3 踩
回復(fù)

使用道具 舉報

來自 2#
ID:262 發(fā)表于 2021-11-10 23:55 | 只看該作者
15141752135 發(fā)表于 2021-11-10 22:31
仿真DsN文件如何打開呢?

dsn文件只能用Proteus7.5打開,這是我打開后的效果

51hei.gif (61.33 KB, 下載次數(shù): 167)

51hei.gif
回復(fù)

使用道具 舉報

板凳
ID:965487 發(fā)表于 2021-10-28 07:45 | 只看該作者
謝謝admin大額積分獎勵,其實我的編程的動力,主要就是來升級頭銜的。以后還望多多獎勵喲,哈哈。
回復(fù)

使用道具 舉報

地板
ID:965487 發(fā)表于 2021-10-28 08:24 | 只看該作者
謝謝admin大額獎勵,您的鼓勵是我努力編程的動力。我將繼續(xù)為晉升頭銜而努力奮斗!
回復(fù)

使用道具 舉報

5#
ID:858959 發(fā)表于 2021-11-10 16:17 來自手機 | 只看該作者
樓主能大概說一下原理嗎,想學(xué)習(xí)一下
回復(fù)

使用道具 舉報

6#
ID:858959 發(fā)表于 2021-11-10 22:31 來自手機 | 只看該作者
仿真DsN文件如何打開呢?
回復(fù)

使用道具 舉報

7#
ID:965487 發(fā)表于 2021-11-17 08:24 | 只看該作者
15141752135 發(fā)表于 2021-11-10 16:17
樓主能大概說一下原理嗎,想學(xué)習(xí)一下

謝謝你的關(guān)注,原理其實很簡單,但一兩句話我也說不清楚,你可以下載源碼進行閱讀,注釋很清楚的。
回復(fù)

使用道具 舉報

8#
ID:1106833 發(fā)表于 2023-12-28 11:02 | 只看該作者
壓縮包里沒有看到仿真文件啊請問在那里找
回復(fù)

使用道具 舉報

9#
ID:262 發(fā)表于 2023-12-28 22:04 | 只看該作者
zuiyuzhu 發(fā)表于 2023-12-28 11:02
壓縮包里沒有看到仿真文件啊請問在那里找

MRScode.DSN就是仿真文件,先下載Proteus7.8這個版本,樓主是用這個版本做的仿真,最好用這個版本打開
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 在线精品一区二区 | 高清国产一区二区 | 亚洲免费在线 | 亚洲精品电影 | 一区二区三区国产精品 | 色偷偷噜噜噜亚洲男人 | 盗摄精品av一区二区三区 | 亚洲一区二区在线 | 日本一区二区高清视频 | 亚洲日韩中文字幕 | 国产色99精品9i | 久久久精品网站 | 日韩成人精品一区 | 人人澡人人射 | 97精品国产97久久久久久免费 | 一区二区三区在线 | 欧美在线天堂 | 精品欧美一区二区三区久久久 | 国产9 9在线 | 中文 | 久久久久久久电影 | 天天草草草 | 91人人爽| 中文字幕电影在线观看 | 午夜激情国产 | 欧美国产亚洲一区二区 | 国产免国产免费 | 亚洲成人综合网站 | 久久网一区二区 | 欧日韩在线观看 | 亚洲精品一区二区三区蜜桃久 | www九色| 操亚洲| 国产成人综合亚洲欧美94在线 | 国产精品视频500部 a久久 | 国产欧美一区二区精品忘忧草 | 91在线精品一区二区 | 天堂av影院| 91视频入口 | 久久久久久国产精品免费免费狐狸 | 极品的亚洲 | 亚洲天堂色 |