STM32,正点原子TFTLCD屏显示图片

显示图片和显示线条、字符、汉字一样,都是控制LCD屏幕中的一个个像素点完成的,只不过所用的封装函数和软件有所不同,但操作步骤大致相同。

1.软件:

Keil uVision5

Img2Lcd

2.步骤

(1)打开Keil uVision5,并导入可控制LCD显示屏工作的文件夹。例如:

(2)在 lcd.c 文件中输入显示图片的函数。(文章最后附有代码)
(3) 在 lcd.h 文件中声明此函数。
(4) 打开 Img2Lcd 图片取模软件,在软件内打开准备好的图片,图片格式为 jpg 或 gif。
(5)调整参数。
(6) 点击保存,自动生成图片的16进制代码。

(7)将此代码复制粘贴到 lcdfont.h 文件,或直接放在主函数中。

(8) 在主函数 main 中调用函数,注意函数名要对应。函数内共5个参数,分别为 图片左上角的x轴坐标、y轴坐标、图片名称、宽度、高度。(x、y轴坐标控制图片显示位置)。

注意:图片名称要和图片取模器输出的代码名称对应

注意: 宽度和长度要和图片取模器的输出图像的参数对应。

 (9)完成后运行并烧录。

成功! 

附:

lcd.c 文件代码:

void lcd_show_image(uint16_t x, uint16_t y, const uint16_t *image_data, uint16_t img_width, uint16_t img_height)
{
    for (uint16_t row = 0; row < img_height; row++) {
        for (uint16_t col = 0; col < img_width; col++) {
            uint16_t color = image_data[row * img_width + col];
            
            lcd_draw_point(x + col, y + row, color);
        }
    }
}

lcd.h 文件代码

void lcd_show_image(uint16_t x, uint16_t y, const uint16_t *image_data, uint16_t img_width, uint16_t img_height); 

main.c 文件代码

#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/usart/usart.h"
#include "./BSP/LCD/lcd.h"

const unsigned char gImage_2[107528] = { 0X00,0X10,0XF0,0X00,0XE0,0X00,0X01,0X1B,.......... };               //图片取模代码

int main(void)
{
    uint8_t x = 0;
    uint8_t lcd_id[12];

    HAL_Init();                                   /* 初始化HAL库 */
    sys_stm32_clock_init(RCC_PLL_MUL9);                 /* 设置时钟, 72Mhz */
    delay_init(72);                              /* 延时初始化 */
    usart_init(115200);                       /* 串口初始化为115200 */
    led_init();                                      /* 初始化LED */
    lcd_init();                                      /* 初始化LCD */

    lcd_clear(WHITE);

    lcd_show_image(50,400, (uint16_t *)gImage_2, 240,224);  //显示图片 

### 实现 STM32 上使用正点原子 LCD 库显示中文字符 为了在 STM32 上通过正点原子的 LCD 库实现中文字符显示,主要涉及两个方面的工作:一是配置 FSMC 或者其他接口以模拟 8080 时序来控制 LIL9341 芯片;二是准备适合显示的中文字库。 #### 配置硬件接口 对于大多数开发者来说,在 STM32 中可以利用 FSMC 来模拟 8080 并行通信协议与 TFT-LCD 进行交互。具体而言,这涉及到设置 GPIO 和 FSMC 外设参数,使得微控制器能够发送命令和数据给显示器模块[^1]。 ```c // 初始化FSMC外设用于LCD控制 void LCD_FSMC_Init(void){ // 此处省略具体的初始化代码... } ``` #### 准备中文字体库 由于标准 ASCII 字符集不支持汉字编码,因此需要额外引入 GBK 编码或其他形式的中文字型表。通常情况下,这些字模会被预先转换成位图格式存储于 Flash 存储器内,并可通过程序调用来绘制至幕上。如果要定制特殊的字体样式,则需依据上述提到的原则自行创建所需的字库文件。 ```c // 定义一个简单的函数来画单个汉字 void DrawChineseChar(uint16_t x, uint16_t y, const unsigned char *chineseFontData) { int i; for (i = 0; chineseFontData[i]; ++i) { /* 解析并渲染每个像素 */ // ... } } // 使用预定义好的中文字库展示字符串 "你好" const unsigned char helloWorld[] = { ... }; // 假定已准备好对应的文字图案数组 DrawChineseChar(50, 50, helloWorld); ``` #### 整合现有资源 考虑到实际应用中的便捷性和效率问题,建议尽可能采用成熟的第三方解决方案或官方提供的 SDK 组件来进行快速开发。例如,正点原子提供了完整的 SYSTEM 文件夹下的基础驱动层服务,其中包括延迟处理 (`delay`)、系统管理 (`sys`) 及串口通讯 (`usart`) 功能的支持,这些都是构建稳定可靠的应用所必需的基础构件[^3]。 此外,也有开源项目如 TouchGFX 提供了图形界面设计工具链和服务框架,可以帮助加速 GUI 的搭建过程,特别是在面对复杂的人机交互需求时显得尤为重要[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值