stm32F407 LCD_Color_Fill() 库函数 使用教程方法

前言

首先,刚刚解决了困扰了两三天的问题:显示到 lcd 上的图片 有偏移和缺失。喜极而泣!

仅此文记录学习正点原子 stm32F407 探索者 tftlcd 教程 的一段日子

本文使用硬件:正点原子 stm32F407 探索者、ST-Link

本文使用软件:Picture2Hex、Keil uVision5 
(Picture2Hex 下载地址:https://pan.baidu.com/s/1H1gYlDUg-udoHburyw0Hiw  提取码:2pqv )

(该下载地址里还包括了 exprgb565data【也是 rgb565 转换】、WinHex_19.7【破解版,可查看文件的编码】)

使用方法

  1. 准备一张分辨率至少为 (200*100) 的图片。
    比如这样:
    f22edb2393774629b62404589ba36035_image.png
    1fa00c89b38a4a2babf64095d7e70626_image.png
  2. 解压后并打开 Picture2Hex.exe
    c980eadc1cad41d0a209b065f07b1a38_image.png
  3. 设置参数,width、high(高宽与图片对应)、RGB(必须为 RGB565)、File
    899db1448b1c4669ad30ea1c28cacb7c_image.png
  4. 在该软件 work 目录下就会生成对应的 图片 和 .c 代码文件
    145499a4708f4915a3c47652bca37a9b_image.png
  5. 打开 这个 .c 文件,会发现在数组里有一堆十六进制代码,这代码是 RBG565 颜色代码,每一个代表一个色块。
    LOGO_W 和 LOGO_H 分别为宽和高,FRAME_COUT 不知道是啥。
    fcb20e6258ca409ab87b887015fc7168_image.png
  6. 新建 logo.h 文件,全选(Ctrl+A)logo.c 里代码后复制(Ctrl+C)粘贴(Ctrl+V)到 logo.h 中,并把 logo.h 导入 keil 中(此处不细讲了)
    5fe5356a3a24442db0ec2d8c58816144_image.png
  7. 看上图出现了 红叉× ,发现是 uint16_t 未定义,此处最简单方法是改成 unsigned short ,并把这数组的名称改为 color (其他名称也行)
    76b827f0303441ba9ffee8b9b049b92a_image.png
  8. 主函数文件里导入 logo.h
    eabb2b948cd444a289450c49a129af5e_image.png
  9. 添加函数, color 为 logo.h 里的数组名 (最后介绍下该函数)
    e1bd6e78e4b8468488303a84ba1ff32a_image.png
  10. 编译通过即可,如果照片分辨率太大就会出现单片机内存不够问题, 可见此处:https://blog.csdn.net/Higashino_Keigo/article/details/88559488
    d49232e1d27848458450d070c96d4837_image.png

函数介绍

贴上源代码:

//在指定区域内填充指定颜色块
//(sx,sy),(ex,ey):填充矩形对角坐标,区域大小为:(ex-sx+1)*(ey-sy+1)   
//color:要填充的颜色
void LCD_Color_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 *color)
{  
	u16 height,width;
	u16 i,j;
	width=ex-sx+1; 			//得到填充的宽度
	height=ey-sy+1;			//高度
 	for(i=0;i<height;i++)
	{
 		LCD_SetCursor(sx,sy+i);   	//设置光标的位置
		LCD_WriteRAM_Prepare();     //开始写入GRAM
		for(j=0;j<width;j++)
		LCD->LCD_RAM=color[i*width+j];//写入数据
	}		  
} 

main.c:


#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "lcd.h"
#include "logo.h" //导入色块所在的头文件

int main(void)
{ 
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断优先级设置
	delay_init(168);      //延时初始化
	uart_init(115200);		//波特率设置
	
 	LCD_Init();           //LCD初始化 FSMC接口初始化
	POINT_COLOR=BLACK;    //LCD画笔为黑色
	
	LCD_Color_Fill(1,1,LOGO_W,LOGO_H,color); //指定区域填充色块(color为色块数组)
	delay_ms(10000);
}

 
作者:Higashino_Keigo
来源:CSDN
原文:https://blog.csdn.net/Higashino_Keigo/article/details/88738160
版权声明:本文为博主原创文章,转载请附上博文链接!