打印

请教圈圈~一个LCD划线的程序!

[复制链接]
1557|1
手机看帖
扫描二维码
随时随地手机跟帖
沙发
llllwwww|  楼主 | 2009-6-22 14:07 | 只看该作者

原程序在此!

发现该程序可以运行,成熟的程序,就是效率难以令人满意!
简单说就是程序的执行时间太长,它是把EX,EY到PX,PY之间每个点都进行了处理,
现在要求只画简单的虚线,比如设置Step=20.请教圈圈这个程序应该怎么改?
问了很多人,都不晓得!只要来请教你了!
还有这个公差计算的方式也看不太明白~不过可以介绍一下!
有什么问题可以回复沟通!我天天在这个地方~
//划线
void DrawLine(unsigned int intStarX_Addr,unsigned int intStarY_Addr,unsigned int intEndX_Addr,unsigned int intEndY_Addr)
{
    unsigned char ReadData;
    unsigned int ErrDataX=0;                //X方向公差
    unsigned int ErrDataY=0;                //Y方向公差
    unsigned int PointNum=0;
    unsigned long Temp;
    unsigned int D_X;                    //X坐标差
    unsigned int D_Y;                    //Y坐标差
    unsigned int MaxErrData;                //X坐标差和Y坐标差中的最大值
    unsigned int OffsetX;                    //X方向修改值
    unsigned int OffsetY;                    //Y方向修改值
    unsigned int PX=intStarX_Addr;                //X点坐标
    unsigned int PY=intStarY_Addr;                //Y点坐标
    unsigned int EX=intEndX_Addr;
    unsigned int EY=intEndY_Addr;
    
//    EX=intEndX_Addr;
//    EY=intEndY_Addr;
    
    D_X=ABS(PX,EX);                        //D_X=|intEndX_Addr-intStarX_Addr|
    D_Y=ABS(PY,EY);                        //D_Y=|intEndY_Addr-intStarY_Addr|
    MaxErrData=Max(D_X,D_Y);                //MaxErrData=max(D_X,D_Y)
    if((PX==EX)&&(PY==EY))
    {
        ReadData=ReadSram_one_Data(PX,PY);
        ReadData=BitTurnOver(ReadData,0);
        if(bCPL==false)    
            ReadData=ReadData|0x01;
        WriteSram_one_Data(PX,PY,ReadData);
    }
    else
    {

        if(EX>PX)
            OffsetX=1;                //intEndX_Addr>intStarX_Addr
        else if(EX<PX)
            OffsetX=0xffff;                //intEndX_Addr<intStarX_Addr
        else
            OffsetX=0;                //intEndX_Addr=intStarX_Addr
        if(EY>PY)
            OffsetY=1;                //intEndY_Addr>intStarY_Addr
        else if(EY<PY)
            OffsetY=0xffff;                //intEndY_Addr<intStarY_Addr
        else
            OffsetY=0;                //intEndY_Addr=intStarY_Addr
        do
        {
            if(PointNum%Step==0)
            {
                 ReadData=ReadSram_one_Data(PX,PY);
                ReadData=BitTurnOver(ReadData,0);
                if(bCPL==false)    
                    ReadData=ReadData|0x01;
                WriteSram_one_Data(PX,PY,ReadData);
            }
            Temp=(unsigned long)ErrDataX+D_X;
            if(Temp>=0x10000)
            {
                ErrDataX=ErrDataX+D_X;
                ErrDataX=ErrDataX-MaxErrData;
                PX=PX+OffsetX;
            }
            else
            {
                ErrDataX=ErrDataX+D_X;
                if(ErrDataX>=MaxErrData)
                {
                    ErrDataX=ErrDataX-MaxErrData;
                    PX=PX+OffsetX;
                }    
            }
            Temp=(unsigned long)ErrDataY+D_Y;
            if(Temp>=0x10000)
            {
                ErrDataY=ErrDataY+D_Y;
                ErrDataY=ErrDataY-MaxErrData;
                PY=PY+OffsetY;
            }
            else
            {
                ErrDataY=ErrDataY+D_Y;
                if(ErrDataY>=MaxErrData)
                {
                    ErrDataY=ErrDataY-MaxErrData;
                    PY=PY+OffsetY;
                }
            }
            PointNum++;
        }while(PointNum!=MaxErrData);
        ReadData=ReadSram_one_Data(PX,PY);
        ReadData=BitTurnOver(ReadData,0);
        if(bCPL==false)    
            ReadData=ReadData|0x01;
        WriteSram_one_Data(EX,EY,ReadData);
    }
}    

使用特权

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

本版积分规则

91

主题

450

帖子

2

粉丝