《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 一種簡易數碼相框的設計
一種簡易數碼相框的設計
來源:微型機與應用2011年第3期
丁鑫蕾,劉一清,余 奔
(華東師范大學,上海 200241)
摘要: 為應對數碼相框成本較高的問題,介紹了一種簡易數碼相框的設計,實現從SD卡讀取bmp圖片文件并在TFT液晶屏上顯示的功能。本設計成本低,具有很高的實用價值。
Abstract:
Key words :

摘  要: 為應對數碼相框成本較高的問題,介紹了一種簡易數碼相框的設計,實現從SD卡讀取bmp圖片文件并在TFT液晶屏上顯示的功能。本設計成本低,具有很高的實用價值。
關鍵詞: 數碼相框;SD卡;STM32;μCOS-II;FATFS

 本文介紹一種簡單、低成本的數碼相框的設計,它可以幻燈片式地瀏覽SD卡中的bmp格式的照片。
1 硬件電路
 該數碼相框的硬件平臺以32 bit STM32系列的處理器STM32F103ZET6為核心,外圍電路主要包括一個2.8英寸的TFT液晶模塊、1個SD卡插座、5個LED燈和2個按鍵。硬件系統如圖1所示。

 系統關鍵器件的電路原理圖如圖2所示。STM32系列MCU基于專為要求高性能、低成本、低功耗的嵌入式應用而設計的ARM Cortex-M3內核,包括了STM32F103增強型系列和STM32F101基本型系列。本設計使用的是增強型系列的高端型號STM32F103ZET6,其最高主頻可以達到72 MHz,內置512 KB的閃存以及64 KB的SRAM。同時其外設資源豐富,包括并行LCD接口(FSMC)、12通道DMA控制器、定時器、ADC、DAC、SDIO、I2C、SPI、USB、UART等[1]。可以說,它完全超越了同價位的8 bit或者16 bit單片機的性能,而又不像一般32 bit處理器那樣價格昂貴。

 本設計使用了一個帶有通用并行接口(FSMC)的2.8英寸TFT液晶模塊,這種液晶模塊很常見,而且價格便宜,另外還有3.2英寸甚至更大的尺寸可供選擇。STM32F103ZET6通過一個SPI接口與SD卡座連接,以便于控制和簡化程序,而且對于靜態圖片,SPI的傳輸速度已足夠。另外,還有用于調試的2個按鍵和5個LED。
2 軟件設計
2.1 移植FATFS文件系統

 FATFS文件系統是一種完全免費開源的FAT文件系統模塊,專為小型嵌入式系統而設計,用標準C語言編寫,很方便移植[2]。本設計移植的FATFS版本為R0.07e,它支持FAT12、FAT16和FAT32,由于不涉及多個存儲介質,因此,本設計僅移植了其簡化版本Tiny-FATFS,其占用內存更少,只需要大約1 KB RAM。FATFS具有三層結構,如圖3所示。

 應用層為用戶提供了一系列接口函數,只需要簡單的調用即可,而無需理會復雜的FAT協議。移植過程中,需要使用者修改的是底層接口(包括存儲介質讀寫接口和供給文件創建修改時間的實時時鐘)。
Tiny-FATFS包含5個文件,分別是tff.c、tff.h、diskio.c、diskio.h和integer.h,移植之前首先要編寫初始化和讀寫SD卡的SPI接口代碼。代碼主要包括SD_Init()、SD_ReadSingleBlock()、SD_ReadMultiBlock ()、SD_WriteSingle
 Block()、SD_WriteMultiBlock()函數,而這些代碼將在diskio.c中被調用。移植FATFS文件過程:
 (1)準備好SPI讀寫SD卡的代碼后就可以修改diskio.c了,實際上只需要編寫6個接口函數:
 ①存儲媒介初始化函數:DSTATUS disk_initialize(BYTE drv)。由于存儲媒介是SD卡,所以實際上是對SD卡的初始化。drv是存儲媒介號碼,由于Tiny-FATFS只支持一個存儲媒介,所以drv應恒為0。執行無誤返回0,錯誤返回非0。
?、跔顟B檢測函數:DSTATUS disk_status(BYTE drV)。檢測是否支持當前的存儲媒介,對Tiny-FATFS來說,只要drv為0,就認為支持,然后返回0。
?、圩x扇區函數:DRESULT disk_read(BYTE drv,BYTE*buff,DWORD sector,BYTE.count)。在SD卡讀接口函數的基礎上編寫,*buff存儲已經讀取的數據,sector是開始讀的起始扇區,count是需要讀的扇區數。1個扇區為512 B。執行無誤返回0,錯誤返回非0。
?、軐懮葏^函數:DRESULT disk_write(BYTE drv,const BYTE*buff,DWORD sector,BYTE count)。在SD卡寫接口函數的基礎上編寫,*buff存儲要寫入的數據,sector是開始寫的起始扇區,count是需要寫的扇區數。1個扇區為512 B。執行無誤返回0,錯誤返回非0。
?、荽鎯γ浇榭刂坪瘮担篋RESULT disk_ioctl(BYTE drv,BYTE ctrl,VoiI*buff)。ctrl是控制代碼,*buff存儲或接收控制數據。可以在此函數里編寫自己需要的功能代碼,如獲得存儲媒介的大小、檢測存儲媒介的上電與否,存儲媒介的扇區數等。如果是簡單的應用,也可以不用編寫,返回0即可。
?、轉WORD get_fattime(Void)。本設計未涉及到文件的創建和修改,因此實時時鐘部分未編寫,直接返回一個32 bit無符號整數即可。
 (2)對Tiny-FATFS進行配置,主要是修改tff.h和diskio.h。在diskio.h中,只需要配置一項:使能或者使能只讀屬性。由于本設計只涉及到SD卡的讀操作,因此定義使能只讀屬性:#define_READONLY1。這樣可以裁減掉關于寫SD卡的那部分代碼,從而使文件系統更精簡。
在tff.h中,需要對整個文件系統做全面的配置,包括:
 ①#define_MCU_ENDIAN 1。STM32是小端模式,選擇1。
?、?define_FS_READONLY 1。使能只讀操作,去掉寫操作,節省空間。
 ③#define_FS_MINIMIZE 3。設為3表示使用最基本的FATFS函數,最大限度節省空間。
?、?define_USE_STRFUNC 0。禁用字符串函數功能。
?、?define_USE_FORWARD 0。禁用forward功能。
 ⑥#define_FAT321。支持FAT32文件系統。
?、?define_USE_FSINFO 1。支持FAT32磁盤信息獲取。
 ⑧#define_USE_SJIS 0。禁用shift-JIS碼。
?、?define_USE_NTFLAG 1。對文件名大小寫敏感。
 到此為止,FATFS的移植就全部完成了。
 編寫一段程序測試FATFS是否移植成功。以1 s的間隔循環讀取SD卡中的bmp格式圖片并顯示,main函數的流程如圖4所示。

 需要說明的是,為了便于循環讀圖,SD卡中存儲的bmp格式圖片被刻意用數字編號來命名(如:1.bmp~n.bmp),這樣,在程序中只需要簡單處理文件名就可以按順序讀取圖片了。
 通常bmp圖片都是24位顏色深度的(即RGB=8:8:8),而本設計使用的TFT液晶是16位顏色深度的(即RGB=5:6:5),因此在程序中需要作轉換處理才能正常顯示。轉換程序代碼如下:
u16 RGB888toRGB565(u8 r,u8 g,u8 b)
{
 return(u16) (r & 0xF8) <<8|(g & 0xFC)<<3|(b &               0xF8)>>3;
}
 由于bmp圖片是最簡單的圖片格式,不涉及解碼處理,因此大大簡化了程序設計。
2.2 在μCOS-II平臺上加載FATFS文件系統
 FATFS的加載比其他一些嵌入式文件系統要簡單[4],只需要在工程中加入tff.c和diskio.c這兩個文件即可。需要注意的是,在tff.h中有以下4個函數:
int fputc(int, FIL*);
int fputs(const char*, FIL*);
int fprintf(FIL*, const char*, ...);
char* fgets(char*, int, FIL*);
 這4個函數與stdio.h中定義的函數有沖突,需要將其刪除。
 此外,tff.h中還定義了一個EOF,也與stdio.h中的定義有沖突,只需把它重命名即可(如EOFF)。
2.3 在μCOS-II平臺上編寫任務函數
 定義三個任務以實現數碼相框功能:
 static void TaskStart(void *pdata);
 static void Task1(void *pdata);
 static void Task2(void *pdata);
 其中,TaskStart的優先級最高,在main函數中,初始化?滋COS-II后即被創建:
 /* Initialize "μC/OS-II, The Real-Time Kernel"*/
             OSInit();
 /* Create the start task */
            OSTaskCreate(TaskStart,(void*)0,
              &TaskStartStk[TASK_START_STK_SIZE-1],0);
 負責初始化目標板、SD卡和LCD,并創建任務Task1,同時處理按鍵USER_BUTTON_1。當按下USER_BUTTON_1時,刪除任務Task2,其流程如圖5所示。

 Task1的任務是循環讀取SD卡的bmp格式圖片并送LCD顯示,同時還要處理按鍵USER_BUTTON_2。當按下USER_BUTTON_2時,創建任務Task2,其示意性代碼如下:
static void Task1(void *pdata)
{
    /*    設置變量;   */
        While(1)
            {
                if(!USER_BUTTON_2)
        OSTaskCreate(Task2,(void *)0,
        &TaskStk2[TASK2_STK_SIZE-1],4);
        Read_pic_display();
        OSTimeDly(OS_TICKS_PER_SEC/2);
            }
    }
 Task2任務則只負責執行流水燈程序,即循環依次點亮5個LED,其優先級最低。
3 測試結果
 本設計的實驗平臺是STM32紅牛開發板,實物效果圖如圖6所示。

 實驗結果表明,μCOS-II+FATFS方案實現的數碼相框工作穩定,開機后μCOS-II加載成功即開始循環讀取SD卡中的bmp圖片并在TFT屏上顯示。圖片間的切換是簡單的拉幕式切換,間隔為5 s(可調),經長時間觀察,無讀取失敗、掉幀、花屏等問題,每張圖片都是完美展示。根據測試程序的設計,按下USER_BUTTON_2按鍵則流水燈任務被創建,5個LED燈開始以走馬燈的形式循環點亮;與此同時,圖片讀取和顯示未受到任何影響,證明μCOS-II的任務調度機制穩定可靠。再按下USER_BUTTON_1,則流水燈任務被刪除,LED停止動作。
 本設計基本實現了數碼相框的功能,其設計的硬件極其簡單,相比于一些基于高端32 bit MCU(如ARM)的方案[5],成本要低得多。相比于一些簡單的讀圖顯示程序,本設計基于嵌入式實時操作系統μCOS-II,在穩定性和可擴展性上都具有優勢。另外,STM32性能優越,可以很流暢地運行μCOS-II和FATFS系統,也能夠驅動QVGA甚至更高分辨率的TFT液晶屏,這是同價位8 bit或16 bit單片機所不能比擬的[6]。本設計還有需要改進的地方,如增加JPEG解碼、增強文件名支持、改進幻燈切換方式以及添加其他功能等。
參考文獻
[1] 王永虹,徐煒,郝立平.STM32系列ARM Cortex-M3微控制器原理與實踐[M].北京:北京航空航天大學出版社,2008.
[2] 洪岳煒,王百鳴,謝超英.一種易于移植和使用的文件系統FATFS Module[J].單片機與嵌入式系統應用,2008(1):29-31.
[3] 任哲.嵌入式實時操作系統μC/OS-II原理與應用[M].北京:北京航空航天大學出版社,2005.
[4] 王命延,余愛軍.一種加載在μCOS-II內核上的嵌入式文件系統[J].南昌大學學報,2005,29(2):197-199.
[5] 王偉能,吳爍宇,陳弟虎,等.基于S3C2410和Qt/Embedded的數碼相框設計[J].微計算機信息,2009,25(6-2):81-83.
[6] 鄭友勝.μCOS-II在C51中的應用設計[J].中小企業科技,2007(1):126-127.

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          久久婷婷久久| 欧美日韩免费观看一区=区三区| 国产精品电影网站| 亚洲高清自拍| 欧美色综合天天久久综合精品| 国产精品影音先锋| 国产精品国产自产拍高清av王其| 久久亚洲国产精品一区二区| 亚洲午夜电影在线观看| 亚洲三级免费观看| 午夜在线精品偷拍| 国产精品video| 欧美一区日韩一区| 欧美日韩在线免费观看| 亚洲色图自拍| 欧美精品亚洲一区二区在线播放| 亚洲免费av观看| 欧美一区二区三区在线观看视频| 久久精品国产一区二区三| 国产一区二区日韩| 性欧美在线看片a免费观看| 亚洲一区视频| 午夜精品一区二区三区四区| 国产精品黄色在线观看| 另类人畜视频在线| 亚洲欧美中文另类| 久久天天躁夜夜躁狠狠躁2022| 黄色av日韩| 国产欧美日韩视频一区二区三区| 国产乱码精品一区二区三区不卡| 亚洲欧美一区二区精品久久久| 在线观看欧美视频| 亚洲精品一区二区三区樱花| 黑人巨大精品欧美黑白配亚洲| 久久99在线观看| 在线观看成人小视频| 亚洲欧美日韩国产综合在线| 免费日韩精品中文字幕视频在线| 一本色道久久综合亚洲二区三区| 国产精品多人| 国产精品大片wwwwww| 久久人人爽人人| 亚洲欧美日韩成人高清在线一区| 亚洲无限乱码一二三四麻| 欧美极品在线视频| 欧美日韩蜜桃| 欧美午夜精品久久久久久人妖| 欧美亚洲在线观看| 午夜在线一区| 久久人人爽人人爽爽久久| 激情av一区| 亚洲免费高清| 韩国精品主播一区二区在线观看| 午夜精品美女久久久久av福利| 国产精品你懂的在线欣赏| 国产一区二区三区在线观看免费视频| 欧美一区二视频| 一区二区三区日韩精品| 在线观看91精品国产入口| 亚洲国产精品成人综合色在线婷婷| 亚洲综合日韩| 亚洲成色999久久网站| 国产一区二区三区无遮挡| 欧美美女操人视频| 一本色道久久| 亚洲欧美激情一区| 午夜精品美女久久久久av福利| 欧美日韩国产精品成人| 91久久精品国产91久久| 在线不卡中文字幕| 国产网站欧美日韩免费精品在线观看| 欧美电影美腿模特1979在线看| 你懂的国产精品永久在线| 欧美成人精品高清在线播放| 欧美日韩亚洲国产精品| 久久九九国产| 久久精品国产精品| 久久欧美肥婆一二区| 国产人久久人人人人爽| 久久狠狠一本精品综合网| 国产精品一区二区黑丝| 激情视频一区| 欧美日韩成人免费| 欧美一区二区三区喷汁尤物| 蜜桃视频一区| 国产一区二区黄| 老司机一区二区三区| 欧美一区二区播放| 久久一本综合频道| 在线亚洲欧美专区二区| 欧美 日韩 国产一区二区在线视频| 亚洲激情综合| 国产精品av久久久久久麻豆网| 国产精品国产三级国产专区53| 狠狠色丁香婷婷综合影院| 国产精品网站一区| 欧美人在线视频| 欧美精品亚洲| 亚洲天堂成人在线观看| 久久精品欧美| 在线观看国产一区二区| 久久综合国产精品台湾中文娱乐网| 久久久国产精彩视频美女艺术照福利| 欧美国产一区视频在线观看| 亚洲视频在线看| 国产精品劲爆视频| 国产亚洲精品美女| 亚洲日本成人网| 黑丝一区二区三区| 亚洲女女女同性video| 国产精品青草久久| 亚洲欧美日韩综合国产aⅴ| 国产精品yjizz| 午夜在线成人av| 亚洲黄色大片| 一区二区精品| 9久草视频在线视频精品| 国产欧美精品日韩区二区麻豆天美| 久久精品国产第一区二区三区| aⅴ色国产欧美| 久久免费午夜影院| 亚洲国产日韩欧美一区二区三区| 欧美日韩一区成人| 欧美日韩亚洲天堂| 永久免费毛片在线播放不卡| 国产精品初高中精品久久| 欧美一区二区三区喷汁尤物| 国语对白精品一区二区| 亚洲精品一区在线观看香蕉| 美女国内精品自产拍在线播放| 欧美专区福利在线| 久久中文字幕一区| 欧美激情一区二区三区在线视频观看| 香蕉久久久久久久av网站| 国产精品大片wwwwww| 欧美三日本三级少妇三2023| 亚洲网址在线| 亚洲视频一二| 国产在线一区二区三区四区| 国产专区精品视频| 欧美精品手机在线| 亚洲性xxxx| 国产精品自拍三区| 欧美亚洲一区二区三区| 欧美日韩另类字幕中文| 中文精品视频| 亚洲美女精品一区| 亚洲欧美一区二区在线观看| 亚洲高清不卡一区| 午夜精品国产更新| 美乳少妇欧美精品| 欧美日本不卡高清| 亚洲国产一区二区a毛片| 麻豆精品精品国产自在97香蕉| 欧美精品v日韩精品v国产精品| 欧美视频在线一区二区三区| 老牛嫩草一区二区三区日本| 国产主播一区二区三区| 伊人天天综合| 欧美日韩福利视频| 亚洲电影在线看| 欧美视频中文一区二区三区在线观看| 久久久噜噜噜久久| 午夜在线视频一区二区区别| 国产精品美女诱惑| 欧美日韩调教| 日韩视频在线免费| 99成人免费视频| 亚洲人成高清| 99国产精品久久久久久久| 亚洲大片一区二区三区| 国产精品国产三级国产普通话三级| 精久久久久久| 尤物视频一区二区| 免费观看在线综合色| 亚洲精一区二区三区| 亚洲手机在线| 欧美在线免费| 欧美xart系列高清| 国产精品国产福利国产秒拍| 欧美一区二区三区在线观看视频| 日韩一二三在线视频播| 亚洲卡通欧美制服中文| 欧美日韩福利视频| 欧美69wwwcom| 欧美日韩国产综合视频在线观看中文| 亚洲小说欧美另类婷婷| 一本久久综合亚洲鲁鲁| 亚洲美女av网站| 国产精品一区在线观看你懂的| 欧美日韩美女在线| 久久本道综合色狠狠五月| 欧美成人亚洲| 日韩午夜激情av| 一区久久精品| 亚洲国产成人午夜在线一区| 在线一区日本视频| 激情综合电影网| 亚洲人成网在线播放| 亚洲人线精品午夜| 极品尤物一区二区三区| 91久久国产综合久久| 亚洲国产精品成人精品| 亚洲国产专区校园欧美| 国产综合精品一区| 在线不卡中文字幕播放| 久久国产精品久久久| 国产精品初高中精品久久| 一区二区三区四区五区精品| 亚洲欧洲精品一区二区三区不卡| 国产一区二区三区视频在线观看| 亚洲高清在线视频| 久久久99久久精品女同性| 在线欧美小视频| 99这里只有久久精品视频| 99天天综合性| 久久久精品欧美丰满| 亚洲国产高清一区二区三区| 亚洲视频综合| 欧美14一18处毛片| 91久久久久| 亚洲欧美日韩国产另类专区| 亚洲香蕉成视频在线观看| 美女精品自拍一二三四| 国产精品人人爽人人做我的可爱| 黄色一区三区| av成人福利| 在线性视频日韩欧美| 亚洲激情校园春色| 久久成人综合视频| 一本久久综合亚洲鲁鲁五月天| 日韩视频在线一区二区| 亚洲国产视频一区| 国产精品99久久久久久久女警| 欧美一区二区三区在线| 艳妇臀荡乳欲伦亚洲一区| 欧美日韩亚洲一区三区| 一区二区三区在线免费视频| 夜夜爽av福利精品导航| 国产精品极品美女粉嫩高清在线| 欧美一二三区在线观看| 欧美电影免费观看高清| 一本色道久久88精品综合| 久久久久久9| 亚洲午夜三级在线| 亚洲福利免费| 国产精品日韩欧美一区二区| 亚洲伦理一区| 亚洲伦理在线免费看| 欧美中日韩免费视频| 午夜欧美视频| 欧美电影电视剧在线观看| 欧美亚洲日本一区| 久久一日本道色综合久久| 老牛国产精品一区的观看方式| 国产精品免费看久久久香蕉| 一区二区三区在线高清| 亚洲男人天堂2024| 亚洲欧美精品| 欧美日韩国产综合新一区| 美女主播一区| 国产精品色婷婷| 国产真实精品久久二三区| 亚洲一区二区三区高清不卡| 性欧美暴力猛交另类hd| 欧美日本一区二区视频在线观看| 韩国女主播一区二区三区| 欧美精品不卡| 欧美激情视频一区二区三区不卡| 久久国产88| 亚洲最新视频在线播放| 亚洲一区二区三区免费在线观看| 精品1区2区3区4区| 欧美日韩专区在线| 国产自产2019最新不卡| 欧美日本视频在线| 一区二区三区久久| 亚洲丶国产丶欧美一区二区三区| 国产精品对白刺激久久久| 在线观看欧美激情| 99人久久精品视频最新地址| 欧美精品自拍偷拍动漫精品| 亚洲乱码国产乱码精品精可以看| 国产精品v一区二区三区| 欧美一区二区播放| 日韩一级视频免费观看在线| 尤物网精品视频| 黄色成人精品网站| 国产精品免费aⅴ片在线观看| 蜜桃久久精品一区二区| 欧美刺激午夜性久久久久久久| 久久久久久久欧美精品| 久久久999成人| 欧美韩日一区二区| 久久亚洲私人国产精品va媚药| 在线视频欧美日韩精品| 亚洲欧美在线另类| 亚洲精品国精品久久99热| 亚洲精品一区中文| 欧美女人交a| 久久久久久亚洲综合影院红桃| 亚洲国产精品久久久久| 国产日韩精品在线观看| 亚洲美女少妇无套啪啪呻吟| 亚洲激情自拍| 亚洲精品视频免费在线观看| 欧美日韩一区二区三区在线| 性久久久久久久| 午夜激情综合网| 亚洲国产高清自拍| 国产一区二区三区精品欧美日韩一区二区三区| 欧美a级理论片| 欧美日产在线观看| 一本久道久久综合中文字幕| 狠狠狠色丁香婷婷综合激情| 亚洲黄色免费电影| 亚洲一本视频| 黄色成人91| 欧美国产高潮xxxx1819| 欧美大片在线观看一区| 国产亚洲一本大道中文在线| 欧美日韩大片| 欧美乱在线观看| 国产日韩欧美一区二区三区四区| 国产一区二区日韩精品欧美精品| 国产精品国产馆在线真实露脸| 欧美一区国产一区| 午夜影院日韩|