找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2287|回复: 15
收起左侧

当串口发送2时,为什么不能实现流水灯控制,求解,该怎么修改单片机代码可以实现这...

[复制链接]
ID:858009 发表于 2021-4-27 11:25 | 显示全部楼层 |阅读模式
  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. }

复制代码

串口发送2时,为什么实现不了流水灯效果,求大佬们指点一下

串口发送2时,为什么实现不了流水灯效果,求大佬们指点一下
串口发送字符.png
回复

使用道具 举报

ID:647434 发表于 2021-4-27 15:12 | 显示全部楼层
不要用HEX模式,选用文本模式发送试试
回复

使用道具 举报

ID:392485 发表于 2021-4-27 16:11 | 显示全部楼层
while(1)
                                {
                                        for(i=0;i<8;i++)
                                  P1=b[i];
                                }
速度太快,看不出来效果,加一定的延时就能看出来了。
回复

使用道具 举报

ID:858009 发表于 2021-4-27 16:20 | 显示全部楼层
sync763 发表于 2021-4-27 16:11
while(1)
                                {
                                        for(i=0;i

加入延时报错
回复

使用道具 举报

ID:858009 发表于 2021-4-27 16:20 | 显示全部楼层
sync763 发表于 2021-4-27 16:11
while(1)
                                {
                                        for(i=0;i

大佬能帮忙修改一下吗
回复

使用道具 举报

ID:392485 发表于 2021-4-27 16:26 | 显示全部楼层
while(1)
                                {
                                        for(i=0;i<8;i++)
                                         {
                                             P1=b[i];
                                             delay();
                                           }
                                }
你自己完善一下delay()函数应该可以。
回复

使用道具 举报

ID:595604 发表于 2021-4-27 17:59 | 显示全部楼层
延时函数发来,可以看看
回复

使用道具 举报

ID:858009 发表于 2021-4-27 18:03 | 显示全部楼层
sync763 发表于 2021-4-27 16:26
while(1)
                                {
                                        for(i=0;i

可以是可以,但是串口输入0或者1是无效的。输入0串口发送应该是全亮,现在是死循环,没法中断
回复

使用道具 举报

ID:392485 发表于 2021-4-28 09:16 | 显示全部楼层
else if(a==2)
                        {
                               while(1)
                                {

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

将红色的部分删除试试。
回复

使用道具 举报

ID:569384 发表于 2021-4-28 10:35 | 显示全部楼层
sync763 发表于 2021-4-28 09:16
else if(a==2)
                        {
                                while(1)

同意,本来已经有个while(1)了,这个else if(a == 2)里面的while(1)就多余了
回复

使用道具 举报

ID:858009 发表于 2021-4-28 16:44 | 显示全部楼层
sync763 发表于 2021-4-28 09:16
else if(a==2)
                        {
                                while(1)

改了,但是流水灯不循环了,直接停在led8不动了
回复

使用道具 举报

ID:858009 发表于 2021-4-28 16:45 | 显示全部楼层
haokey 发表于 2021-4-28 10:35
同意,本来已经有个while(1)了,这个else if(a == 2)里面的while(1)就多余了

修改了,流水灯直接停在led8亮,不动了
回复

使用道具 举报

ID:569384 发表于 2021-4-28 17:02 | 显示全部楼层
qwettyuio 发表于 2021-4-28 16:45
修改了,流水灯直接停在led8亮,不动了

这样你理解一下,你串口发送2,是单次的,单片机只接收到一次a=2,所以只会执行一次你的流水灯for循环。你看能不能想到解决办法,如果不能再回复一下,可以告诉你怎么做。
回复

使用道具 举报

ID:889094 发表于 2021-4-29 00:01 | 显示全部楼层
串口接收程序RI的处理部分最好在串口中断服务程序里解决,TI在其它地方发送还可以,接收那样不好,说不定就是处理不到
回复

使用道具 举报

ID:213173 发表于 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. }

复制代码
回复

使用道具 举报

ID:569384 发表于 2021-4-29 08:17 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表