LCD12864显示不全

2019-07-15 08:34发布

捕获2.PNG 捕获1.PNG
左图是原图,右图是仿真出来的图
用LCD12864显示图片的时候,水平方向只有屏幕左边16个点会显示,垂直方向能够全部显示,大家能够帮忙回答一下吗?谢谢
  1. void v_Lcd12864DrawPicture_f( unsigned char code *pPicture )
  2. {
  3.     unsigned char i, j, k ;
  4.           v_Lcd12864SendCmd_f( 0x34 );
  5.     for( i = 0 ; i < 2 ; i++ )//·ÖÉÏÏÂÁ½ÆÁд
  6.     {
  7.         for( j = 0 ; j < 32 ; j++ )
  8.         {
  9.             v_Lcd12864SendCmd_f( 0x80 + j ) ;//дY×ø±ê
  10.                                                 if( i == 0 )                    //дX×ø±ê
  11.             {
  12.                 v_Lcd12864SendCmd_f( 0x80 ) ;
  13.             }
  14.             else
  15.             {
  16.                 v_Lcd12864SendCmd_f( 0x88 ) ;
  17.             }
  18.             for( k = 0 ; k < 16 ; k++ )      //дһÕûÐÐÊý¾Ý
  19.             {
  20.                 v_Lcd12864SendData_f( *pPicture++ ) ;
  21.             }
  22.         }
  23.     }
  24.                 v_Lcd12864SendCmd_f( 0x36 ) ;
  25.     v_Lcd12864SendCmd_f( 0x30 ) ;
  26. }
复制代码

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
lian_dong
1楼-- · 2019-07-15 13:20
人中狼 发表于 2018-4-24 18:59
你的程序里K的循环就是只有16个,改成64试试吧

k=16,一次会写一个byte进去,也就是8个点,写16次正好一行128个点。k就是16吧
人中狼
2楼-- · 2019-07-15 16:55
确定一下你选用的12864的参数吧,i=0和1,应该时左右屏的判断,如果分左右屏的话,那就是两个64X64点的屏,最多也只需要写64个点,而不是128个。
另外还有12864显示的方向,是一个字节代表横向显示,还是纵向显示。j的范围是32,这个也只是64的一半。
个人认为应该写个测试程序,能够显示全屏,来判断12864的各个参数
lian_dong
3楼-- · 2019-07-15 18:59
人中狼 发表于 2018-4-24 20:25
确定一下你选用的12864的参数吧,i=0和1,应该时左右屏的判断,如果分左右屏的话,那就是两个64X64点的屏,最多也只需要写64个点,而不是128个。
另外还有12864显示的方向,是一个字节代表横向显示,还是纵向显示。j的范围是32,这个也只是64的一半。
个人认为应该写个测试程序,能够显示全屏,来判断12864的各个参数 ...

感谢你耐心的回复。
i的确是用来区分两个屏的,不过是上下两个屏。我用的这个12864在绘图显示模式的时候,分成上下两个128*32的屏幕。
显示的方向,是一个字节横向显示。每2个字节组成水平方向的基本单位,所以上半个屏幕的横坐标是0~7,下半个屏幕的横坐标是8~15。如图 捕获.PNG
我看器件手册上面说,在写入的时候不需要手动改横坐标,每写完2个字节横坐标会自动加1,这也就是为什么我只设置了两次横坐标 :sendCmd(0x80)  写上半个屏幕的时候;sendCmd(0x88)。(0x80和0x88的低几位才是用来存储地址信息的)。我怀疑是水平方向的地址没有自动增加,导致只有0x80和0x88这两个水平位置所对应的这一大列写入了数据。
j是用来写半个屏幕的,上面半个屏幕32行,下面也是。
我下去写一下测试的程序。
再次感谢你耐心的回复!
@曲终人散@
4楼-- · 2019-07-15 22:34
很有可能的原因是你的显示超出了范围
TravelingLight1
5楼-- · 2019-07-16 00:06
 精彩回答 2  元偷偷看……
lian_dong
6楼-- · 2019-07-16 02:33
@曲终人散@ 发表于 2018-4-25 18:26
很有可能的原因是你的显示超出了范围

不是超出范围了,是绘图的时候,水平方向的地址没有自动增加(手册上说会自动增加的),每写完16位之后手动设置水平地址再写就能够正常显示了。至于为什么水平地址没有自增,我也不知道。

一周热门 更多>