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

QQ登錄

只需一步,快速開始

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

當(dāng)串口發(fā)送2時(shí),為什么不能實(shí)現(xiàn)流水燈控制,求解,該怎么修改單片機(jī)代碼可以實(shí)現(xiàn)這...

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit led =P1;
  5. int i,a;
  6. char b[]={0xfe,0xfd,0xfb,0xfc,0xf7,0xef,0xdf,0xbf,0x7f};
  7. void bule_Init()
  8. {
  9.         TMOD= 0x20;
  10.         TH1 = 0xfd;
  11.         TL1 = 0xfd;
  12.   SM0 = 0;
  13.         SM1 = 1;
  14.         REN = 1;
  15.         TR1 = 1;
  16. }
  17. void main ()
  18. {
  19.         bule_Init();
  20.         P1=0xff;
  21.         while(1)
  22.         {
  23.                 if(RI==1)
  24.                 {
  25.                         a=SBUF;
  26.                         RI=0;
  27.                         if(a==0)
  28.                         {
  29.                                 P1=0x00;
  30.                         }
  31.                         else if(a==1)
  32.                         {
  33.                                 P1=0xff;
  34.                         }
  35.                         else if(a==2)
  36.                         {
  37.                                 while(1)
  38.                                 {
  39.                                         for(i=0;i<8;i++)
  40.                                   P1=b[i];
  41.                                 }
  42.                         }
  43.                 }
  44.         }
  45. }

復(fù)制代碼

效果圖.jpg (517.42 KB, 下載次數(shù): 48)

串口發(fā)送2時(shí),為什么實(shí)現(xiàn)不了流水燈效果,求大佬們指點(diǎn)一下

串口發(fā)送2時(shí),為什么實(shí)現(xiàn)不了流水燈效果,求大佬們指點(diǎn)一下

串口發(fā)送字符.png (15.66 KB, 下載次數(shù): 38)

串口發(fā)送字符.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:647434 發(fā)表于 2021-4-27 15:12 | 只看該作者
不要用HEX模式,選用文本模式發(fā)送試試
回復(fù)

使用道具 舉報(bào)

板凳
ID:392485 發(fā)表于 2021-4-27 16:11 | 只看該作者
while(1)
                                {
                                        for(i=0;i<8;i++)
                                  P1=b[i];
                                }
速度太快,看不出來效果,加一定的延時(shí)就能看出來了。
回復(fù)

使用道具 舉報(bào)

地板
ID:858009 發(fā)表于 2021-4-27 16:20 | 只看該作者
sync763 發(fā)表于 2021-4-27 16:11
while(1)
                                {
                                        for(i=0;i

加入延時(shí)報(bào)錯(cuò)
回復(fù)

使用道具 舉報(bào)

5#
ID:858009 發(fā)表于 2021-4-27 16:20 | 只看該作者
sync763 發(fā)表于 2021-4-27 16:11
while(1)
                                {
                                        for(i=0;i

大佬能幫忙修改一下嗎
回復(fù)

使用道具 舉報(bào)

6#
ID:392485 發(fā)表于 2021-4-27 16:26 | 只看該作者
while(1)
                                {
                                        for(i=0;i<8;i++)
                                         {
                                             P1=b[i];
                                             delay();
                                           }
                                }
你自己完善一下delay()函數(shù)應(yīng)該可以。
回復(fù)

使用道具 舉報(bào)

7#
ID:595604 發(fā)表于 2021-4-27 17:59 | 只看該作者
延時(shí)函數(shù)發(fā)來,可以看看
回復(fù)

使用道具 舉報(bào)

8#
ID:858009 發(fā)表于 2021-4-27 18:03 | 只看該作者
sync763 發(fā)表于 2021-4-27 16:26
while(1)
                                {
                                        for(i=0;i

可以是可以,但是串口輸入0或者1是無效的。輸入0串口發(fā)送應(yīng)該是全亮,現(xiàn)在是死循環(huán),沒法中斷
回復(fù)

使用道具 舉報(bào)

9#
ID:392485 發(fā)表于 2021-4-28 09:16 | 只看該作者
else if(a==2)
                        {
                               while(1)
                                {

                                        for(i=0;i<8;i++)
                                  P1=b;
                                }
                        }

將紅色的部分刪除試試。
回復(fù)

使用道具 舉報(bào)

10#
ID:569384 發(fā)表于 2021-4-28 10:35 | 只看該作者
sync763 發(fā)表于 2021-4-28 09:16
else if(a==2)
                        {
                                while(1)

同意,本來已經(jīng)有個(gè)while(1)了,這個(gè)else if(a == 2)里面的while(1)就多余了
回復(fù)

使用道具 舉報(bào)

11#
ID:858009 發(fā)表于 2021-4-28 16:44 | 只看該作者
sync763 發(fā)表于 2021-4-28 09:16
else if(a==2)
                        {
                                while(1)

改了,但是流水燈不循環(huán)了,直接停在led8不動(dòng)了
回復(fù)

使用道具 舉報(bào)

12#
ID:858009 發(fā)表于 2021-4-28 16:45 | 只看該作者
haokey 發(fā)表于 2021-4-28 10:35
同意,本來已經(jīng)有個(gè)while(1)了,這個(gè)else if(a == 2)里面的while(1)就多余了

修改了,流水燈直接停在led8亮,不動(dòng)了
回復(fù)

使用道具 舉報(bào)

13#
ID:569384 發(fā)表于 2021-4-28 17:02 | 只看該作者
qwettyuio 發(fā)表于 2021-4-28 16:45
修改了,流水燈直接停在led8亮,不動(dòng)了

這樣你理解一下,你串口發(fā)送2,是單次的,單片機(jī)只接收到一次a=2,所以只會(huì)執(zhí)行一次你的流水燈for循環(huán)。你看能不能想到解決辦法,如果不能再回復(fù)一下,可以告訴你怎么做。
回復(fù)

使用道具 舉報(bào)

14#
ID:889094 發(fā)表于 2021-4-29 00:01 | 只看該作者
串口接收程序RI的處理部分最好在串口中斷服務(wù)程序里解決,TI在其它地方發(fā)送還可以,接收那樣不好,說不定就是處理不到
回復(fù)

使用道具 舉報(bào)

15#
ID:213173 發(fā)表于 2021-4-29 07:48 | 只看該作者
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit led =P1;
  5. int i,j,a;
  6. char b[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

  7. void bule_Init()
  8. {
  9.         TMOD= 0x20;
  10.         TH1 = 0xfd;
  11.         TL1 = 0xfd;
  12.         SM0 = 0;
  13.         SM1 = 1;
  14.         REN = 1;
  15.         TR1 = 1;
  16. }
  17. void main ()
  18. {
  19.         bule_Init();
  20.         P1=0xff;
  21.         while(1)
  22.         {
  23.                 if(RI==1)
  24.                 {
  25.                         a=SBUF;
  26.                         RI=0;
  27.                 }
  28.                 if(a==0)
  29.                 {
  30.                         P1=0x00;
  31.                 }
  32.                 else if(a==1)
  33.                 {
  34.                         P1=0xff;
  35.                 }
  36.                 else if(a==2)
  37.                 {
  38.                         for(i=0;i<8;i++)
  39.                         {
  40.                                 P1=b[i];
  41.                                 j=50000;
  42.                                 while(j--);
  43.                         }
  44.                 }
  45.         }
  46. }

復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

16#
ID:569384 發(fā)表于 2021-4-29 08:17 | 只看該作者
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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