TFT-LCD屏幕显示图片
TFT_LCD显示图片时,图片大小选择要适配屏幕大小,如果要竖屏显示的话,则屏幕宽x高为240x320,所以图片也要找240x320的,
如果是横屏显示,则屏幕宽x高为320x240,所以图片也要找320x240的
图片取模软件 —— Image2Lcd v2.9
因为本次实验是竖屏显示,所以先在网上找一张240x320的图片,然后用图片取模软件打开
输出数据类型选择C语言数据,扫描模式为水平,输出灰度默认是单色的,因为屏幕是16位的,所以要改为16位真彩色,最大宽度和高度与图片一致,取消包含图像头数据,勾选高位在前,这与后面编写代码有关,然后点击下方的16位彩色,在颜色位数上选择RGB565的数据格式;然后就可点击保存,命名为Picture1.h,文件里会有图片的取模数据,后续在代码中导入该头文件直接使用即可
代码
Picture1.h
这个数组就是用取模软件取出的图片数据,数据比较大,有153600个字节,差不多150KB,一定要用const修饰,放到STM32的内部Flash中,因为图片大小为320*240个像素点,每个像素点由16位确定,共两个字节,所以320 * 240 * 2 = 153600
STM32F103ZET6的Flash大小为512KB,所以同样大小的图片最多只能存放三张;如果用外部Flash芯片如16M或者64M大小的,则可以放更多的图片
const unsigned char gImage_Picture1[153600] = { /* 0X10,0X10,0X00,0XF0,0X01,0X40,0X01,0X1B, */
0XA4,0X0C,0X93,0XCB,0XA4,0X2D,0XAC,0X8E,0XA4,0X0C,0XA4,0X0C,0XB4,0X8E,0XBC,0XAE,
0XAC,0X2D,0XBC,0XAE,0XC4,0XEF,0X8B,0X49,0X8B,0X48,0XAC,0X2C,0XC4,0XCE,0XC4,0XAE,
0XC4,0XCE,0XCC,0XEE,0XC4,0X8D,0XDD,0X50,0XD5,0X50,0XC4,0XAE,0XAB,0XEB,0XC4,0XCE,
0XCC,0XEF,0XA3,0XEB,0XC4,0XCF,0XEE,0X14,0XD5,0X30,0XBC,0X6D,0XCC,0XCE,0XCC,0XEF,
TFT_LCD.c
在前面显示中英文代码基础上增加这个显示图片的函数
首先同样要设置窗口,然后用switch语句判断图片序号,用一个常量指针指向不同图片序号的图片数组;再逐行写入图片数据
/**
* @name LCD_ShowPicture
* @brief LCD屏幕显示图片
* @param usXstar:窗口起点x轴坐标
* usYstar:窗口起点y轴坐标
* usPicH:图片的水平分辨率
* usPicV:图片的垂直分辨率
* ucPicNum:图片序号
* @retval None
*/
static void LCD_ShowPicture(uint16_t usXstar,uint16_t usYstar,uint16_t usPicH,uint16_t usPicV,uint8_t ucPicNum)
{
uint32_t uiIndex;
const uint8_t * pcPic = NULL;
//设置窗口大小
LCD_SetWindows(usXstar,usYstar,usPicH,usPicV);
//获取图像数据首地址
switch (ucPicNum)
{
case 1: pcPic = gImage_Picture1;break;
case 2: pcPic = gImage_Picture2;break;
case 3: pcPic = gImage_Picture3;break;
default: pcPic = gImage_Picture1;break;
}
//逐行写入图片数据
/*
因为TFT-LCD屏幕是16位的,即每个像素点的数据是16位,占两个字节,usPicH*usPicV表示图片共有多少个像素点,
总共的像素点乘以2就表示图片取模数组里字节的个数,如240*320*2 = 153600
*/
for(uiIndex=0;uiIndex<usPicH*usPicV*2;uiIndex+=2)
{
//因为图片取模时是数据高位在前,每次都是写两个字节(16位),所以要将第一个字节左移8位,再或上第二个字节作低8位
LCD_WRITE_DATA((pcPic[uiIndex]<<8) | pcPic[uiIndex+1]);
}
}
System.c
系统运行函数中直接调用TFT_LCD显示图片函数,x,y轴的坐标都是从0开始,传入屏幕的宽240,高320,图片序号为1,烧录代码后便能显示图片,代码量比较大,烧录慢要等待文章来源:https://www.toymoban.com/news/detail-785766.html
/*
* @name Run
* @brief 系统运行
* @param None
* @retval None
*/
static void Run()
{
TFT_LCD.LCD_ShowPicture(0,0,LCD_WIGHT,LCD_HIGHT,1); //屏幕显示图片
}
显示效果
图片1
图片2
文章来源地址https://www.toymoban.com/news/detail-785766.html
到了这里,关于TFT-LCD屏幕显示图片的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!