打印

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

[复制链接]
1972|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 | 只看该作者

呵呵

呵呵 楼主跟我一样笨阿  哈哈

使用特权

评论回复
5
yongzai| | 2011-5-7 12:07 | 只看该作者
看懂了原因,看不懂程序

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

16

帖子

0

粉丝