12864高级应用

12864高级应用

ID:42405471

大小:166.00 KB

页数:8页

时间:2019-09-14

12864高级应用_第1页
12864高级应用_第2页
12864高级应用_第3页
12864高级应用_第4页
12864高级应用_第5页
资源描述:

《12864高级应用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、玩转12864液晶(2)--显示图片,画点,画任意直线通过上一篇的实验,相信大家都掌握了显示字符的基本用法。下面我们来看一下12864液晶更高级的用法。首先是它的绘图功能。让我们先来显示一整副的图片吧,也就是128x64大小。在使用绘图功能时,先要打开扩充指令集,然后再打开绘图功能。接着就是送数据显示了。这里我们首先要弄明白ST7920的显示坐标关系。其显示坐标如下。从图中可以看出,X方向共有8个字(16个字节)Y方向共有0~31行分为上下两个屏。弄懂了之后我们就可以依照此坐标来显示一整屏的图片

2、了。随便用一个图片的提取转换软件,讲一副126X64大小的图片转换成字节数据,总共字节大小为128*64/8=1024个字节。下面我们来看看这个显示整屏图像的函数voidv_Lcd12864DrawPicture_f(unsignedcharcode*pPicture){unsignedchari,j,k;for(i=0;i<2;i++)//分上下两屏写{for(j=0;j<32;j++){v_Lcd12864SendCmd_f(0x80+j);//写Y坐标if(i==0)//写X坐标{v_Lc

3、d12864SendCmd_f(0x80);}else{v_Lcd12864SendCmd_f(0x88);}for(k=0;k<16;k++)//写一整行数据{v_Lcd12864SendData_f(*pPicture++);}}}v_Lcd12864SendCmd_f(0x30);}看看效果图片如下:显示一个人的图像下面来看看如何在任意一个位置显示或者是擦除一个点对于12864这种二值显示屏来说,其显示状态无外乎显示和不显示一个点这两种状态。而在任意位置画点,是我们随心所欲的画线,画圆,画

4、矩形的等GUI函数的基础。为了让这个位置有一个参考点,我们有必要定义一个坐标系在这里,我定义的坐标系如下0,0------------------------------------127,0

5、

6、

7、

8、

9、

10、

11、

12、0,63----------------------------------127,630,0代表屏幕的左上角,127,63代表屏幕的右下角。对于屏幕上面任意一个点,如果我们想要点亮它,必须先读出此点的状态,然后再修改该点,最后送出去,即读----修改----写。按照这个步骤,然后再运用C语

13、言中的位操作运算符可以很方便的完成画点的函数。由于画点函数涉及到读ST7920内部RAM的操作,因此,我们必须先要完成这个读数据的函数具体实现过程如下:unsignedcharu8_Lcd12864ReadByte_f(void){unsignedcharbyReturnValue;v_Lcd12864CheckBusy_f();io_LCD12864_DATAPORT=0xff;SET_DATASET_READCLR_ENSET_ENbyReturnValue=io_LCD12864_DATA

14、PORT;CLR_ENreturnbyReturnValue;}然后是画点的函数,其实现过程如下:voidv_Lcd12864DrawPoint_f(unsignedcharX,unsignedcharY,unsignedcharColor){unsignedcharRow,Tier,Tier_bit;unsignedcharReadOldH,ReadOldL;v_Lcd12864SendCmd_f(0x34);v_Lcd12864SendCmd_f(0x36);Tier=X>>4;Tier_b

15、it=X&0x0f;if(Y<32){Row=Y;}else{Row=Y-32;Tier+=8;}v_Lcd12864SendCmd_f(Row+0x80);v_Lcd12864SendCmd_f(Tier+0x80);u8_Lcd12864ReadByte_f();ReadOldH=u8_Lcd12864ReadByte_f();ReadOldL=u8_Lcd12864ReadByte_f();v_Lcd12864SendCmd_f(Row+0x80);v_Lcd12864SendCmd_f(

16、Tier+0x80);if(Tier_bit<8){switch(Color){case0:ReadOldH&=(~(0x01<<(7-Tier_bit)));break;case1:ReadOldH

17、=(0x01<<(7-Tier_bit));break;case2:ReadOldH^=(0x01<<(7-Tier_bit));break;default:break;}v_Lcd12864SendData_f(ReadOldH);v_Lcd12864SendData_f(ReadOldL);}

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

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

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