标题:
stm32f407串口下载bmp图片到外扩内存,再显示到lcd的源码
[打印本页]
作者:
jsxua
时间:
2018-11-13 09:46
标题:
stm32f407串口下载bmp图片到外扩内存,再显示到lcd的源码
bmp颜色序列.png
(864.42 KB, 下载次数: 44)
下载附件
2018-11-13 09:47 上传
bmp图像已经顺利读入外扩sram,对于我上传的这种真彩bmp来说,从文件的第54字节开始,之后说颜色数据,格式RGB888,即每3字节表示一个像素,共320x240个像素,正好一屏,另由于我们的屏是65535色,lcd驱动程序中提供的写像素函数需要传入坐标和16位色,因此需要大家写一个把24位色转成16色的函数。大致过程如下:用串口工具往单片机发bmp图片,这样不需要sd卡或u盘,单片机端边读边存入外扩内存,外扩内存共1M字节,我给的bmp文件255k字节。发送完之后,电脑给单片机端发送!END!表示传送结束。单片机开始从外扩内存地址0x68000000的位置,偏移54字节,这54字节是bmp头信息,与本次实验无关,然后开始逐个字节读取,读完3字节,转换为16位色,再依次写入lcd屏上相应位置。
单片机源程序如下:
#include "led.h"
#include "key.h"
#include "beep.h"
#include "lcd.h"
#include "usart.h"
#include "sram.h"
#include "ds18b20.h"
#include "ff.h"
#include "malloc.h"
#include "sdio_sdcard.h"
void show_sdcard_info(void)
{
switch(SDCardInfo.CardType)
{
case SDIO_STD_CAPACITY_SD_CARD_V1_1:printf("Card Type:SDSC V1.1\r\n");break;
case SDIO_STD_CAPACITY_SD_CARD_V2_0:printf("Card Type:SDSC V2.0\r\n");break;
case SDIO_HIGH_CAPACITY_SD_CARD:printf("Card Type:SDHC V2.0\r\n");break;
case SDIO_MULTIMEDIA_CARD:printf("Card Type:MMC Card\r\n");break;
}
printf("Card ManufacturerID:%d\r\n",SDCardInfo.SD_cid.ManufacturerID);
printf("Card RCA:%d\r\n",SDCardInfo.RCA);
printf("Card Capacity:%d MB\r\n",(u32)(SDCardInfo.CardCapacity>>20));
printf("Card BlockSize:%d\r\n\r\n",SDCardInfo.CardBlockSize);
}
void fsmc_sram_test(u16 x,u16 y)
{
u32 i=0;
u8 temp=0;
u8 sval=0;
LCD_DisplayString(x,y,16,"Ex Memory Test: 0KB");
for(i=0;i<1024*1024;i+=4096)
{
FSMC_SRAM_WriteBuffer(&temp,i,1);
temp++;
}
for(i=0;i<1024*1024;i+=4096)
{
FSMC_SRAM_ReadBuffer(&temp,i,1);
if(i==0)sval=temp;
else if(temp<=sval)break;
LCD_DisplayNum(x+15*8,y,(u16)(temp-sval+1)*4,4,16,0);
}
}
int main(void)
{
delay_init(); //初始化延时函数
LED_Init(); //初始化LED端口
KEY_Init(); //初始化KEY端口
BEEP_Init(); //初始化BEEP端口
beep(3);
FSMC_SRAM_Init();
USART1_Config();
LCD_Init();
BRUSH_COLOR=RED;
/*
LCD_DisplayString(30,50,16,"Explorer STM32F4");
LCD_DisplayString(30,70,16,"SD CARD TEST");
LCD_DisplayString(30,90,16,"ATOM@ALIENTEK");
LCD_DisplayString(30,110,16,"2014/5/15");
LCD_DisplayString(30,130,16,"KEY0:Read Sector 0");
my_mem_init(SRAMIN);
my_mem_init(SRAMCCM);
*/
//LCD_DisplayString(30,130,16,"DS18B20 OK");
/*
res_sd = f_mount(&fs,"0:",1);
if(res_sd != FR_OK){
printf("\r\nPlease insert a SD card formatted by fat32!\r\n");
}
*/
//jpgDisplay("0:/1.jpg");
delay_us(4000);
/*
while(SD_Init())
{
LCD_DisplayString(30,150,16,"SD Card Error!");
delay_ms(500);
LCD_DisplayString(30,150,16,"Please Check! ");
delay_ms(500);
LED0=!LED0;//DS0??
}
show_sdcard_info();
BRUSH_COLOR=BLUE;
LCD_DisplayString(30,150,16,"SD Card OK ");
LCD_DisplayString(30,170,16,"SD Card Size: MB");
LCD_DisplayNum(30+13*8,170,SDCardInfo.CardCapacity>>20,5,16,0);
*/
//fsmc_sram_test(10, 10);
while(1)
{
}
}
复制代码
所有资料51hei提供下载:
串口发bmp到sram再显示到lcd.rar
(1.03 MB, 下载次数: 39)
2018-11-13 14:19 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
秋名山老司机666
时间:
2019-6-20 08:47
感谢分享
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1