led左移问题求解

2019-03-24 19:06发布

/*8X8行扫描,左移显示*/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int uchar code TAB[]={0xFF,0xF7,0xFB,0x81,0xFB,0xF7,0xFF,0xFF};
uchar i,t,j=0; delay(uchar t)
{
while (t--)
{;}
} void main(void)
{ uchar T,Y,Q;
while(1)
   {
   for(Q=0;Q<8;Q++)
    for(T=0;T<100;T++)    //速度
      {
    P2=0x01;
          for(i=0;i<8;i++)
         {
       Y=TAB[i+1]*256+TAB;
    Y=Y<<(7-Q)|Y>>Q;
    P1=Y%256;
    delay(60);
    P2=P2<<1|P2>>7;
       }
    }
}
}   这段代码是别人写的   Y=TAB[i+1]*256+TAB;
    Y=Y<<(7-Q)|Y>>Q;
    P1=Y%256;
这几句看不懂   我的分析是这样的 Y=TAB[i+1]*256+TAB;   首先定义的Y是uchar类型,一次只能装8位,其次TAB[i+1]*256相当于左移8位,但是你的数组的类型也是uchar,如果这样的话移掉的8位放哪? 实在是想不通 求大师解释下 谢谢 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
king3306
2019-03-24 21:14
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned intuchar code TAB[]={0xFF,0xF7,0xFB,0x81,0xFB,0xF7,0xFF,0xFF};
uchar i,t,j=0;delay(uchar t)
{
while (t--)
{;}
}void main(void)
{ uchar T,Y,Q;
while(1)
   {
   for(Q=0;Q<8;Q++)
    for(T=0;T<100;T++)    //速度
      {
    P2=0x01;
          for(i=0;i<8;i++)
         {
       Y=TAB[i+1]*256+TAB;
    Y=Y<<(7-Q)|Y>>Q;
    P1=Y%256;
    delay(60);
    P2=P2<<1|P2>>7;
       }
    }
}
}

上面程序掉了一个【i】

这个是完整的程序

一周热门 更多>