微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 左右走马灯的问题

左右走马灯的问题

时间:10-02 整理:3721RD 点击:
本人是菜鸟一名,来这里是求助各位大神的。
以下是一个走马灯的程序,但我想到的是只是亮一个灯去走马灯,不是像程序一样是灭一个灯来走马灯。求助各位大神帮帮忙指点迷津。
#include <reg52.h>
void delay(unsigned int i);  //声明延时函数
char LED;
main()
{
  unsigned char i;
  while (1)
  {         LED = 0xfe;
          
           for (i = 0 ;i < 8; i++)
          {
           P1  = LED;
           delay(700);
           LED = LED << 1;             // 左移
           LED = LED | 0x01;         // 移位后,后面的位为高电平
           if (LED == 0x7f ) break;          //提前退出 FOR 循环
           }
       
           for (i = 0 ;i < 7 ; i++)
           {
                 
                  P1  = LED;
                  delay(700);
                  LED = LED >> 1;         // 右移
                  LED = LED | 0x80;         // 移位后,后面的位为高电平
           }
   }
}

/*******延时函数*************/
void delay(unsigned int i)
{
    unsigned char j;
    for(i; i > 0; i--)
        for(j = 255; j > 0; j--);
}

如下
while(1)
{
LED=0XFE;
        for(i=8;i<0;i--)
        {
        P2=LED;
        LED=_clro_(LED,1);
        delay(1);
        }
        for(;i<8;i++)
        {
        P2=LED;
        LED=_clrl(LED,1);
        delay(1);
        }
}

先把LED = 0xfe;改成LED = 0x01;
后面的我没看了

往左走的就行啦,但往右的就不行啦!

0xfe=1111 1110  你这相当于是只是最后一个灯不亮其他的灯亮,你改成0x01试试看可以吗

其实一样的效果可以有不同的方法可以解决的。你的这个问题有一种更简单的方法就是:通过数组去实现,你把走马灯的现象对应的值放在数组中,用两个for循环可以实现左右跑马。

往左走的就行啦,但往右的就不行啦!

要注意共阴共阳问题,0XFE和0X01没啥区别的。还是要自己分析的

我的意思是想用位移去解决这个问题。

创建目标 '目标 1'
编译 led-6-6.c ...
LED-6-6.C(15): 警告 C206: '_clro_': missing function-prototype
LED-6-6.C(15): 错误 C267: '_clro_': requires ANSI-style prototype
目标未产生
是什么意思呀?

#include <intrins.h>
最顶部加入这个头文件

这是他写的有错误,【_clro】应为【_clro_】才对。
另外,有些程序你不要直接复制,最好是手工输入。因为有的人会无意之间用中文输入字符,程序对中文字符是不认的,这一点一定要注意!
祝你编译成功!

首先感谢:《music_mc》的提点,令我认识到#include <intrins.h>这个头文件的用处。
重新整理程序如下:
#include <reg52.h>
#include <intrins.h>
void delay(unsigned int i);  
char LED;
main()
{
  unsigned char i;
  while(1)
  {
    LED=0x01;                                       
        for(i=0;i<7;i++)
        {
        P1=LED;
        LED=_crol_(LED,1);           
        delay(100);
        }
        for(i=0;i<7;i++)
        {
        P1=LED;
        LED=_cror_(LED,1);           
        delay(100);
        }
   }
}

/*******延时函数*************/
void delay(unsigned int i)
{
    unsigned char j;
    for(i; i > 0; i--)
        for(j = 250; j > 0; j--);
}
非常感谢各位大大的指点。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top