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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2245|回復: 6
打印 上一主題 下一主題
收起左側

51單片機通過串口實現(xiàn)雙機通信的問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:650067 發(fā)表于 2020-3-29 22:17 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
我用主機的點陣弄了個9-0秒的倒計時,從機給主機發(fā)送按鍵值(主機倒計時是用定時器0,串口用了定時器一,串口的通信是ok的)。
我要實現(xiàn)的功能是:從機掃描按下按鍵,主機開始顯示倒計時。
我現(xiàn)在的問題是:
我的點陣只能顯示9(不會變成8),我顯示是放在串口中斷里面,定時器0只用來計時(50ms一次溢出),串口波特率4800
請問:1.顯示的函數(shù)應該在哪個地方,中斷還是while循環(huán)
          2.中斷的優(yōu)先級需不需要改
請大神們幫幫忙。
看看哪里需要修改。

這是單片機代碼

  1. u8 Time=0,second=0;
  2. u8 Val=0;

  3. void zhongduan_Init(void)
  4. {
  5.         TMOD = 0x21; //開啟定時器0、1
  6.           TH0 = 0x3C;         //設置初始值,定時50ms
  7.           TL0 = 0xB0;
  8.         TH1=0xF3;         //計數(shù)器初始值設置,注意波特率是4800
  9.         TL1=0xF3;
  10.           ET0 = 1;  //打開定時器0中斷
  11.           TR0 = 0;  //不啟動定時器0
  12.         TR1=1;          //打開定時器1
  13.         SM0=0;//設置串口工作方式
  14.         SM1=1;
  15.         REN=1;        //打開串口接收中斷
  16.         IP=0x10;
  17.         EA=1;          //打開總中斷
  18.         ES=1;//打開串口中斷
  19.         
  20. }
  21. void main()
  22. {        
  23.         zhongduan_Init();
  24.         while(1)
  25.         {
  26.         }
  27.         
  28. }
  29. void Timer0() interrupt 1                //中斷服務函數(shù)
  30. {
  31.     TH0 = 0x3C;        
  32.     TL0 = 0xB0;
  33.         Time++;
  34.         if(Time==20)
  35.         {
  36.                 Time=0;
  37.                 second++;        //一秒時間
  38.                 //if(second>=1)convert();        //心形移位
  39.         }
  40. }
  41. void Usart() interrupt 4
  42. {
  43.         Val=SBUF;
  44.          switch(Val)
  45.         {
  46.                 case 1:
  47.                         display(Val);//顯示
  48.                         break;
  49.         }
  50.         RI=0;
  51. }
  52. [\code]
  53. [code=c]
  54. void display(u8 DATa)//點陣顯示函數(shù)
  55. {        
  56.         u8 j;
  57.         P0=0x7f;
  58.         
  59.         switch(DATa)
  60.         {
  61.                 case 0:                                                //初始畫面
  62.                                 for(j=0;j<8;j++)
  63.                                 {
  64.                                         P0=bubian[j];
  65.                                         Senddata(ten[j]);
  66.                                         delay(10);
  67.                                         Senddata(0x00);//消隱
  68.                                 }
  69.                                 break;
  70.                 case 1:        
  71.                                 show_1();
  72.                                 break;
  73.         }
  74. }
  75. void show_1(void)//倒計時顯示
  76. {
  77.         u8 j;
  78.         TR0=1;//開啟定時器
  79.         
  80.         while(second<10)//時間一到回到初始頁面
  81.         {
  82.                 for(j=0;j<8;j++)
  83.                 {
  84.                         P0=bubian[j];
  85.                         Senddata(count[second][j]);
  86.                         delay(5);
  87.                         Senddata(0x00);//消隱
  88.                 }
  89.         }               
  90. }
復制代碼

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

使用道具 舉報

7#
ID:650067 發(fā)表于 2020-4-1 17:48 | 只看該作者
HC6800-ES-V2.0 發(fā)表于 2020-3-31 08:38
我猜是:你的按鍵程序中,沒有消抖啊,所以就會有由于抖動而產(chǎn)生的好幾個“按鍵”。機械按鍵,必須要消抖 ...

我那個從機按鍵按下的時候,要等一會才有畫面,正常嗎
回復

使用道具 舉報

6#
ID:650067 發(fā)表于 2020-4-1 09:29 | 只看該作者
HC6800-ES-V2.0 發(fā)表于 2020-3-31 08:38
我猜是:你的按鍵程序中,沒有消抖啊,所以就會有由于抖動而產(chǎn)生的好幾個“按鍵”。機械按鍵,必須要消抖 ...

能不能幫我調(diào)試一下,謝謝了

project_3.zip

157.11 KB, 下載次數(shù): 8

回復

使用道具 舉報

5#
ID:650067 發(fā)表于 2020-4-1 09:25 | 只看該作者
HC6800-ES-V2.0 發(fā)表于 2020-3-31 08:38
我猜是:你的按鍵程序中,沒有消抖啊,所以就會有由于抖動而產(chǎn)生的好幾個“按鍵”。機械按鍵,必須要消抖 ...

你好,我是用Proteus仿真的,而且有消抖
回復

使用道具 舉報

地板
ID:164602 發(fā)表于 2020-3-31 08:38 | 只看該作者
nimab 發(fā)表于 2020-3-30 13:54
好的,謝謝您,但是我現(xiàn)在顯示函數(shù)放在主循環(huán)里面,又有其他問題了。
我從機有幾個按鍵,按鍵一是開啟點 ...

我猜是:你的按鍵程序中,沒有消抖啊,所以就會有由于抖動而產(chǎn)生的好幾個“按鍵”。機械按鍵,必須要消抖。
這不是你的完整程序,我只能猜了
回復

使用道具 舉報

板凳
ID:650067 發(fā)表于 2020-3-30 13:54 | 只看該作者
HC6800-ES-V2.0 發(fā)表于 2020-3-30 08:35
顯示函數(shù)還是放在主函數(shù)里好。要顯示的內(nèi)容通過變量傳遞標記即可。串口中斷服務函數(shù)只需要傳遞顯示標記。

好的,謝謝您,但是我現(xiàn)在顯示函數(shù)放在主循環(huán)里面,又有其他問題了。
我從機有幾個按鍵,按鍵一是開啟點陣倒計時,按鍵二是顯示幾個logo,我預想的效果是顯示完一個按鍵的東西后回到初始界面,可是這個串口老是發(fā)東西過來(已經(jīng)沒按按鍵了),導致剛回到初始界面就又開始倒計時了,如此反復,請問怎么解決比較妥當
這是main函數(shù):
void main()
{       
        u8 flag=0;
        zhongduan_Init();
        while(1)
        {
                if(flag==0)
                {
                        switch(Val)
                        {
                                case 1:show_1();flag=1;break;
                                case 2:show_2();flag=1;break;               
                                case 3:show_3();flag=1;break;       
                                case 4:show_4();flag=1;break;       
                                default:show_5();flag=1;break;        //初始畫面
                        }
                }
                if(flag==1)
                {
                        Val=0;
                        flag=0;
                }
        }
       
}
回復

使用道具 舉報

沙發(fā)
ID:164602 發(fā)表于 2020-3-30 08:35 | 只看該作者
顯示函數(shù)還是放在主函數(shù)里好。要顯示的內(nèi)容通過變量傳遞標記即可。串口中斷服務函數(shù)只需要傳遞顯示標記。
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久 | 亚洲免费一 | 国产精品免费一区二区三区四区 | 亚洲人在线观看视频 | 噜久寡妇噜噜久久寡妇 | 亚洲视频一区在线 | 天天插天天狠天天透 | 欧美日韩视频在线播放 | 国产一区二区三区在线看 | 国产一区二区三区欧美 | 成人在线精品视频 | 不卡一区 | 国产精品毛片一区二区三区 | 欧美一级片久久 | 日韩欧美三级在线 | 国产一区二区在线视频 | 亚洲v日韩v综合v精品v | 欧美福利在线 | 欧美日韩三级在线观看 | 在线国产视频 | 国产在线观看网站 | 亚洲国产欧美日韩 | 琪琪午夜伦伦电影福利片 | 久久久久无码国产精品一区 | 成人h视频在线 | 久久久国产一区 | 99re视频在线观看 | 成人美女免费网站视频 | 欧洲免费毛片 | 污书屋| 懂色av蜜桃av | 羞羞视频在线观看网站 | 久久久www成人免费无遮挡大片 | 国产亚洲一区二区三区 | 久久激情网| 久久免费精品 | 欧美一级欧美三级在线观看 | 欧美一级二级三级 | 精品久久99 | 日韩欧美国产精品 | 欧美日韩视频一区二区 |