OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4007|回复: 3

液晶显示图片问题

[复制链接]

23

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2015-7-1
在线时间
2 小时
发表于 2015-8-12 20:47:31 | 显示全部楼层 |阅读模式
5金钱
我用的ILI9341的液晶驱动 16位并口的
想在液晶上显示一张图片,调用了原子的
void LCDOpenWindows(u16 x, u16 y, u16 len, u16 wid)
{
        LCD_WR_REG(0X2A); 
        LCD_WR_DATA(x>>8);        //start 
        LCD_WR_DATA(x-((x>>8)<<8));
        LCD_WR_DATA((x+len-1)>>8);        //end
        LCD_WR_DATA((x+len-1)-(((x+len-1)>>8)<<8));
        
        LCD_WR_REG(0X2B); 
        LCD_WR_DATA(y>>8);   //start
        LCD_WR_DATA(y-((y>>8)<<8));
        LCD_WR_DATA((y+wid-1)>>8);   //end
        LCD_WR_DATA((y+wid-1)-(((y+wid-1)>>8)<<8));        
        LCD_WR_REG(0x2C); 
}

/****************************************************************************
* 名    称:void ili9341_DrawPicture(u16 StartX,u16 StartY,u16 EndX,u16 EndY,u16 *pic)
* 功    能:在指定座标范围显示一副图片
* 入口参数:StartX     行起始座标
*           StartY     列起始座标
*           EndX       行结束座标
*           EndY       列结束座标
            pic        图片头指针
* 出口参数:无
* 说    明:图片取模格式为水平扫描,16位颜色模式
* 调用方法:ili9320_DrawPicture(0,0,100,100,(u16*)demo);
****************************************************************************/
void ili9341_DrawPicture(u16 StartX,u16 StartY,u16 Xend,u16 Yend,u16 *pic)
{
        static        u16 i=0,j=0;
  
  u16 *bitmap = (u16 *)pic;
        
        LCDOpenWindows(StartX,StartY,Xend,Yend);
        
        for(i=0;i<Yend;i++)
        {
                for(j=0;j<Xend;j++) LCD_WriteRAM(*bitmap++);         
        }
        
}
显示出来的效果不仅是乱的,而且把主页右边的的蓝色框框也弄没了,这是为什么呀?不解
程序不是打开一个窗口,然后我把图片放在哪个窗口上吗?

最佳答案

查看完整内容[请看2#楼]

回复【3楼】正点原子: --------------------------------- ok 已经解决 今天下午遇到了一个很奇怪的问题 我在不给液晶刷屏的情况下让"*"这个符号通过按键上移下移,同时我给上一个状态为" "来清除"*"这个符号, 但是实际效果却不是这样的  "*"这个符号一直存在,等于说整个列都是"*" 这是为什么," "这个不是清除了上一个"*"吗?   if(Content_Table ==0 && bit0 == 0)//第一层 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

23

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2015-7-1
在线时间
2 小时
 楼主| 发表于 2015-8-12 20:47:32 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
ok 已经解决
今天下午遇到了一个很奇怪的问题
我在不给液晶刷屏的情况下让"*"这个符号通过按键上移下移,同时我给上一个状态为" "来清除"*"这个符号,
但是实际效果却不是这样的 
"*"这个符号一直存在,等于说整个列都是"*"
这是为什么," "这个不是清除了上一个"*"吗?
  if(Content_Table ==0 && bit0 == 0)//第一层 bit0为下移
        {
         Gui_Drawchar(0, ((page+1)* 40),BLUE,BLUE, "*");
         Gui_Drawchar(0, ((page)* 40),GRAY,GRAY, "  ");  
          
        }
        else if(Content_Table ==0 && bit1 == 0)第一层 bit1为上移
        {
         Gui_Drawchar(0, ((page+1)* 40),BLUE,BLUE, "*");
         Gui_Drawchar(0, ((page+2)* 40),BLUE,BLUE, "  ");           

        }
这是我的测试代码
回复

使用道具 举报

23

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2015-7-1
在线时间
2 小时
 楼主| 发表于 2015-8-13 10:50:28 | 显示全部楼层
我将FILL填充参数改成了显示图片的函数,将两个8位合成一个16位来显示
但是显示效果不对,分成两半了,怎么改也没办法,不知道什么原因
原子哥,求帮助.
void LCD_Fill2(u16 xsta,u16 ysta,u16 xend,u16 yend)
{
        u16 i,j;
        u16 xlen=0; 
u16 temp =0;
u16 k=0;

        xlen=xend-xsta+1;           
        for(i=ysta;i<=yend;i++)
        {
                 LCD_SetCursor(xsta,i);      //设置光标位置 
                LCD_WriteRAM_Prepare();     //开始写入GRAM          
                for(j=0;j<xlen;j++)
{
if( k < sizeof(gImage_111) )
{
temp = gImage_111[k] |(gImage_111[k+1]<<8);
LCD_WriteRAM(temp);//设置光标位置    
k = k + 2 ;
}
}
        }

}



这是要显示的图片
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-13 21:38:48 | 显示全部楼层
仿真.....
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-17 23:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表