欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2456|回復: 10
收起左側

51單片機串口接收PC發送的數字顯示到數碼管程序求助

[復制鏈接]
ID:1051996 發表于 2022-11-14 23:03 | 顯示全部樓層 |閱讀模式
用的是普中開發板,需求是用串口調試助 發送12345678 顯示到數碼管上
現在就是只有一位數碼管顯示,其他的都是空值
在此求大佬教一下

單片機源程序如下:
  1. #include<reg51.h>

  2. typedef unsigned int u16;          //對數據類型進行聲明定義
  3. typedef unsigned char u8;


  4. unsigned char buffer[8];
  5. u8 DisplayData[8];

  6. sbit LSA=P2^2;
  7. sbit LSB=P2^3;
  8. sbit LSC=P2^4;


  9. void delay(u16 i)
  10. {
  11.         while(i--);       
  12. }

  13. u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  14.                                         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值


  15. void DigDisplay()
  16. {
  17.         u8 i;
  18.         for(i=0;i<8;i++)
  19.         {
  20.                 switch(i)         //位選,選擇點亮的數碼管,
  21.                 {
  22.                         case(0):
  23.                                 LSA=1;LSB=1;LSC=1; break;//顯示第7位
  24.                         case(1):
  25.                                 LSA=0;LSB=1;LSC=1; break;//顯示第6位
  26.                         case(2):
  27.                                 LSA=1;LSB=0;LSC=1; break;//顯示第5位
  28.                         case(3):
  29.                                 LSA=0;LSB=0;LSC=1; break;//顯示第4位
  30.                         case(4):
  31.                                 LSA=1;LSB=1;LSC=0; break;//顯示第3位
  32.                         case(5):
  33.                                 LSA=0;LSB=1;LSC=0; break;//顯示第2位
  34.                         case(6):
  35.                                 LSA=1;LSB=0;LSC=0; break;//顯示第1位
  36.                         case(7):
  37.                                 LSA=0;LSB=0;LSC=0; break;//顯示第0位       
  38.                 }
  39.                 P0=smgduan[i];//發送段碼
  40.                 delay(100); //間隔一段時間掃描       
  41.                 P0=0x00;//消隱
  42.         }
  43. }


  44. void rs_init()         //串口初始化,波特率設置2400
  45. {

  46.         SCON=0x40;
  47.         PCON=0x00;
  48.         TMOD=0x20;
  49.         TL1=0xf4;//bs
  50.         TH1=0xf4;

  51.         TR1=1;


  52. }





  53. void main()
  54. {
  55.          rs_init();

  56.          REN=1;
  57.          EA=1;
  58.          ES=1;

  59.          while(1){
  60.          
  61.          DigDisplay();
  62.          
  63.          }

  64. }


  65. void serial() interrupt 4
  66. {
  67.         unsigned char i=0;
  68.         EA=0;
  69.         RI=0;
  70.         buffer[i]=smgduan[SBUF];
  71.         i++;
  72.         if(i==8);
  73.         i=0;
  74.         EA=1;

  75. }
復制代碼






回復

使用道具 舉報

無效樓層,該帖已經被刪除
ID:161164 發表于 2022-11-14 23:24 | 顯示全部樓層
main()呢?while(1)呢?
回復

使用道具 舉報

ID:123289 發表于 2022-11-15 09:11 | 顯示全部樓層
做8個變量:LED1,LED2......LED8。
先學會如何將這8個變量中的數,依序送到LED上顯示。
而后再考慮串口接收數據。
這時,只要將收到的數字放到LED1,LED2......LED8中就可以了。
回復

使用道具 舉報

ID:77589 發表于 2022-11-15 09:17 | 顯示全部樓層
通過貼出的代碼看不出具體問題!!!!
回復

使用道具 舉報

ID:1051996 發表于 2022-11-15 15:17 | 顯示全部樓層
代碼被吃掉了
回復

使用道具 舉報

ID:1051996 發表于 2022-11-15 18:34 | 顯示全部樓層
lkc8210 發表于 2022-11-14 23:24
main()呢?while(1)呢?

重新發了大佬
回復

使用道具 舉報

ID:101869 發表于 2022-11-15 19:03 | 顯示全部樓層
EA不可以關閉這是總中斷
回復

使用道具 舉報

ID:101869 發表于 2022-11-15 19:05 | 顯示全部樓層
我說錯了請斑竹刪了
回復

使用道具 舉報

ID:101869 發表于 2022-11-15 19:07 | 顯示全部樓層
你關閉了總中斷,所以接收不到
回復

使用道具 舉報

ID:101869 發表于 2022-11-15 19:11 | 顯示全部樓層
這是我經常用的  你改改就行
{
    static u8 rx_step = 0;         //接收中斷函數里的步驟變量
    static u8 array_cnt = 0; //接收緩存數組的下標

    if (RI)
    {
        RI=0;
        if (0 == rx_ok_flag) // 1代表已經完成接收了一串新數據,并且禁止接收其它新的數據
        {

            switch (rx_step)
            {
            case 0:                                                  //接頭暗號的步驟。判斷數據頭的步驟。
                rx_buffer[0] =SBUF;          //直接讀取剛接收完的一個字節的數據。
                if (0x5a == rx_buffer[0]) //等于數據頭0x5a,接頭暗號吻合。
                {
                    array_cnt = 1; //接收緩存的下標
                    rx_step = 1;   //切換到下一個步驟,接收其它有效的數據
                }
                break;

            case 1:                                                          //數據類型和長度
                rx_buffer[array_cnt] = SBUF; //直接讀取剛接收完的一個字節的數據。
                array_cnt++;                                  //每接收一個字節,數組下標都自加1,為接收下一個數據做準備
                if (array_cnt >= 4)
                {

                    rx_ok_flag = 1; //接收完成標志“置1”,通知主函數處理。
                    rx_step = 0;        //及時切換回接頭暗號的步驟
                }
                break;
            }
        }
    }
}
回復

使用道具 舉報

ID:883242 發表于 2022-11-15 20:05 | 顯示全部樓層
串口中斷里面的那個i必須是static的!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表