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
2019-07-16 04:06
原因找到了,是绘图的时候,水平方向的地址没有自动增加(手册上说会自动增加的),每写完16位之后手动设置水平地址再写就能够正常显示了。至于为什么水平地址没有自增,我也不知道。附上修改后的代码:
  1. void v_Lcd12864DrawPicture_f( unsigned char code *pPicture )
  2. {
  3.     unsigned char i, j, k ,test1,test2;
  4.           v_Lcd12864SendCmd_f( 0x34 );//开扩展指令,同时关绘图显示
  5.             for( j = 0 ; j < 32 ; j++ )
  6.             {

  7.                            for( i = 0 ; i < 8 ; i++ )//水平坐标地址
  8.                     {
  9.                     v_Lcd12864SendCmd_f( 0x80 + j ) ;//写Y坐标

  10.                 v_Lcd12864SendCmd_f( 0x80+i ) ;          //写X坐标

  11.                                 for (k = 0 ; k < 2 ; k++)                  //写16位数据
  12.                                                 {
  13.                                                           v_Lcd12864SendData_f( *pPicture++ ) ;                         
  14.                 //                                          v_Lcd12864SendData_f( 0XFF ) ;
  15.                 //                                          v_DelayMs_f(5);
  16.                                                 }
  17.                 }
  18.             }

  19.             for( j = 0 ; j < 32 ; j++ )
  20.             {

  21.                            for( i = 8 ; i < 16 ; i++ )//水平坐标地址
  22.                     {
  23.                     v_Lcd12864SendCmd_f( 0x80 + j ) ;//写Y坐标

  24.                 v_Lcd12864SendCmd_f( 0x80+i ) ;          //写X坐标

  25.                                 for (k = 0 ; k < 2 ; k++)                //写16位数据
  26.                                                 {
  27.                                                           v_Lcd12864SendData_f( *pPicture++ ) ;
  28.                 //                                          v_Lcd12864SendData_f( 0XFF ) ;
  29.                 //                                          v_DelayMs_f(5);
  30.                                                 }
  31.                 }
  32.             }

  33.                 v_Lcd12864SendCmd_f( 0x36 ) ;//开绘图显示
  34.     v_Lcd12864SendCmd_f( 0x30 ) ;//回到基本指令
  35. }
复制代码

一周热门 更多>