发 帖  
[问答] 老司机解答下,为什么只移动一次,其他的下发的数据都是对的,就流水灯不对?
2018-7-12 20:30:24  282 单片机
收藏 1 收藏 推荐 0 推荐
分享

void LedCommunicate()                                                                                       此函数一直在主函数中循环调用

{

    static unsigned char tmp=0xFE;                                                                     

    static unsigned char tmep=0x7F;                                                                  

    switch(RxdByte)                                                                                       RxdByte为串口调试助手下发的数据,一个字节的全局变量

    {

        case 0:LedBuff[6]=0xFF;break;

        case 1:LedBuff[6]=0x00;break;                            //下发1,点亮所有小灯

                case 2:LedBuff[6]=0xF0;break;                   //下发2,3点亮一半小灯

                case 3:LedBuff[6]=0x0F;break;

                case 4:                                                                                             //下发4进行左移流水灯

               {

              if(cnt>=1000)

             {

                                    cnt=0;                                                                                                  cnt为计数器,定时器T0中断服务函数中增加

                                   LedBuff[6]=_crol_(tmp,1);                                                                    小灯1s循环左移一次,但是只移动了一次,逻辑哪里错误了,老司机请求解答 啊?      

                             }            

                            break;

             }

           case 5:                                                     //下发5进行流水灯右移动

           {

                          if(cnt>=1000)

         {

                                   cnt=0;

                                   LedBuff[6]=_cror_(tmep,1);

          }

                          break;

           }

           case 6:BUZZ=0;break;

           case 7:BUZZ=1;break;

           default:break;

    }   

}


//串口中断服务函数                    

void InterruptUART() interrupt 4

{

    if(RI==1)                //接收数据完毕

    {

           RI=0;

           RxdByte=SBUF;      //将接收到的数据送进缓冲区

           SBUF=RxdByte;      //再将缓冲区的数据发送出去

    }

    if(TI==1)

    {

        TI=0;

    }

}

老司机解答下,为什么只移动一次,其他的下发的数据都是对的,就流水灯不对



2018-7-12 20:30:24   评论 邀请回答
6个回答
你的这个函数是不是放在了主循环里了
2018-7-13 13:45:53 评论

举报

对啊。。。。。。。。。。。。。。
jinyi7016 发表于 2018-7-13 13:45
你的这个函数是不是放在了主循环里了

对。。。。。。。
对于你现在的程序是当RxdByte=4且cnt>=1000时,LED才会移位一次,如果时想当RxdByte=4时,LED开始自动进行循环移位,那应该时当RxdByte=4时,设置一个标志,LED的循环移位部分放在定时器里,当这个标志有效时,在定时器里进行循环移位
2018-7-13 19:14:57 评论

举报

人中狼 发表于 2018-7-13 19:14
对于你现在的程序是当RxdByte=4且cnt>=1000时,LED才会移位一次,如果时想当RxdByte=4时,LED开始自动进行循环移位,那应该时当RxdByte=4时,设置一个标志,LED的循环移位部分放在定时器里,当这个标志有效时,在定时器里进行循环移位 ...

额,感谢感谢。。。。。。。。。。。。
浅笑无花须有时 发表于 2018-7-14 16:40
额,感谢感谢。。。。。。。。。。。。

请问下写入E2PROM中的数据是以什么类型存贮的?010101010101?这种么?

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

提问题
关闭

站长推荐 上一条 /9 下一条

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