找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

讓單片機(jī)串口接收數(shù)據(jù)然后用數(shù)碼管顯示 但程序十位數(shù)字出現(xiàn)就很快消失

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:331899 發(fā)表于 2018-5-21 16:34 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
我寫的程序是讓單片機(jī)接收數(shù)據(jù)已數(shù)碼管的形式顯示,為什么我的我一個(gè)程序十位數(shù)字出現(xiàn)就很快消失,個(gè)位顯示;而第二個(gè)程序確實(shí)現(xiàn)的很好?大佬們,求解答
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. sbit we = P2^7;
  5. sbit du = P2^6;
  6. uchar counter,time_counter;
  7. uchar code leddata[]={

  8.                 0x3F,  //"0"
  9.                 0x06,  //"1"
  10.                 0x5B,  //"2"
  11.                 0x4F,  //"3"
  12.                 0x66,  //"4"
  13.                 0x6D,  //"5"
  14.                 0x7D,  //"6"
  15.                 0x07,  //"7"
  16.                 0x7F,  //"8"
  17.                 0x6F,  //"9"
  18.                 0x77,  //"A"
  19.                 0x7C,  //"B"
  20.                 0x39,  //"C"
  21.                 0x5E,  //"D"
  22.                 0x79,  //"E"
  23.                 0x71,  //"F"
  24.                 0x76,  //"H"
  25.                 0x38,  //"L"
  26.                 0x37,  //"n"
  27.                 0x3E,  //"u"
  28.                 0x73,  //"P"
  29.                 0x5C,  //"o"
  30.                 0x40,  //"-"
  31.                 0x00,  //熄滅
  32.                 0x00  //自定義

  33.                          };
  34. void delay(uint z)
  35. {
  36.         uint x,y;
  37.         for(x = z; x > 0; x--)
  38.                 for(y = 114; y > 0 ; y--);
  39. }      
  40. void UART_init()
  41. {
  42.         TMOD = 0x20;          //T1工作模式2  8位自動(dòng)重裝
  43.         TH1 = 0xfa;
  44.         TL1 = 0xfa;         //比特率9600
  45.         TR1 = 1;
  46.         SM0 = 0;
  47.         SM1 = 1;                 //串口工作方式1 10位異步
  48.         REN = 1;                //串口允許接收
  49. /*        EA  = 1;                //開總中斷
  50.         ES  = 1;                //串口中斷打開        */         
  51. }
  52. void display(uchar i)
  53. {
  54.         uchar shi,ge;
  55.         shi = i / 10; //求模
  56.         ge  = i % 10; //求余
  57.         P0 = 0xff;
  58.         we = 1;
  59.         P0 = 0xfe; //點(diǎn)亮第一位數(shù)碼管
  60.         we = 0;

  61.         du = 1;
  62.         P0 = leddata[shi];
  63.         du = 0;
  64.         delay(1);

  65.         P0 = 0xff;
  66.         we = 1;
  67.         P0 = 0xfd;//點(diǎn)亮第二位數(shù)碼管
  68.         we = 0;

  69.         du = 1;
  70.         P0 = leddata[ge];
  71.         du = 0;
  72.         delay(1);      
  73. }
  74. void main()
  75. {
  76.         UART_init(); //串口初始化
  77.         while(1)
  78.         {
  79.            while(!RI)
  80.             RI = 0;
  81.            display(SBUF);
  82.         }      
  83. }


  84. #include <reg52.h>
  85. #define uchar unsigned char
  86. #define uint  unsigned int
  87. sbit we = P2^7;
  88. sbit du = P2^6;
  89. uchar counter,time_counter;
  90. uchar code leddata[]={

  91.                 0x3F,  //"0"
  92.                 0x06,  //"1"
  93.                 0x5B,  //"2"
  94.                 0x4F,  //"3"
  95.                 0x66,  //"4"
  96.                 0x6D,  //"5"
  97.                 0x7D,  //"6"
  98.                 0x07,  //"7"
  99.                 0x7F,  //"8"
  100.                 0x6F,  //"9"
  101.                 0x77,  //"A"
  102.                 0x7C,  //"B"
  103.                 0x39,  //"C"
  104.                 0x5E,  //"D"
  105.                 0x79,  //"E"
  106.                 0x71,  //"F"
  107.                 0x76,  //"H"
  108.                 0x38,  //"L"
  109.                 0x37,  //"n"
  110.                 0x3E,  //"u"
  111.                 0x73,  //"P"
  112.                 0x5C,  //"o"
  113.                 0x40,  //"-"
  114.                 0x00,  //熄滅
  115.                 0x00  //自定義

  116.                          };
  117. void delay(uint z)
  118. {
  119.         uint x,y;
  120.         for(x = z; x > 0; x--)
  121.                 for(y = 114; y > 0 ; y--);
  122. }      
  123. void UART_init()
  124. {
  125.         TMOD = 0x20;          //T1工作模式2  8位自動(dòng)重裝
  126.         TH1 = 0xfa;
  127.         TL1 = 0xfa;         //比特率9600
  128.         TR1 = 1;
  129.         SM0 = 0;
  130.         SM1 = 1;                 //串口工作方式1 10位異步
  131.         REN = 1;                //串口允許接收
  132. /*        EA  = 1;                //開總中斷
  133.         ES  = 1;                //串口中斷打開        */         
  134. }
  135. void display(uchar i)
  136. {
  137.         uchar shi,ge;
  138.         shi = i / 10; //求模
  139.         ge  = i % 10; //求余
  140.         P0 = 0xff;
  141.         we = 1;
  142.         P0 = 0xfe; //點(diǎn)亮第一位數(shù)碼管
  143.         we = 0;

  144.         du = 1;
  145.         P0 = leddata[shi];
  146.         du = 0;
  147.         delay(1);

  148.         P0 = 0xff;
  149.         we = 1;
  150.         P0 = 0xfd;//點(diǎn)亮第二位數(shù)碼管
  151.         we = 0;

  152.         du = 1;
  153.         P0 = leddata[ge];
  154.         du = 0;
  155.         delay(1);      
  156. }
  157. void main()
  158. {
  159.         UART_init(); //串口初始化
  160.         while(1)
  161.         {
  162.            if(RI)
  163.            {
  164.               RI = 0;
  165.            }
  166.            display(SBUF);
  167.         }      
  168. }
復(fù)制代碼



評(píng)分

參與人數(shù) 1黑幣 +10 收起 理由
cciejs12345 + 10 贊一個(gè)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:213173 發(fā)表于 2018-5-22 08:32 | 只看該作者
while(!RI)是停留等待條件成立才繼續(xù)運(yùn)行,if(RI)是判斷條件是否成立,不停留,可以繼續(xù)運(yùn)行。
回復(fù)

使用道具 舉報(bào)

板凳
ID:330198 發(fā)表于 2018-5-22 08:53 | 只看該作者
你第一個(gè)和第二個(gè)唯一的區(qū)別就是清除RI標(biāo)志位的語句,用if判斷不滿足條件還會(huì)繼續(xù)執(zhí)行,但是用while如果不滿足就會(huì)一直停在這,這就是你數(shù)碼管很快消失的原因。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表