1.44寸LCD如何显示图片,字符,字符串

显示图片

一般用Img2Lcd软件进行取模,配置如下

 取模出的.c文件数组元素的个数通常为宽*高*2,这是因为LCD的颜色命令为16位数据,而取模出的为8位数据,需要两个数组元素组成一个点的颜色数据,即(p[i]<<8)|p[i+1],先通过Lcd_SetRegion函数确定图像范围,再将每一个点的颜色数据送入LCD

/*************************************************
函数名:LCD_Set_Region
功能:设置lcd显示区域,在此区域写点数据自动换行
入口参数:xy起点和终点
返回值:无
*************************************************/
void Lcd_SetRegion(uint x_start,uint y_start,uint x_end,uint y_end)
{	
/*#ifdef 
	USE_LANDSCAPE//使用横屏模式
	Lcd_WriteIndex(0x2a);
	Lcd_WriteData(0x00);
	Lcd_WriteData(x_start+3);
	Lcd_WriteData(0x00);
	Lcd_WriteData(x_end+3);

	Lcd_WriteIndex(0x2b);
	Lcd_WriteData(0x00);
	Lcd_WriteData(y_start+2);
	Lcd_WriteData(0x00);
	Lcd_WriteData(y_end+2);
*/
//#else//竖屏模式	
	Lcd_WriteIndex(0x2a);
	Lcd_WriteData(0x00);
	Lcd_WriteData(x_start+2);
	Lcd_WriteData(0x00);
	Lcd_WriteData(x_end+2);

	Lcd_WriteIndex(0x2b);
	Lcd_WriteData(0x00);
	Lcd_WriteData(y_start+3);
	Lcd_WriteData(0x00);
	Lcd_WriteData(y_end+3);	
//#endif
	Lcd_WriteIndex(0x2c);
}

//显示图片
//x,y:起点坐标
//width,height:区域大小
//*p:图片起始地址
//高位在前
void LCD_ShowPicture(uint16_t x,uint16_t y,uint16_t width,uint16_t height,const unsigned char *p)
{
	uint16_t i=0,j=0;
	uint16_t pcolor = 0;
	//设置显示区域
	//设置光标位置(0x2A 0x2B)
	
	Lcd_SetRegion(x,y,x+width-1,y+height-1);

	//TFTLCD->LCD_REG=lcddev.wramcmd;//开始写入GRAM(0x2C)
	for(j=0;j<height;j++)
	{
		for(i=0;i<width;i++)
		{
			pcolor = (*p<<8)|(*(p+1));
			LCD_WriteData_16Bit(pcolor);  //写显示颜色
			p+=2;
		}
	}
}

显示汉字字符

/*************************************************
函数名:LCD_ShowChar
功能:写字符函数,阴码,高位在前,逐行式
入口参数:x,y:起始位置;*p:字符指针
返回值:无
*************************************************/
void LCD_ShowChar(uint x,uint y,uint16_t width,uint16_t heigth,const unsigned char *p,uint16_t char_color)
{
	//uchar a;
	int i,j;
	uint new_x,new_y;
	//Lcd_SetRegion(x,y,x+width-1,y+heigth-1);
	for(j=0;j<(width*heigth/8);j++)
	{
		for(i=0;i<8;i++)
		{
			new_y=y+(j*8+i)/width;
			new_x=x+(j*8+i)%width;
			//a=*p;
			if(((*p<<i)&0x80)==0x80)
				//LCD_WriteData_16Bit(char_color); //写显示颜色
			{
				Gui_DrawPoint(new_x,new_y,char_color);
			}
			
			//else 
				//LCD_WriteData_16Bit(back_color);
		}
		p++;
	}	
	//LCD_ShowPicture(0,0,70,63,gImage_beidou);
}

PCtoLCD2002软件设置如下

 取模出的16进制数代表了,8个像素点的亮灭,取模得到一个16进制数时,要判断从高位到低位,第几位是1,并在那一位写入颜色命令,根据字模大小,以16*16汉字为例,,一行需要2个16进制数表示,一共有16行,利用for(j=0;j<(width*heigth/8);j++)判断在第几个16进制数时需要写入颜色,再用for(i=0;i<8;i++){if(((*p<<i)&0x80)==0x80)第几个点,利用new_y=y+(j*8+i)/width;new_x=x+(j*8+i)%width;确定点的坐标

之所以不像图片那样用Lcd_SetRegion函数,是因为,这个函数要求范围内每一个点都要写颜色,这样导致汉字再图片上显示不方便;

这个函数应该可以适用任意大小字符,如果不行,请留言一起学习。

void LCD_ShowString(uint x,uint y,uint16_t width,uint16_t heigth,const unsigned char *p,uint16_t char_color,uint16_t longth)
{
	int i;
	for(i=0;i<longth;i++)
	{
		LCD_ShowChar(x+i*width,y,width,heigth,p+((width/8*heigth)*i),char_color);
	}
}

字符串函数基于字符函数编写

唉,写的好麻烦,自己明白和写出来根本不是一回事儿

这是结果图

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值