请教一个LCD划线的程序!这个程序实在看不明白!<br />要求要简化它,不要每个点来判断一次,要按照步长来判断!<br />就是说要划虚线!谢谢那位大侠能帮我分析分析~<br />//划线<br />void DrawLine(unsigned int intStarX_Addr,unsigned int intStarY_Addr,unsigned int intEndX_Addr,unsigned int intEndY_Addr)<br />{<br /> unsigned char ReadData;<br /> unsigned int ErrDataX=0; //X方向公差<br /> unsigned int ErrDataY=0; //Y方向公差<br /> unsigned int PointNum=0;<br /> unsigned long Temp;<br /> unsigned int D_X; //X坐标差<br /> unsigned int D_Y; //Y坐标差<br /> unsigned int MaxErrData; //X坐标差和Y坐标差中的最大值<br /> unsigned int OffsetX; //X方向修改值<br /> unsigned int OffsetY; //Y方向修改值<br /> unsigned int PX=intStarX_Addr; //X点坐标<br /> unsigned int PY=intStarY_Addr; //Y点坐标<br /> unsigned int EX=intEndX_Addr;<br /> unsigned int EY=intEndY_Addr;<br /> <br />// EX=intEndX_Addr;<br />// EY=intEndY_Addr;<br /> <br /> D_X=ABS(PX,EX); //D_X=|intEndX_Addr-intStarX_Addr|<br /> D_Y=ABS(PY,EY); //D_Y=|intEndY_Addr-intStarY_Addr|<br /> MaxErrData=Max(D_X,D_Y); //MaxErrData=max(D_X,D_Y)<br /> if((PX==EX)&&(PY==EY))<br /> {<br /> ReadData=ReadSram_one_Data(PX,PY);<br /> ReadData=BitTurnOver(ReadData,0);<br /> if(bCPL==false) <br /> ReadData=ReadData|0x01;<br /> WriteSram_one_Data(PX,PY,ReadData);<br /> }<br /> else<br /> {<br /><br /> if(EX>PX)<br /> OffsetX=1; //intEndX_Addr>intStarX_Addr<br /> else if(EX<PX)<br /> OffsetX=0xffff; //intEndX_Addr<intStarX_Addr<br /> else<br /> OffsetX=0; //intEndX_Addr=intStarX_Addr<br /> if(EY>PY)<br /> OffsetY=1; //intEndY_Addr>intStarY_Addr<br /> else if(EY<PY)<br /> OffsetY=0xffff; //intEndY_Addr<intStarY_Addr<br /> else<br /> OffsetY=0; //intEndY_Addr=intStarY_Addr<br /> do<br /> {<br /> if(PointNum%Step==0)<br /> {<br /> ReadData=ReadSram_one_Data(PX,PY);<br /> ReadData=BitTurnOver(ReadData,0);<br /> if(bCPL==false) <br /> ReadData=ReadData|0x01;<br /> WriteSram_one_Data(PX,PY,ReadData);<br /> }<br /> Temp=(unsigned long)ErrDataX+D_X;<br /> if(Temp>=0x10000)<br /> {<br /> ErrDataX=ErrDataX+D_X;<br /> ErrDataX=ErrDataX-MaxErrData;<br /> PX=PX+OffsetX;<br /> }<br /> else<br /> {<br /> ErrDataX=ErrDataX+D_X;<br /> if(ErrDataX>=MaxErrData)<br /> {<br /> ErrDataX=ErrDataX-MaxErrData;<br /> PX=PX+OffsetX;<br /> } <br /> }<br /> Temp=(unsigned long)ErrDataY+D_Y;<br /> if(Temp>=0x10000)<br /> {<br /> ErrDataY=ErrDataY+D_Y;<br /> ErrDataY=ErrDataY-MaxErrData;<br /> PY=PY+OffsetY;<br /> }<br /> else<br /> {<br /> ErrDataY=ErrDataY+D_Y;<br /> if(ErrDataY>=MaxErrData)<br /> {<br /> ErrDataY=ErrDataY-MaxErrData;<br /> PY=PY+OffsetY;<br /> }<br /> }<br /> PointNum++;<br /> }while(PointNum!=MaxErrData);<br /> ReadData=ReadSram_one_Data(PX,PY);<br /> ReadData=BitTurnOver(ReadData,0);<br /> if(bCPL==false) <br /> ReadData=ReadData|0x01;<br /> WriteSram_one_Data(EX,EY,ReadData);<br /> }<br />} |
|