[求助] led左移问题求解

king3306   2012-6-28 21:28 楼主
/*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)

#include
#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】

这个是完整的程序
点赞  2012-6-28 21:32
感觉程序明显有错误   Y=TAB[i+1]*256+TAB;  后面这个 TAB 是哪个变量 你抄错了吧
TAB[i+1]*256 这个可能就是为了使的变量溢出清零吧  再加上TAB不就是 Y 现在的值了
点赞  2012-6-29 21:32
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复