基于51单片机的lcd12864的画图程序

基于51单片机的lcd12864的画图程序

ID:40160745

大小:416.98 KB

页数:11页

时间:2019-07-24

基于51单片机的lcd12864的画图程序_第1页
基于51单片机的lcd12864的画图程序_第2页
基于51单片机的lcd12864的画图程序_第3页
基于51单片机的lcd12864的画图程序_第4页
基于51单片机的lcd12864的画图程序_第5页
资源描述:

《基于51单片机的lcd12864的画图程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、1、打点部分/********************************************************名称:GUI_Point(打点)说明:X:横坐标(代表列的位置,0~127)Y:纵坐标(代表行的位置,0~63)根据Datesheet需先把数据写到GDRAM,读取当前位置的数据,经过或和移位后再把数据重新写入GDRAM每行有16个位元,共64行,每个位元有两个8位(高低8位)计算出在那个位元,在该位元的哪一位易出现的问题:1、打点位置的定位2、读取当前显示的数据3、或和移位,即重新写人的新数据**************************

2、******************************/voidGUI_Point(ucharx,uchary,ucharflag){ucharx_Dyte,x_byte;//定义列地址的字节位,及在字节中的哪1位uchary_Dyte,y_byte;//定义为上下两个屏(取值为0,1),行地址(取值为0~31)Write_command(0x36);//绘图模式命令/***X,Y坐标互换,即普通的X,Y坐标***/x_Dyte=x/16;//计算在16个字节中的哪一个x_byte=x&0x0f;//计算在该字节中的哪一位y_Dyte=y/32;//0为上半屏,1

3、为下半屏y_byte=y&0x1f;//计算在0~31当中的哪一行Write_command(0x80+y_byte);//设定行地址(y坐标)Write_command(0x80+x_Dyte+8*y_Dyte);//设定列地址(x坐标),并通过8*y_Dyte选定上下屏Read_data();GDRAM_hbit=Read_data();//读取当前显示高8位数据GDRAM_lbit=Read_data();//读取当前显示低8位数据delay_us(5);if(flag==1){Write_command(0x80+y_byte);//设定行地址(y坐标)Writ

4、e_command(0x80+x_Dyte+8*y_Dyte);//设定列地址(x坐标),并通过8*y_Dyte选定上下屏delay_us(5);if(x_byte<8)//判断其在高8位,还是在低8位{Write_data(GDRAM_hbit

5、(0X01<<(7-x_byte)));//显示GDRAM区高8位数据Write_data(GDRAM_lbit);//显示GDRAM区低8位数据}else{Write_data(GDRAM_hbit);Write_data(GDRAM_lbit

6、(0x01<<(15-x_byte)));}}else{Write_data(0

7、x00);//清除GDRAM区高8位数据Write_data(0x00);//清除GDRAM区低8位数据}}2、画线部分先看程序/*********************************************************名称:GUI_Line()采用布兰森汉姆(Bresenham)算法画线*功能:任意两点间的直线。根据硬件特点,实现加速。*入口参数:x0直线起点所在行的位置*y0直线起点所在列的位置*x1直线终点所在行的位置‘y1直线终点所在列的位置*出口参数:无*说明:操作失败原因是指定地址超出缓冲区范围。*******************

8、**************************************/voidGUI_Line8(ucharx0,uchary0,ucharx1,uchary1){inttemp;intdx,dy;//定义起点到终点的横、纵坐标增加值ints1,s2,status,i;intDx,Dy,sub;dx=x1-x0;if(dx>=0)//X的方向是增加的s1=1;else//X的方向是降低的s1=-1;dy=y1-y0;//判断Y的方向是增加还是降到的if(dy>=0)s2=1;elses2=-1;Dx=fabs(x1-x0);//计算横、纵标志增加值的绝对值Dy=

9、fabs(y1-y0);if(Dy>Dx)//{//以45度角为分界线,靠进Y轴是status=1,靠近X轴是status=0temp=Dx;Dx=Dy;Dy=temp;status=1;}elsestatus=0;/********判断垂直线和水平线********/if(dx==0)//横向上没有增量,画一条水平线GUI_XLine(x0,y0,y1,1);if(dy==0)//纵向上没有增量,画一条垂直线GUI_YLine(x0,y0,x1,1);/*********Bresenham算法画任意两点间的直线********/sub=

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。