从网络论坛看到一篇十分有意义的帖子,分享给大家,来源51hei


在连续多天拜读了 51hei论坛 多位前辈的程序下。这几天终于把12864绘图功能搞懂了,其中最让我迷惑的就是它XY坐标的确定,后来才知道12864规定先写入垂直Y坐标,再写入水平X坐标,具体的讲解我都写到word文档里面了,先秀图。。
image.png

显示屏

image.png

细节文档

image.png

屏幕坐标

上半屏和下半屏的地址就是这样子,其中水平X以16位即两个字节为一个地址,垂直Y轴以一位(bit)为一个地址。
上面左半边的就是和12864显示屏上半屏对应的,右半边是和12864显示屏下半屏对应的,这样我们在确定XY坐标的时候就清楚多了。看一段程序:

image.png

在进行上下半屏地址转换的时候,垂直Y坐标都是从0x80开始加,而水平X坐标在上半屏是从0x80加,在下半屏从0x88开始加。我的图像显示处理程序:

代码截图

image.png

字母取模

image.png

软件图标

image.png

软件设置

在旁边设置成单色,像素设成128X64,输出格式设成bmp就行了,然后就可以随便把一张jpg图片保存成bmp格式的了。
等把绘图掌握了,大家也可以继续深究一下,写一些画曲线,直方图,椭圆等的绘图函数,就这么多了,祝大家学习愉快
            ^—^

临走之际秀一张图片....

image.png

叶师傅

//------------在任意位置开始显示图画------------------
  • void LCD12864_set_tu(uchar X,uchar Y,uchar *tu,uchar wide,uchar high)
  • {
  •          //Y确定开始行,X确定列(0-7),tu是点阵字模数据
  •          uint hang,lie;
  •          write_12864cmd(extra_cmd);//打开扩展指令集
  •          write_12864cmd(tu_off);//绘图显示关
  •          if(wide%8==0) wide=wide/8;
  •          else wide=wide/8+1;
  •        for(hang=0;hang<high;hang++)
  •         {
  •                    if(Y+hang>31)                          //上下屏地址转换
  •                   {
  •                            write_12864cmd(0x80+Y+hang-32);//先写Y轴坐标
  •                          write_12864cmd(0x88+X);//再写X轴坐标  ,(0x88-0x8f)
  •                   }                                                        //这里X只需写(0-7)
  •                   else
  •                   {
  •                            write_12864cmd(0x80+Y+hang);//先写Y轴坐标
  •                          write_12864cmd(0x80+X);//再写X轴坐标  ,(0x80-0x87)
  •                   }
  •                   for(lie=0;lie<wide;lie++) 根据列宽逐行写入数据
  •                   {                                                                           //宽占几字节,就写几字节
  •                             write_12864dat(tu[hang*wide+lie]);//每行写入wide个字节数据
  •                   }                  
  •        }
  •          write_12864cmd(tu_on);//绘图显示开
  •          write_12864cmd(com_cmd);//回到基本指令集
  • }
  • 复制代码