一个C51不明白的问题,请大侠们看一下程序

[复制链接]
2720|4
 楼主| cbbs 发表于 2007-9-28 12:47 | 显示全部楼层 |阅读模式
C51, tmp, dc, ST, TE
不知道为什么?程序经过一个乘法( k =((int)tmp)*k;)之后,结果就变为0了?是什么原因呢?
压缩文件是KEIL C51工程文件。


void LCDLineXy(signed char  x1,signed char y1,signed char  x2,signed char  y2)
{

    signed char data bi,s,i,step,f,tmp;
    volatile int data  k;
    if(cabs(x2-x1)>=cabs(y2-y1))
    {

        bi=x2-x1;
        s=y2-y1;
        f=1;
    }
    else
    {
        bi=y2-y1;
        s=x2-x1;
        i=x1;
        x1=y1;
        y1=i;
        f=0;
    }
    k= s*256/bi ;
    step=bi<0?-1:1;
    for(i=x1;i!=bi-step;i+=step)
    {

        tmp=i-x1;
        k =((int)tmp)*k;
         //不知道为什么?在这里,运行K后,k总是为0?
        Print(k);
        //Print(tmp);
        if(*((uchar data *)(&k)+1) & 0x80 )
        {

            *((uchar data *)(&k))+=1;
        }
        
        if(f)
        {

            LCDPixel(i,*((uchar data *)(&k))+y1,1);
        }
        else
        {
            LCDPixel(*((uchar data *)(&k))+y1,i,1);
        }
    }

    k=k*1;
}

相关链接:https://bbs.21ic.com/upfiles/img/20079/2007928124639962.rar
zhaoyu2005 发表于 2007-9-28 14:40 | 显示全部楼层

不等于0就有问题了

for(i=x1;i!=bi-step;i+=step)
    {
        tmp=i-x1;
        k =((int)tmp)*k;
进入循环第一次:i=x1,所以tmp=i-x1=0;
说k=0;0再与其他数相乘结果当然等于0了
 楼主| cbbs 发表于 2007-9-28 15:15 | 显示全部楼层

谢谢!

原来这样
ksslx 发表于 2007-9-28 17:50 | 显示全部楼层

呵呵

呵呵 楼主跟我一样笨阿  哈哈
yongzai 发表于 2011-5-7 12:07 | 显示全部楼层
看懂了原因,看不懂程序
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

16

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部