(1)本系列是基于STM32的项目笔记,内容涵盖了STM32各种外设的使用,由浅入深。
(2)小编使用的单片机是STM32F105RCT6,项目笔记基于小编的实际项目,但是博客中的内容适用于各种单片机开发的同学学习和使用。
本章有两个任务:
- 图标显示的原理解析。
- 完成TFTLCD液晶屏幕 图标的显示。
- 本章内容比较简单,只要按照教程会操作,调用函数,实现图标的显示就行。
第一步:准备图标
第二步: 图标取模,将图片用字符来表示
第三步: 液晶显示,将字符转换成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>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);
/******************************************************************************
函数说明:显示字符串
入口数据: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);