12864液晶画点和画任意两点间直线原理.docx
-
资源ID:727527
资源大小:17.46KB
全文页数:3页
- 资源格式: DOCX
下载积分:3金币
快捷下载

账号登录下载
微信登录下载
三方登录下载:
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
12864液晶画点和画任意两点间直线原理.docx
12864液晶画点和画任意两点间直线原理、算法及程序原码笈仃:2009-11-1021:02|作苕:tiankai|来源:电子园电源技术专区12864液晶画点和画任意直线的原理和算法程序原码经验证可行12864实际上是256x64二维显示空间,整个液晶屏分上下两个半屏。整个屏一共有256列,64行。可以把它分成16大列,每一大列包含16歹h图形RAM的起始址址为0x80,设置读或写的地址时,要先写Y坐标,再写X坐标。要使用画图功能,就要设置扩允指令集。画点原理:先确定坐标一读出数据>修改数据一数据写回原处。程序原码:画点函数voidDraw_Point(ucharxzucharyzucharco1or)ucharrowztirzrow-bit;ucharReadOIdHzReadOId1;tier=x>>4;把256列分成16大列,每大列包含16列row_bit=x&0x0f;计算所给坐标在某一大列中的哪-列if(yv32)分上下半屏显示row=y;上半屏e1serow=y-32;下半屏tier+=8;WriteCommand(0×34);8Bit扩充指令集,即使是36H也要写两次WriteCommand(0x36);绘图ON,基本指令集里面36H不能开绘图WriteCommand(0x80+row);/行位置WriteCommand(0×80+tier);/歹U位置ReadData();ReadO1dH=ReadData。;某大歹IJ的前8歹IJ数据,低位在前,高位在后ReadOId1=ReadDataO;某大列的后8列数据if(row_bit<8)修改读出的数据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:ReadOId1=(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(x1<X<X2zYKY0时候,即下个点为(x+1,y+1),反之,下个点为(x+1,y).代入ab,则SUb1=dydx05判断条件为:2dydx>0?斜率小于0:同理。斜率=0:即为横线。斜率=1:即为竖线。程序原码:画任意两点间的直线voidDraw1ine(unsignedcharStartXzUnsignedcharStartYzunsignedcharEndXzunsignedcharEndY,unsignedcharCo1or)itI1distance;*根据屏幕大小改变变量类型(如改为int型)*/intX=O,y=O,de1ta_x,de1ta_y;charincxzincy;de1ta_x=EndX-StartX;de1ta_y=EndY-StartY"/判断直线的方向if(de1ta_x>O)inc×=1;画竖线e1seif(de1ta_x=O)if(de1ta_y>0)DrawTier1ine(StartXzStartYzEndY-StartYzCo1or);e1seDrawTier1ine(StartXzEndYzStartY-EndYzCo1or);return;e1seincx=-1;if(de1ta_y>O)incy=1;画横线e1seif(de1ta_y=O)if(de1ta_x>0)DrawRow1ine(StartYzStartX,EndX-StartXzCo1or);e1seDrawRow1ine(StartYzEndXzStartX-EndXzCo1or);return;e1seincy=-1;if(de1ta_x<0)de1ta_x=-de1ta_x;if(de1ta_y<0)de1ta_y=-de1ta_y;if(de1ta_x>de1ta_y)distance=de1ta_x;e1sedistance=de1ta_y;DrawPoint(StartXzStartYzCo1or);*Draw1ine*/for(t=0;t<=distance+1;t+)<DrawPoint(StartX,StartYzCo1or);x+=de1ta_x;y+=de1ta_y;/2dy-dx>0?if(x>distance)×-=distance;StartX+=inc×if(y>distance)y-=distance;StartY+=incy;