本程序基于正点的STM32F4系列;
LCD 显示数字和字符的原理都是将数字和字符转换成点阵,通过函数扫描点阵进而在LCD上显示,LCD显示图片的原理也是如此,将图片转换成若干点阵,进而通过函数进行扫描,正点官方提供了图片转换成点阵的工具 Image2LCD v2.9;
具体步骤:
1. 首先打开原子哥的 LCD 例程,在 LCD.c 文件下添加 LCD_ShowPicture 函数,在 LCD 上显示图片;
//参数
//x y 起点坐标
//像素 60*180
//pic 源数组
//注:参数column和row需要根据工具Image2LCD进行设置,否则LCD上无法显示正确的图片
void LCD_ShowPicture(u16 x,u16 y,u16 column,u16 row,unsigned short *pic)
{
u16 m,h;
u16 *data=(u16*)pic;
for(h=0+y;h<row+y;h++) //60
{
for(m=0+x;m<column+x;m++) //180
{
LCD_Fast_DrawPoint(m,h,*data++);
}
}
}
2. 网上随便找 1~2 张图片;
3. 使用正点提供的 Image2LCD 软件取模变成数组;
4. 将数组复制到 main.c 中;
5. 编写主函数调用 LCD_ShowPicture 即可;
int main(void)
{
u8 lcd_id[12]; //存放LCD ID字符串
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //初始化延时函数
uart_init(115200); //初始化串口波特率为115200
LED_Init();
LCD_Init(); //初始化LCD FSMC接口
POINT_COLOR=RED; //画笔颜色:红色
sprintf((char*)lcd_id,"LCD ID:%04X",lcddev.id);//将LCD ID打印到lcd_id数组。
LCD_Clear(WHITE);
LCD_ShowNum(100,380,20230610,8,24);
//LCD_ShowPicture(0,0,480,300,(u16*)gImage_16);
LCD_ShowPicture(0,0,270,360,(u16*)gImage_12);
while(1)
{
LED0=!LED0;
delay_ms(500);
}
}
6. 实验现象
注意:
LCD_ShowPicture 函数的第三个参数和第四个参数需要根据导入图片输出图像值进行设置,否则无法显示正确的图片!