《12864液晶画点和画任意两点间直线原理.docx》由会员分享,可在线阅读,更多相关《12864液晶画点和画任意两点间直线原理.docx(3页珍藏版)》请在第一文库网上搜索。
1、12864液晶画点和画任意两点间直线原理、算法及程序原码笈仃:2009-11-1021:02|作苕:tiankai|来源:电子园电源技术专区12864液晶画点和画任意直线的原理和算法程序原码经验证可行12864实际上是256x64二维显示空间,整个液晶屏分上下两个半屏。整个屏一共有256列,64行。可以把它分成16大列,每一大列包含16歹h图形RAM的起始址址为0x80,设置读或写的地址时,要先写Y坐标,再写X坐标。要使用画图功能,就要设置扩允指令集。画点原理:先确定坐标一读出数据修改数据一数据写回原处。程序原码:画点函数voidDraw_Point(ucharxzucharyzucharco
2、1or)ucharrowztirzrow-bit;ucharReadOIdHzReadOId1;tier=x4;把256列分成16大列,每大列包含16列row_bit=x&0x0f;计算所给坐标在某一大列中的哪-列if(yv32)分上下半屏显示row=y;上半屏e1serow=y-32;下半屏tier+=8;WriteCommand(034);8Bit扩充指令集,即使是36H也要写两次WriteCommand(0x36);绘图ON,基本指令集里面36H不能开绘图WriteCommand(0x80+row);/行位置WriteCommand(080+tier);/歹U位置ReadData();R
3、eadO1dH=ReadData。;某大歹IJ的前8歹IJ数据,低位在前,高位在后ReadOId1=ReadDataO;某大列的后8列数据if(row_bit8)修改读出的数据switch(co1or)case0:ReadOIdH&=(OxO1(7-row_bit);break;case1:ReadOIdH=(OxO1(7-row_bit);break;case2:ReadOIdH=(OxO1(7-row_bit);break;defau1t:break;e1se(SWitch(CoIor)case0:ReadOId1&=(OxO1(15-row_bit);break;case1:ReadOI
4、d1=(OxO1(15-row_bit);break;case2:ReadOId1=(OxO1(15-row_bit);break;defau1t:break;WriteCommand(0x80+row);/行位置WriteCommand(0x80+tier);/列位置WriteData(ReadOIdH);把修改后的数据写回原地址WriteData(ReadOId1);画任意两点间直线的原理和算法:采用Bresenham画线算法。设线段方程:a+by+c=0(x1X0?斜率小于0:同理。斜率=0:即为横线。斜率=1:即为竖线。程序原码:画任意两点间的直线voidDraw1ine(unsign
5、edcharStartXzUnsignedcharStartYzunsignedcharEndXzunsignedcharEndY,unsignedcharCo1or)itI1distance;*根据屏幕大小改变变量类型(如改为int型)*/intX=O,y=O,de1ta_x,de1ta_y;charincxzincy;de1ta_x=EndX-StartX;de1ta_y=EndY-StartY/判断直线的方向if(de1ta_xO)inc=1;画竖线e1seif(de1ta_x=O)if(de1ta_y0)DrawTier1ine(StartXzStartYzEndY-StartYzCo
6、1or);e1seDrawTier1ine(StartXzEndYzStartY-EndYzCo1or);return;e1seincx=-1;if(de1ta_yO)incy=1;画横线e1seif(de1ta_y=O)if(de1ta_x0)DrawRow1ine(StartYzStartX,EndX-StartXzCo1or);e1seDrawRow1ine(StartYzEndXzStartX-EndXzCo1or);return;e1seincy=-1;if(de1ta_x0)de1ta_x=-de1ta_x;if(de1ta_yde1ta_y)distance=de1ta_x;e1sedistance=de1ta_y;DrawPoint(StartXzStartYzCo1or);*Draw1ine*/for(t=0;t=distance+1;t+)0?if(xdistance)-=distance;StartX+=inc;if(ydistance)y-=distance;StartY+=incy;