左图是原图,右图是
仿真出来的图
用LCD12864显示图片的时候,水平方向只有屏幕左边16个点会显示,垂直方向能够全部显示,大家能够帮忙回答一下吗?谢谢
- void v_Lcd12864DrawPicture_f( unsigned char code *pPicture )
- {
- unsigned char i, j, k ;
- v_Lcd12864SendCmd_f( 0x34 );
- for( i = 0 ; i < 2 ; i++ )//·ÖÉÏÏÂÁ½ÆÁд
- {
- for( j = 0 ; j < 32 ; j++ )
- {
- v_Lcd12864SendCmd_f( 0x80 + j ) ;//дY×ø±ê
- if( i == 0 ) //дX×ø±ê
- {
- v_Lcd12864SendCmd_f( 0x80 ) ;
- }
- else
- {
- v_Lcd12864SendCmd_f( 0x88 ) ;
- }
- for( k = 0 ; k < 16 ; k++ ) //дһÕûÐÐÊý¾Ý
- {
- v_Lcd12864SendData_f( *pPicture++ ) ;
- }
- }
- }
- v_Lcd12864SendCmd_f( 0x36 ) ;
- v_Lcd12864SendCmd_f( 0x30 ) ;
- }
复制代码
不是超出范围了,是绘图的时候,水平方向的地址没有自动增加(手册上说会自动增加的),每写完16位之后手动设置水平地址再写就能够正常显示了。至于为什么水平地址没有自增,我也不知道。
- void v_Lcd12864DrawPicture_f( unsigned char code *pPicture )
- {
- unsigned char i, j, k ,test1,test2;
- v_Lcd12864SendCmd_f( 0x34 );//开扩展指令,同时关绘图显示
- for( j = 0 ; j < 32 ; j++ )
- {
- for( i = 0 ; i < 8 ; i++ )//水平坐标地址
- {
- v_Lcd12864SendCmd_f( 0x80 + j ) ;//写Y坐标
- v_Lcd12864SendCmd_f( 0x80+i ) ; //写X坐标
- for (k = 0 ; k < 2 ; k++) //写16位数据
- {
- v_Lcd12864SendData_f( *pPicture++ ) ;
- // v_Lcd12864SendData_f( 0XFF ) ;
- // v_DelayMs_f(5);
- }
- }
- }
- for( j = 0 ; j < 32 ; j++ )
- {
- for( i = 8 ; i < 16 ; i++ )//水平坐标地址
- {
- v_Lcd12864SendCmd_f( 0x80 + j ) ;//写Y坐标
- v_Lcd12864SendCmd_f( 0x80+i ) ; //写X坐标
- for (k = 0 ; k < 2 ; k++) //写16位数据
- {
- v_Lcd12864SendData_f( *pPicture++ ) ;
- // v_Lcd12864SendData_f( 0XFF ) ;
- // v_DelayMs_f(5);
- }
- }
- }
- v_Lcd12864SendCmd_f( 0x36 ) ;//开绘图显示
- v_Lcd12864SendCmd_f( 0x30 ) ;//回到基本指令
- }
复制代码一周热门 更多>