基于單片機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)