左图是原图,右图是
仿真出来的图
用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 ) ;
- }
复制代码
k=16,一次会写一个byte进去,也就是8个点,写16次正好一行128个点。k就是16吧
另外还有12864显示的方向,是一个字节代表横向显示,还是纵向显示。j的范围是32,这个也只是64的一半。
个人认为应该写个测试程序,能够显示全屏,来判断12864的各个参数
感谢你耐心的回复。
i的确是用来区分两个屏的,不过是上下两个屏。我用的这个12864在绘图显示模式的时候,分成上下两个128*32的屏幕。
显示的方向,是一个字节横向显示。每2个字节组成水平方向的基本单位,所以上半个屏幕的横坐标是0~7,下半个屏幕的横坐标是8~15。如图
我看器件手册上面说,在写入的时候不需要手动改横坐标,每写完2个字节横坐标会自动加1,这也就是为什么我只设置了两次横坐标 :sendCmd(0x80) 写上半个屏幕的时候;sendCmd(0x88)。(0x80和0x88的低几位才是用来存储地址信息的)。我怀疑是水平方向的地址没有自动增加,导致只有0x80和0x88这两个水平位置所对应的这一大列写入了数据。
j是用来写半个屏幕的,上面半个屏幕32行,下面也是。
我下去写一下测试的程序。
再次感谢你耐心的回复!
不是超出范围了,是绘图的时候,水平方向的地址没有自动增加(手册上说会自动增加的),每写完16位之后手动设置水平地址再写就能够正常显示了。至于为什么水平地址没有自增,我也不知道。
一周热门 更多>