呂春豪,郭利進
(天津工業大學 電氣工程與自動化學院,天津300387)
呂春豪(碩士研究生),主要研究方向為微機控制技術;郭利進(副教授),主要研究方向為微機控制技術、現場總線。
伴隨著數碼科技的快速發展以及數碼相機的日益普及,傳統的相冊和相框由于自身局限性已經不能完全滿足人們日益增長的對于照片的有效存儲和分享的需求。鑒于此,數碼相框應運而生,經過幾年的發展,數碼相框[1]的外觀已經非常接近傳統相框,而且更為精致。從200萬像素發展到目前的600萬以上像素,畫面精度和質量已經有了大幅上升。此外,還有多功能數碼相框,除了能展示數碼照片外,還可以播放 MP3/MP4/幻燈片、電影/影像/電視,以及看電子書、設置鬧鐘和日歷等。
本文介紹一種簡單、低成本的數碼相框設計,主要由LPC1100系列MCU、SD存儲卡、TFT液晶屏以及電源等外圍電路組成。通過信號處理芯片LPC1114實現BMP圖片文件的讀取以及TFT液晶屏的顯示。經試驗,此數碼相框可以存儲和展示幾百甚至上千張的照片,能夠很好地完成SD卡中照片的循環播放,性能穩定且畫面清晰,比普通相框的單一功能更有優勢。
本數碼相框功能非常簡單,把320×240像素的16位或24位BMP照片放入SD卡中,數碼相框就會循環讀取SD卡中的照片,并逐一顯示。硬件平臺以NXP公司生產的低 功 耗、高 性 能 ARM Cortex-M0[2]內 核 微 控 制 器LPC1114為核心,配合一個SD卡和一個3.2英寸的TFT顯示屏。數碼相框硬件結構框圖如圖1所示。

圖1 數碼相框硬件結構框圖
電源電路作為本系統的供電電路具有十分重要的作用,是整個系統的動力核心。數碼相框一般情況下都是處于運行狀態,非常耗電,不適合采用電池供電,所以這里采用直流電源供電。首先,220V的交流電經過變壓整流轉換成9~12V的直流電壓,再通過二極管IN5819進入三端穩壓器7805轉換成5V電壓,然后通過西伯斯公司(Sipex半導體)生產的低壓差(LDO)穩壓芯片SPX1117轉換成系統需要的3.3V電壓。設計中選取7805主要出于兩方面的考慮:一是所需外圍元件少,內部有過流、過熱及調整管的保護電路;二是可以擴大輸入電壓范圍,并為其他5V電路提供電源。IN5819的作用是防止電源正負極接反,SPX1117是將7805穩定好的5V電壓轉換成系統需要的3.3V電壓。電源電路如圖2所示。

圖2 電源電路
存儲器采用普通SD卡,容量選擇在2GB以下,其SD卡存儲電路如圖3所示。SD卡最大的特點就是具有加密功能,可以充分保證數據資料的安全性。SD卡支持兩種可選的通信協議,分別為SD模式和SPI模式[3]。基于主控芯片的選擇,設計中采用SPI模式為彩屏模塊提供字庫和圖庫,這樣大大降低了硬件要求,同時又能很好地滿足系統的需求。需要注意的是,不同卡座引腳有所不同,所以在使用SD卡座時,注意先檢查引腳區別。

圖3 SD卡存儲電路
這里選擇市場上比較流行且方便購買的3.2寸TFT彩屏模塊[4],其控制芯片為ILI9320。為了節省LPC1114的I/O端口,在數據的輸入端口采用數據鎖存器74HC573進行數據鎖存,以實現兩次8位數據的分轉。背光采用8050三極管控制,串聯10kΩ限制電阻,放大電流達到300mA,完全能為5路LED提供足夠的電流。觸摸屏選擇電阻式觸摸屏,驅動芯片為ADS7843,以此實現對于數碼相框的鍵盤操作。其模塊電路如圖4所示。
處理器部分電路是本系統的核心電路,設計中選取NXP公司推出的基于ARM Cortex-M0內核的LPC1100系列MCU LPC1114。LPC1114屬于32位微控制器,主要面向8、16位微控制器的應用,具有高性能、低功耗、簡單指令集和統一編址尋址等優點,相對于市場上存在的8/16位架構來說,它有效地降低了代碼長度。它不僅能執行基本的控制任務,而且能進行復雜的運算。執行效率的提高直接轉換為能耗的降低。目前,LPC1100系列MCU運行速度高達50MHz,其功耗也得到了很大程度的優化——平均電流不到10mA。

圖4 TFT液晶模塊電路
LPC1114作為LPC1100系列的一種,內部資源非常豐富,簡要介紹如下:
① 多達42個帶有配置上拉/下拉電阻的通用GPIO,驅動電流可達20mA;
② 具有一個增強快速模式(FM+)I2C接口,4個通用定時器/計數器,8通道10位ADC;
③32KB片上Flash可編程存儲器,高達8KB的SRAM;
④ 一個RS-485/EIA-485標準的通用異步串行收發器,兩個具有SSP特性的SPI接口;
⑤ 擁有集成PMU(電源管理單元),可自動調整其內部的電壓調節器,以降低睡眠、深度睡眠和深度掉電模式期間的功耗。
控制部分電路其實就是LPC1114的最小系統電路,主要由時鐘電路、調試電路和復位電路組成,控制電路如圖5所示。
彩屏模塊程序可以分為兩大類:一類是內部函數,主要由復位函數、寫數據函數、寫寄存器函數、光標設置函數、顯示窗口設置函數、清屏函數等組成,供TFT模塊內部驅動程序調用;另一類為外部函數,主要由TFT初始化、背光控制、顯示測試、寫點函數等組成,專門提供用戶應用程序調用。

圖5 LPC1114控制電路
學習SPI總線時已經介紹了讀/寫SD卡的方法,對于SD卡的讀寫操作都是以扇區為基本單位進行的,但是,系統又是如何讀取的呢?又是怎么知道文件存放在哪些扇區呢?本設計采用文件系統FatFs[5]的方法對存儲器空間進行組織和分配,并對存入的文件進行保護和檢索。具體來說,也就是它負責為用戶建立文件、存入、讀出、修改、轉儲以及控制文件的存取,當用戶不再使用的時候撤銷文件。
FatFs文件系統的結構主要分為3個層:磁盤I/O操作、FatFs模塊和應用層。前兩層分別是移植文件系統需要編寫的驅動函數層和文件系統操作層,而最后一層就是用戶操作層,當文件系統移植完成后,用戶可以根據自己的需要編寫應用程序,操作磁盤。
FatFs作為一種開源項目具有容易移植、代碼小、占用資源少、支持RTOS和多扇區讀/寫等特點,非常適合微處理器使用。要移植FatFs文件系統,首先需要到FatFs文件系統的官方網站,下載文件系統源代碼。設計中使用的版本是FatFs R0.08b,具體移植步驟介紹如下:
① 解壓下載的文件系統,可以看到一共有兩個文件夾:一個是doc,包含FatFs的描述、特性說明等;另一個是src,可以存放所有的源代碼信息,一共有8個文件。
② 在工程下新建一個文件夾,存放文件系統源代碼。
③ 把源代碼都添加到相應的工程中,首先根據需要修改數據類型,在integer.h中修改適合的數據類型。
④ 配置文件系統,可以根據字節的需要進行配置,從而減小代碼和內存空間。
⑤ 打開diskio.c文件,編寫相應的函數,如初始化磁盤函數、磁盤狀態函數、讀/寫扇區函數、磁盤相關功能控制函數等。
⑥ 最后,需要在ff.c中添加函數get_fattime,此函數可獲取操作時間,便于在文件屬性中填寫相應的創建、修改、訪問時間。
BMP是Windows操作系統中的標準圖像文件格式,應用非常廣泛。它采用位映射存儲格式,除了圖像深度可選擇以外,不采用其他任何壓縮,因此,BMP占用的空間很大。BMP文件的圖像深度可選擇1位、4位、8位、16位、32位等。BMP文件存儲數據時,圖像的掃描方式是按照從左到右、從下到上的順序。典型的BMP圖像文件由4部分組成,如表1所列。

表1 BMP位圖文件結構
位圖顯示[6]是通過函數參數傳遞文件名,通過文件名讀取文件數據。讀取位圖數據時,先讀取54字節的頭信息,再根據頭信息判斷是否為位圖圖像。如果不是位圖,直接返回不再讀取數據;如果是位圖,再判斷是16位還是24位,并循環讀取數據信息,經過數據轉換后發送到TFT進行顯示。
讀取位圖文件需要調用FatFs文件系統的API函數,在讀取文件時需要注意以下3點:
① 首先要f_mounth函數注冊工作區,在文件讀取完成后,再調用這個函數來注銷工作區;
② 打開文件需要調用的f_open函數,當文件讀取完成后,再調用f_close函數關閉文件,所以這兩個函數必須成對出現;
③ 在讀取文件時,可以由f_read函數返回的結果和次函數的讀取結果來判斷數據是否讀取完成。
圖6為數碼相框軟件流程圖。系統上電后先按順序初始化系統時鐘、SSP0總線、SD卡以及TFT,之后循環掃描顯示數碼照片。代碼編寫過程中完全實現結構化,只需要直接調用數碼相框,掃描顯示函數BmpFileScan()即可實現其功能。

圖6 數碼相框軟件流程圖
數碼相框是基于NXP公司推出的Cortex-M0內核LPC1100系列ARM芯片LPC1114設計的,主要從硬件和軟件兩個方面介紹了一種簡易數碼相框的制作過程。硬件電路較為簡單,軟件方面通過FatFs文件系統的移植,能夠很好地完成BMP圖片的循環播放。經試驗,LPC1114微控制器能夠穩定地實現數碼相框的基本功能,實物效果如圖7所示。
對于一些特殊效果尚無法實現,再加上除了BMP格式外,都要涉及解碼問題,而使用微處理器軟件解碼非常緩慢的。對于這些不完善的地方在后續的研究中將逐步解決。

圖7 實物效果
[1]丁鑫蕾,劉一清,余奔.一種簡易數碼相框的設計[J].微型機與應用,2011(3):19-21,25.
[2]范云龍,方安平,李寧.Cortex-M0處理器初探[J].單片機與嵌入式系統應用,2010(6):79-82.
[3]楊懷德,樸希南.基于SPI的SD卡驅動軟件設計[J].現代計算機,2012(4):78-82.
[4]周波.TFT液晶顯示原理[J].科技咨詢,2006(35):15-18.
[5]李世奇,董浩斌,李榮生.基于FatFs文件系統的SD卡存儲器設計[J].測控技術,2011(12):84-86.
[6]楊喜東.基于AVR單片機的簡易數碼相框設計[J].機械電子,2012(9):135-136.