基于单片机STM32的电子相册制作(含代码)

电子相册功能

基于stm32芯片进行开发,采用480*320分辨率内置显存模块的LCD显示屏模块,使用stm32芯片内置的FSMC模拟8080接口时序从而驱动LCD,实现电子相册功能,循环播放SD卡中图片。通过FatFS文件系统进行SD存储空间的管理。


工作流程

1)通过FatFS方式读取Fat32格式SD卡中的jpg图片数据。通过FatFS系统从已格式化为Fat32文件系统的SD卡中读取图片数据流,通过二进制流方式按照FSMC时序,以行的方式传输到LCD显示屏内置的显存中,传输完成后刷新缓冲区从而实现显示图片的功能。

2)通过stm32的FSMC模拟8080时序驱动LCD显示屏显示图片。通过循环进行图片的刷新播放,实现了自动循环播放的功能。程序使用C语言编写,使用stm32提供的库函数进行硬件配置与操作。

3)通过循环函数以及延时函数实现循环播放图片功能

4)通过KEY1按键复位程序

系统硬件

1)核心板:使用野火的秉火指南者开发板,以STM32F103VET6为核心主控芯片。如果手上没有这款开发板,但是有同样的STM32开发板可以移植。

野火指南者开发板硬件资源包含:常用各类接口,如USB、串口;板载WIFI 8266 ;摄像头接口 OV7725;JTAG下载接口;2.4G无线接,可外接NRF24L01模块;蓝牙接口,可外接H05蓝牙模块;SD卡,可外接32GB的TF卡。

2)LCD显示屏模块:480*320分辨率内置显存模块

系统软件代码

 #include "stm32f10x.h" #include "./lcd/bsp_ili9341_lcd.h" #include "./usart/bsp_usart.h"  #include "./led/bsp_led.h"  #include "ff.h" #include <stdio.h> #include <string.h> #include <stdlib.h> extern void jpgDisplay(char *pic_name); char *join(char *, char *,char *); void delay_us(u16 t) {  
  u16 i,j; for(i=0;i<t;i++){ for(j=0;j<t;j++){
    }
  }
}
FATFS fs; /* FatFs文件系统对象 */ FRESULT res_sd; /* 文件操作结果 */ /**
  * @brief  主函数
  * @param  无  
  * @retval 无
  */ int main ( void ) { int p = 0 ILI9341_Init (); //LCD 初始化 LCD_SetFont(&Font8x16);
  LCD_SetColors(RED,BLACK);
  ILI9341_Clear(0,0,LCD_X_LENGTH,LCD_Y_LENGTH); /* 清屏,显示全黑 */ ILI9341_GramScan ( 6 );
  USART_Config();    
  LED_GPIO_Config();
  LED_BLUE; //本工程编译后 jpg解码库有一些warning,不影响使用。 //移植本工程时,请注意启动文件的堆栈大小 printf("\r\n ********** 显示JPG文件*********** \r\n"); printf("\r\n 实验前请确保SD卡的目录下具有实验使用的JPG图片文件, \r\n"); /*挂载sd文件系统*/ res_sd = f_mount(&fs,"0:",1); if(res_sd != FR_OK)
  { printf("\r\n请给开发板插入已格式化成fat格式的SD卡。\r\n");
  }
  ILI9341_GramScan ( 6 ); /*显示SD卡内的JPG文件,请确保SD卡该路径下有该文件,
  可在工程目录下的“需要拷贝到SD卡”的文件夹中复制到SD卡的该目录*/ jpgDisplay("0:/Image/background.jpg");
  delay_us(4000); while ( 1 )
  { switch(p%10){ case 0:
        jpgDisplay("0:/img0.jpg"); break; case 1:
        jpgDisplay("0:/img1.jpg"); break; case 2:
        jpgDisplay("0:/img2.jpg"); break; case 3:
        jpgDisplay("0:/img3.jpg"); break; case 4:
        jpgDisplay("0:/img4.jpg"); break; case 5:
        jpgDisplay("0:/img5.jpg"); break; case 6:
        jpgDisplay("0:/img6.jpg"); break; case 7:
        jpgDisplay("0:/img7.jpg"); break; case 8:
        jpgDisplay("0:/img8.jpg"); break; case 9:
        jpgDisplay("0:/img9.jpg"); break;
    }
    p++;
    delay_us(8000);
  }
} char* join(char *s1, char *s2,char *s3) { char *result = malloc(strlen(s1)+strlen(s2)+strlen(s3)+1);//+1 for the zero-terminator  strcpy(result, s1); strcat(result, s2); strcat(result, s3); return result;  
}


完整代码可进群免费领取!!!

嵌入式物联网的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而错失高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。点击下方链接,0元领取学习资源,让你的学习之路更加顺畅!记得点赞、关注、收藏、转发哦!

点击这里找小助理0元领取:领资料

the end

评论(0)