前言
本文章基于STM32F103VET6,参考野火的驱动程序,用LCD液晶屏显示静态图像。
有纰漏请指出,转载请说明。
学习交流请发邮件 1280253714@qq.com
编程要点
显示一个像素点
将rgb888图片转为rgb555
输出rgb555的C语言数组
数组的每一个元素对应一个像素点的rgb三个通道的数据,用stm32的FSMC模拟8080时序,与ili9341进行通信,ili9341再驱动液晶屏显示图片
代码分析
-
- 显示一个像素点
void ILI9341_SetPointPixelNew ( uint16_t usX, uint16_t usY,uint16_t currentFillColor)
{
if ( ( usX < LCD_X_LENGTH ) && ( usY < LCD_Y_LENGTH ) )
{
ILI9341_SetCursor ( usX, usY );
ILI9341_FillColor ( 1, currentFillColor );
}
}
void LCD_showPointPixel(void)
{
ILI9341_SetPointPixelNew(10,10,0xf800);
Delay(0xFFFFFF);
}
(为了方便看清,这里实际上显示了四个点)文章来源:https://www.toymoban.com/news/detail-703457.html
2. 将rgb888图片转为rgb555(MATLAB)
x=60
y=80
img888=imread("E:\MATLAB\bin\my_MATLAB_Doc\img\color.png");
scaleR=31/255;
scaleG=63/255;
scaleB=31/255;
img565=zeros(x,y);
for i=1:x
for j=1:y
r5=0;
g6=0;
b5=0;
r5=round(double(img888(i,j,1))*scaleR);
g6=round(double(img888(i,j,2))*scaleG);
b5=round(double(img888(i,j,3))*scaleB);
r5L11=bitshift(r5,11); %r左移11位
g6L5=bitshift(g6,5); %g左移5位
img565(i,j)=r5L11+g6L5+b5;
end
end
img565=dec2hex(uint16(img565));
3.输出rgb555的C语言数组(MATLAB)
%生成C语言数组
str="{0x"
a=dec2hex(img565(1))
for i=1:x*y
for j=1:4
str=strcat(str,img565(i,j));
end
str=strcat(str,",0x");
end
str=strcat(str,'}');
writematrix(str,"E:\MATLAB\bin\my_MATLAB_Doc\img\createArray.txt")
因为数组存放于SRAM,只有64K的空间,故只生成60*80大小的图片文章来源地址https://www.toymoban.com/news/detail-703457.html
4. 数组的每一个元素对应一个像素点的rgb三个通道的数据,用stm32的FSMC模拟8080时序,与ili9341进行通信,ili9341再驱动液晶屏显示图片.
uint16_t PictureData [ ] ={0x95DA,0x95DA,0x95DA,0x95DA...} //省略
void ILI9341_ShowPicture(uint16_t usX, uint16_t usY,uint16_t pic565[])
{
uint32_t i=0;
uint8_t x=0;
uint8_t y=0;
for(x=0;x<usX;x++)
{
for(y=0;y<usY;y++)
{
if ( ( x < LCD_X_LENGTH ) && ( y < LCD_Y_LENGTH ) )
{
ILI9341_SetCursor ( x, y );
ILI9341_FillColor ( 1, pic565[i] );
}
i++;
}
}
}
int main ( void )
{
ILI9341_Init (); //LCD 初始化
USART_Config();
//其中0、3、5、6 模式适合从左至右显示文字,
//不推荐使用其它模式显示文字 其它模式显示文字会有镜像效果
//其中 6 模式为大部分液晶例程的默认显示方向
ILI9341_GramScan ( 3 );
while ( 1 )
{
LCD_showPicture();
}
}
void LCD_showPicture(void)
{
ILI9341_ShowPicture(80,60,PictureData);
Delay(0xFFFFFF);
}
到了这里,关于STM32之LCD液晶屏(ILI9341)显示图片的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!