基于單片機STM32的電子相冊制作(含代碼)

電子相冊功能

基于stm32芯片進行開發(fā),采用480*320分辨率內(nèi)置顯存模塊的LCD顯示屏模塊,使用stm32芯片內(nèi)置的FSMC模擬8080接口時序從而驅(qū)動LCD,實現(xiàn)電子相冊功能,循環(huán)播放SD卡中圖片。通過FatFS文件系統(tǒng)進行SD存儲空間的管理。


工作流程

1)通過FatFS方式讀取Fat32格式SD卡中的jpg圖片數(shù)據(jù)。通過FatFS系統(tǒng)從已格式化為Fat32文件系統(tǒng)的SD卡中讀取圖片數(shù)據(jù)流,通過二進制流方式按照FSMC時序,以行的方式傳輸?shù)絃CD顯示屏內(nèi)置的顯存中,傳輸完成后刷新緩沖區(qū)從而實現(xiàn)顯示圖片的功能。

2)通過stm32的FSMC模擬8080時序驅(qū)動LCD顯示屏顯示圖片。通過循環(huán)進行圖片的刷新播放,實現(xiàn)了自動循環(huán)播放的功能。程序使用C語言編寫,使用stm32提供的庫函數(shù)進行硬件配置與操作。

3)通過循環(huán)函數(shù)以及延時函數(shù)實現(xiàn)循環(huán)播放圖片功能

4)通過KEY1按鍵復(fù)位程序

系統(tǒng)硬件

1)核心板:使用野火的秉火指南者開發(fā)板,以STM32F103VET6為核心主控芯片。如果手上沒有這款開發(fā)板,但是有同樣的STM32開發(fā)板可以移植。

野火指南者開發(fā)板硬件資源包含:常用各類接口,如USB、串口;板載WIFI 8266 ;攝像頭接口 OV7725;JTAG下載接口;2.4G無線接,可外接NRF24L01模塊;藍牙接口,可外接H05藍牙模塊;SD卡,可外接32GB的TF卡。

2)LCD顯示屏模塊:480*320分辨率內(nèi)置顯存模塊

系統(tǒng)軟件代碼

 #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文件系統(tǒng)對象 */ FRESULT res_sd; /* 文件操作結(jié)果 */ /**
  * @brief  主函數(shù)
  * @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文件系統(tǒng)*/ res_sd = f_mount(&fs,"0:",1); if(res_sd != FR_OK)
  { printf("\r\n請給開發(fā)板插入已格式化成fat格式的SD卡。\r\n");
  }
  ILI9341_GramScan ( 6 ); /*顯示SD卡內(nèi)的JPG文件,請確保SD卡該路徑下有該文件,
  可在工程目錄下的“需要拷貝到SD卡”的文件夾中復(fù)制到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;  
}


完整代碼可進群免費領(lǐng)取!!!

嵌入式物聯(lián)網(wǎng)的學(xué)習(xí)之路非常漫長,不少人因為學(xué)習(xí)路線不對或者學(xué)習(xí)內(nèi)容不夠?qū)I(yè)而錯失高薪offer。不過別擔(dān)心,我為大家整理了一份150多G的學(xué)習(xí)資源,基本上涵蓋了嵌入式物聯(lián)網(wǎng)學(xué)習(xí)的所有內(nèi)容。點擊下方鏈接,0元領(lǐng)取學(xué)習(xí)資源,讓你的學(xué)習(xí)之路更加順暢!記得點贊、關(guān)注、收藏、轉(zhuǎn)發(fā)哦!

點擊這里找小助理0元領(lǐng)取:領(lǐng)資料

the end

評論(0)