基于單片機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元領取:領資料
- 贊