TFTLCD液晶屏图标的显示

前言

(1)本系列是基于STM32的项目笔记,内容涵盖了STM32各种外设的使用,由浅入深。

(2)小编使用的单片机是STM32F105RCT6,项目笔记基于小编的实际项目,但是博客中的内容适用于各种单片机开发的同学学习和使用。

学习目标

本章有两个任务:

  1. 图标显示的原理解析。
  2. 完成TFTLCD液晶屏幕 图标的显示。
  3. 本章内容比较简单,只要按照教程会操作,调用函数,实现图标的显示就行。

步骤

第一步:准备图标

第二步: 图标取模,将图片用字符来表示

第三步: 液晶显示,将字符转换成LCD屏幕显示

图片的准备

准备图片的时候,要注意两点

①图片的像素。 需要转换成我们需要显示的像素,就像我的图片必须转换成32*32

②注意图片的格式。图片的格式必须符合转换软件的格式。 以软件为准。我们使用的软件支持的图片格式相对比较多。

我们最常用的转换软件是:Image2Lcd 这是一款免费软件

显示的图片有些是通过百度下载的,有些是自己通过PS,或者画图画出来的。有些图片是不断的更换,不断的修改的。是要花费比较多的时间的

图片取模的演示

程序实现

①在lcd_Font.h中定义,通过枚举定义我们需要显示的图标。

enum
{
	ICON_32X32_WIFI_S1,
	ICON_32X32_WIFI_S2,
	ICON_32X32_WIFI_S3,
	ICON_32X32_WIFI_S4,
	
        ICON_32X32_GSM_NOCARD,

	ICON_32X32_GSM_S1,
	ICON_32X32_GSM_S2,
	ICON_32X32_GSM_S3,
	ICON_32X32_GSM_S4,

	ICON_32X32_BAT_LEVEL0,	
	ICON_32X32_BAT_LEVEL1,		
	ICON_32X32_BAT_LEVEL2,		
	ICON_32X32_BAT_LEVEL3,	
	ICON_32X32_BAT_LEVEL4,	
	ICON_32X32_BAT_LEVEL5,	

	ICON_32X32_ACLINK,	
	ICON_32X32_ACBREAK,	

	ICON_32X32_SERVER,	

	ICON_32X32_CLEAR,	

	ICON_32X32_SUM
};

②将图片转换的二进制,并保存到二位数组中,在lcd_Font.c。

显示程序

/******************************************************************************
      函数说明:小图标显示   
      入口数据:x,y显示坐标       
                num 要显示的图标
                fc 图标的颜色
                bc 图标背景色
                sizey 字号
      返回值:  无
******************************************************************************/
void LCD_ShowPicture32PixFont(unsigned short x,unsigned short y,unsigned char num,unsigned short fc,unsigned short bc,unsigned char mode)
{
	unsigned char temp,sizex,t,m=0;
	unsigned short i,TypefaceNum;一个字符所占字节大小
	unsigned short x0=x;
	TypefaceNum=128;
	LCD_Address_Set(x,y,x+31,y+31);   //设置光标位置 
	for(i=0;i<TypefaceNum;i++)
	{ 
		temp=gImage_wifiSigal[num][i];
		for(t=0;t<8;t++)
		{
			if(!mode)//非叠加模式
			{
				if(temp&(0x80>>t))
                                     LCD_WR_DATA(fc);
				else 
                                   LCD_WR_DATA(bc);
				m++;
				if(m%sizex==0)
				{
					m=0;
					break;
				}
			}
			else//叠加模式
			{
				if(temp&(0x80>>t))
					LCD_DrawPoint(x,y,fc);//画一个点
				x++;
				if((x-x0)==sizex)
				{
					x=x0;
					y++;
					break;
				}
			}
		}
	}   	 	  
}

测试验证

在void mt_tftlcd_init(void) 函数的后面增加 以下两行代码,烧录测试显示效果。

LCD_ShowPicture32PixFont(10,10,ICON_32X32_WIFI_S4,HUE_LCD_FONT,HUE_LCD_BACK,0);
    LCD_ShowPicture32PixFont(50,10,ICON_32X32_GSM_S4,HUE_LCD_FONT,HUE_LCD_BACK,0);

tips

显示字符串函数

/******************************************************************************
函数说明:显示字符串
入口数据:x,y显示坐标 320*320
*p 要显示的字符串
fc 字的颜色
bc 字的背景色
sizey 字号
mode: 0带字节背景 1透明模式
返回值: 无
******************************************************************************/

void LCD_ShowString(unsigned short x,unsigned short y,const unsigned char *p,unsigned short fc,unsigned short bc,unsigned char sizey,unsigned char mode)

两种形式

(1)直接写需要显示的字符。

LCD_ShowString(24,30,“LCD_W:”,HUE_LCD_FONT,HUE_FONT_BACK,16,0);

(2)采用数组方式。

unsigned char displaytimebuf[16];

displaytimebuf[0]=0x32;
displaytimebuf[1]=0x30;	
displaytimebuf[2]='2';
displaytimebuf[3]='2';;
displaytimebuf[4]='-';	
displaytimebuf[5]='0';
displaytimebuf[6]='7';
displaytimebuf[7]='-';	
displaytimebuf[8]='0';
displaytimebuf[9]='9';	
displaytimebuf[10]=0;
LCD_ShowString(20,200,displaytimebuf,HUE_LCD_FONT,HUE_LCD_BACK,24,0);

猜你喜欢

转载自blog.csdn.net/weixin_62261692/article/details/132563135