STM32之LCD液晶屏(ILI9341)显示图片

这篇具有很好参考价值的文章主要介绍了STM32之LCD液晶屏(ILI9341)显示图片。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

本文章基于STM32F103VET6,参考野火的驱动程序,用LCD液晶屏显示静态图像。

有纰漏请指出,转载请说明。

学习交流请发邮件 1280253714@qq.com

编程要点

  1. 显示一个像素点

  1. 将rgb888图片转为rgb555

  1. 输出rgb555的C语言数组

  1. 数组的每一个元素对应一个像素点的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);
}
ili9341 图片显示,matlab,图像处理,stm32,Powered by 金山文档

(为了方便看清,这里实际上显示了四个点)

2. 将rgb888图片转为rgb555(MATLAB)

ili9341 图片显示,matlab,图像处理,stm32,Powered by 金山文档
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")
ili9341 图片显示,matlab,图像处理,stm32,Powered by 金山文档

因为数组存放于SRAM,只有64K的空间,故只生成60*80大小的图片文章来源地址https://www.toymoban.com/news/detail-703457.html

ili9341 图片显示,matlab,图像处理,stm32,Powered by 金山文档
ili9341 图片显示,matlab,图像处理,stm32,Powered by 金山文档
ili9341 图片显示,matlab,图像处理,stm32,Powered by 金山文档
ili9341 图片显示,matlab,图像处理,stm32,Powered by 金山文档
ili9341 图片显示,matlab,图像处理,stm32,Powered by 金山文档

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);
}
ili9341 图片显示,matlab,图像处理,stm32,Powered by 金山文档

到了这里,关于STM32之LCD液晶屏(ILI9341)显示图片的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第八讲 单片机驱动彩色液晶屏 控制RA8889软件:显示图片

    目录 第一讲 单片机最小系统STM32F103C6T6通过RA8889驱动彩色液晶屏播放视频 第二讲 单片机最小系统STM32F103C6T6控制RA8889驱动彩色液晶屏硬件框架 第三讲 单片机驱动彩色液晶屏 控制RA8889软件:如何初始化 第四讲 单片机驱动彩色液晶屏 控制RA8889软件:绘图 第五讲 单片机驱动彩色液

    2024年01月22日
    浏览(52)
  • 【Linux下6818开发板(ARM)】在液晶屏上显示RGB颜色和BMP图片

    (꒪ꇴ꒪ ),hello我是 祐言 博客主页:C语言基础,Linux基础,软件配置领域博主🌍 快上🚘,一起学习! 送给读者的一句鸡汤🤔: 集中起来的意志可以击穿顽石! 作者水平很有限,如果发现错误,可在评论区指正,感谢🙏         在嵌入式系统的开发中,我们经常需要在液晶

    2024年02月08日
    浏览(41)
  • 51单片机学习笔记-12LCD1602液晶屏

    [toc] 注:笔记主要参考B站江科大自化协教学视频“51单片机入门教程-2020版 程序全程纯手打 从零开始入门”。 注:工程及代码文件放在了本人的Github仓库。 LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字

    2024年02月11日
    浏览(53)
  • 【51单片机系列】proteus中的LCD12864液晶屏

    文章来源:《单片机C语言编程与Proteus仿真技术》。 点阵字符型LCD显示模块只能显示英文字符和简单的汉字,要想显示较为复杂的汉字或图形,就必须采用点阵图型LCD显示模块,比如12864点阵图型LCD显示模块。 12864点阵图型LCD显示模块内部控制器采用KS0108或HD61202。其引脚排列

    2024年01月19日
    浏览(51)
  • Proteus仿真-LCD1602液晶屏使用方法(驱动一)

    一、硬件链接 在元件库中搜索LM016即可找到LCD1602液晶屏。 按下图方式链接单片机和屏幕。 二、软件驱动代码 三、示例程序

    2024年02月12日
    浏览(41)
  • 51单片机——LCD1602液晶屏 C语言入门编程

    目录 LCD1602: 数据指令:  字节写入时序: 1. LCD1602:LCD1602液晶上显示字符信息         1602液晶也叫1602字符型液晶,它能显示2行字符信息,每行又能显示16个字符。它是一种专门用来显示字母、数字、符号的点阵型液晶模块。它是由若 干个5x7的点阵字符位组成,每个点

    2024年02月05日
    浏览(52)
  • 【雕爷学编程】Arduino动手做(85)---LCD1602液晶屏模块7

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)

    2024年02月16日
    浏览(45)
  • 【STM32】SPI通讯控制ILI9341显示屏

    ILI9341是一款分辨率为 240x320 分辨率 的a- tft液晶显示单片SOC驱动,由720通道源驱动、320通道门驱动、 172800字节GRAM (240RGBx320点位图形显示数据)和电源电路组成。 ILI9341支持并行8-/9-/16-/18位数据总线MCU接口,6-/16-/18位数据总线RGB接口和3 /4线串行外围接口 SPI通讯 。通过窗口地址函

    2024年01月21日
    浏览(50)
  • OLED 液晶屏显示模块(0.96寸)

           OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(Organic Electroluminesence Display, OELD)。因为具备轻薄、省电等特性,因此从 2003 年开始,这种显示设备在 MP3 播放器上得到了广泛应用,而对于同属数码类产品的 DC与手机,此前只是在一些展会上

    2024年02月05日
    浏览(55)
  • 关于配置tft液晶屏时,屏幕不显示遇到的问题

    本人新手小白,在使用单片机配置tft屏幕时,发现屏幕一直显示白屏(如下图)。但是仔细检查多遍后都无法找到问题所在,于是在CSDN上搜索了很久都没有发现类似问题的解决方法。无奈只能重新回到代码上寻找原因,终于功夫不负有心人让我找到了问题并成功解决。以下向

    2024年02月16日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包