基于嵌入式系統(tǒng)的LCD廣告牌設計
摘要:隨著科技的發(fā)展,ARM在社會各個方面的應用越來越廣。ARM芯片廣泛應用于無線產(chǎn)品、PDA、GPS、網(wǎng)絡、消費電子產(chǎn)品、STB及智能卡。LPC2103是PHILIPS公司生產(chǎn)的基于ARM7TDMI的RISC微處理器,工作頻率可達70MHZ。液晶顯示是嵌入式系統(tǒng)中反映系統(tǒng)輸入/輸出的人機交互界面,液晶顯示以其微功耗、體積小、顯示內(nèi)容豐富、模塊化,接口電路簡單等諸多優(yōu)點得到廣泛應用。我們在看重高性價比的情況下,利用LPC2103的通用I/O口來控制液晶顯示屏的軟硬件方法,實現(xiàn)了與LCD控制模塊一樣的功能。
1 引言嵌入式系統(tǒng)是嵌入到對象體系中的專用計算機系統(tǒng)。以嵌入式計算機為核心的嵌入式系統(tǒng)是繼IT網(wǎng)絡技術之后,又一個新的技術發(fā)展方向。本文以LPC2103為控制核心介紹和設計了一款基于的ARM嵌入式系統(tǒng)的LCD顯示系統(tǒng)。該系統(tǒng)在功耗、體積、集成度、成本等都有較好的優(yōu)勢,具有一定的實用意義。
由于LCD液晶顯示器具有功耗低、體積小、重量輕、超薄等諸多其他顯示器無法比擬的優(yōu)點已廣泛應用于各種智能型儀表和低功耗電子產(chǎn)品中。液晶顯示器分為筆段式、字符點陣式和圖形點陣式三種。前兩種可顯示數(shù)字、字符和符號等,而圖形點陣式液晶顯示器還可以顯示漢字和任意圖形,達到圖文并茂的效果。其應用已越來越廣泛。本文以液晶顯示器1602為例介紹了液晶顯示器的基本原理及在ARM嵌入式系統(tǒng)下的程序設計。
2 總體設計方案
2.1 設計思路LCD1602廣告牌設計采用ARM7微處理器為核心,采用RAM和UART分別存儲和傳輸數(shù)據(jù),實現(xiàn)了LPC2103與LCD1602之間的數(shù)據(jù)傳輸。首先進行l(wèi)pc2103進行管腳配置,通過管腳連接模塊PINSEL0,PINSEL1設置管腳連接GPIO,但要先進行復位,復位值為0x00000000。設置管腳方向IODIR,也就是輸入或者輸出,其中對應為1表示輸出,為0表示輸入。設置高低電平,相關寄存器采用IOSET/IOCLR,IOSET表示讓引腳輸出1,IOCLR表示讓引腳輸出0。完成LPC2103管腳的配置后,才可以對它進行操作。
液晶屏在LPC2103的控制下進行顯示,需要先向液晶屏寫入一些顯示設置命令,然后再寫入顯示數(shù)據(jù)。向液晶屏寫入顯示設置命令時,先將管腳RS清0。當設置完成后,需要使管腳RS置1以寫入顯示數(shù)據(jù)。同時,R/W也接入低電平,數(shù)據(jù)從液晶屏的管腳DB0-DB7寫入。當管腳RS和R/W設置好后,執(zhí)行對管腳E清零,就會在管腳E上形成一個由高到低的跳變,這個跳變使得命令或顯示數(shù)據(jù)從數(shù)據(jù)總線DB0-DB7進入液晶屏。
在進行程序設計時,對液晶屏的操作設計到寫數(shù)據(jù)和寫命令的操作,我們可以將寫數(shù)據(jù)、寫命令以及液晶屏顯示做成一個函數(shù)。我們將要顯示的字符存儲在數(shù)據(jù)中,對液晶屏執(zhí)行初始化操作后,通過調(diào)用這些函數(shù),來完成LCD的顯示。
2.1.1 LCD廣告牌顯示流程 LCD1602液晶屏廣告牌顯示流程圖如下











2.2 程序流程圖LCD廣告牌設計程序流程圖
3 開發(fā)環(huán)境1.硬件:PC機一臺,暢學ARM7—LPC2103核心板一塊;
2.軟件:WINDOWS10系統(tǒng),KEIL UVISION4、PROTEUS7.8、LAUNCH LPC210X_ISP開發(fā)環(huán)境。
4 設計原理分析4.1 LPC2103簡介LPC2103 是基于一個支持實時仿真的32位ARM7的TDMI-S CPU的微控制器,并帶有32kB 嵌入的高速 Flash 存儲器。128 位寬度的存儲器接口和獨特的加速結構使 32 位代碼能夠在最大時鐘速率下運行。對中斷服務程序和 DSP 算法中性能要求嚴格的應用,這增加的性能比在 Thumb 模式下的性能超出多達 30%。對代碼規(guī)模有嚴格控制的應用,使用 16 位 Thumb 模式將代碼規(guī)模降低超過 30%,而性能的損失卻很小。

較小的封裝和很低的功耗使 LPC2103 特別適用于訪問控制和 POS 機等小型應用中;由于內(nèi)置了寬范圍的串行通信接口(范圍從多個 UART、SPI 和 SSP 到兩條 I 2 C 總線)和 8kB 的片內(nèi) SRAM,它們也非常適合于通信網(wǎng)關和協(xié)議轉(zhuǎn)換器。高級性能還使這些器件適合用作數(shù)學協(xié)處理器。多個 32 位和 16 位定時器、1 個改良的 10 位 ADC、所有定時器上輸出匹配的 PWM 特性、以及具有多達 13 個邊沿或電平觸發(fā)的外部中斷管腳的32條高速 GPIO 線,使這些微控制器特別適用于工業(yè)控制和醫(yī)療系統(tǒng)中。
(1).特性
32 位 ARM7 TDMI-S 微控制器,超小 LQFP48 封裝。
8kB 的片內(nèi)靜態(tài) RAM 和 8kB/16kB/32kB 的片內(nèi) Flash 程序存儲器。128位寬度接口/加速器可實現(xiàn)高達 70 MHz 工作頻率。
通過片內(nèi) boot 裝載程序?qū)崿F(xiàn)在系統(tǒng)/在應用編程(ISP/IAP)。單個 Flash 扇區(qū)或整片擦除時間為 100ms。256 字節(jié)編程時間為 1ms。
嵌入式 ICERT通過片內(nèi) RealMonitor 軟件提供實時調(diào)試。
10 位 A/D 轉(zhuǎn)換器提供 8 路模擬輸入(每個通道的轉(zhuǎn)換時間低至 2.44us),以及特定的結果寄存器來最大限度地減少中斷開銷。
2 個 32 位定時器/外部事件計數(shù)器(帶7路捕獲和7路比較通道)。
2 個 16 位定時器/外部事件計數(shù)器(帶 3 路捕獲和 7 路比較通道)。
低功耗實時時鐘(RTC)具有獨立的電源和特定的 32kHz 時鐘輸入。
多個串行接口,包括2個UART(16C550)、2 個高速 I 2 C 總線(400 kbit/s)、SPI 和具有緩沖作用和數(shù)據(jù)長度可變功能的 SSP。
向量中斷控制器(VIC),可配置優(yōu)先級和向量地址。
多達 32 個通用 I/O 口(可承受 5V 電壓)。
多達 13 個邊沿或電平觸發(fā)的外部中斷管腳。
通過一個可編程的片內(nèi) PLL(100us 的設置時間)可實現(xiàn)最大為 70MHz 的 CPU 操作頻率,其具有 10MHz~25MHz 的輸入頻率。
片內(nèi)集成振蕩器與外部晶體的操作頻率范圍為 1~25MHz。
低功耗模式包括空閑模式、掉電模式和帶有效 RTC 的掉電模式。
可通過個別使能/禁止外圍功能和外圍時鐘分頻來優(yōu)化額外功耗。
通過外部中斷或 RTC 將處理器從掉電模式中喚醒。
(2).結構簡介
LPC2103包含一個支持仿真的 ARM7TDMI-S CPU,片內(nèi)存儲器控制器接口的ARM7局部總線,中斷控制器接口的 AMBA 先進高性能總線(AHB)和連接片內(nèi)外設功能的ARM 外設總線(APB,ARM AMBA 先進外設總線的兼容超集)。LPC2103 將 ARM7TDMI-S 處理器配置為小端字節(jié)順序。
AHB 外設分配了 2M 字節(jié)的地址范圍,它位于 4G 字節(jié) ARM 存儲器空間的最頂端。每個AHB 外設都在 AHB 地址空間內(nèi)分配了 16k 字節(jié)的地址空間。LPC2103 的外設功能(中斷控制器除外)都連接到 APB 總線。AHB 到 APB 的橋?qū)?APB 總線與 AHB 總線相連。APB 外設也分配了 2M 字節(jié)的地址范圍,從 3.5G 字節(jié)地址點開始。每個 APB 外設在 APB地址空間內(nèi)都分配了 16k 字節(jié)地址空間。
(3).LPC2103存儲器系統(tǒng)
片內(nèi)Flash存儲器系統(tǒng):LPC2103含有32kB Flash 存儲器系統(tǒng)。該存儲器可用作代碼和數(shù)據(jù)的存儲。對FLASH存儲器的編程可通過幾種方法來實現(xiàn):使用內(nèi)置的串JTAG接口、使用在系統(tǒng)編程(ISP)和 UART、使用在應用編程(IAP)功能、使用IAP功能的應用程序也可以在應用程序運行時對 Flash 進行擦除和/或編程。
片內(nèi)靜態(tài) RAM(SRAM):片內(nèi)靜態(tài)RAM(SRAM)可用作代碼和/或數(shù)據(jù)的存儲,它支持32位的訪問。LPC2103含有8kB的靜態(tài) RAM。LPC2103 SRAM 可作為一個字節(jié)尋址的存儲器訪問。對存儲器進行字和半字訪問時將忽略地址對準,并訪問被尋址的自然對準值(因此,對存儲器進行字訪問時將忽略地址位0和1,半字訪問時將忽略地址位 0)。因此,有效的讀寫操作要求半字數(shù)據(jù)訪問的地址線 0 為 0(地址以 0、2、4、6、8、A、C 和 E 結尾),字數(shù)據(jù)訪問的地址線0和1都為0地址(以0、4、8 和 C 結尾)。該原則同樣用于片外和片內(nèi)存儲器。
SRAM 控制器包含一個回寫緩沖區(qū),它用于防止 CPU 在連續(xù)的寫操作時停止運行。回寫緩沖區(qū)總是保存著軟件發(fā)送到 SRAM 的最后一個字節(jié)。該數(shù)據(jù)只有在軟件請求下一次寫操作時才寫入 SRAM(數(shù)據(jù)只有在軟件執(zhí)行另外一次寫操作時被寫入 SRAM)。如果發(fā)生芯片復位,實際的 SRAM 內(nèi)容將不會反映最近一次的寫請求(即:在一次“熱”芯片復位后,SRAM 不會反映最后一次寫入的內(nèi)容)。任何在復位后檢查 SRAM 內(nèi)容的程序都必須注意這一點。通過對一個單元執(zhí)行兩次相同的寫操作可保證復位后數(shù)據(jù)的寫入。或者,也可通過在進入空閑或掉電模式前執(zhí)行虛寫(dummy write)操作來保證最后的數(shù)據(jù)在復位后被真正寫入到SRAM。
(4).晶體振蕩器
LPC2103板上振蕩器電路僅支持 1MHz~25MHz 的外部晶振。如果片內(nèi) PLL 系統(tǒng)或引導裝載程序被使用,那么輸入時鐘頻率將被限制到 10MHz~25MHz。
LPC2103 的振蕩器可工作在兩種模式下:從屬模式和振蕩模式。
從屬模式下,輸入時鐘信號與一個 100pF 的電容(圖 6 的 Cc,a 圖)相連,其幅值至少為 200mVrms。該配置下的 X2 管腳不連接。如果選擇從屬模式,F(xiàn)osc 信號(占空比為 50-50)的頻率被限制在 1MHz~50MHz。
如果選擇器件的振蕩器模式為板上振蕩模式,那么 Fosc 時鐘限制在 1MHz~30MHz。

(5).外部中斷輸入
LPC2103 含有3個外部中斷輸入(作為可選的管腳功能)。當組合管腳時,外部事件可作為3個獨立的中斷信號處理。外部中斷輸入可用于將處理器從掉電模式中喚醒。
此外,所有 10 個捕獲輸入還可以用作外部中斷而無需將器件從掉電模式中喚醒。
4.2 LCD1602顯示電路“1602”代表該屏每行最多顯示16個字符,能顯示兩行。顯示內(nèi)容可以是英文大小寫字母、數(shù)字、標點符號、常用符號等。1602液晶屏上通常有16個管腳,其背面會看到驅(qū)動電路。在液晶屏的顯示區(qū)域中還安裝有光源器件,稱之為液晶屏的背光,用來照亮顯示屏。
(1). LCD1602接口信號說明表:

(2).LCD102原理圖

(3).RAM地址映射區(qū)

(4).LCD1602指令表
(5).LCD1602基本操作時序
讀狀態(tài) 輸入:RS=L,R/W=H,E=H 輸出:D0—D7=狀態(tài)字。
讀數(shù)據(jù) 輸入: RS=H,R/W=H,E=H 輸出:無。
寫指令 輸入:RS=L,R/W=L,D0-D7=指令碼,E=高脈沖 輸出:D0-D7=數(shù)據(jù)。
寫數(shù)據(jù) 輸入:RS=H,R/W=L,D0-D7=數(shù)據(jù),E=高脈沖 輸出:無。
5 系統(tǒng)測試下面為實物效果圖:

6 總結與體會作為一名物聯(lián)網(wǎng)工程專業(yè)的大三學生,我覺得學好嵌入式是十分有意義的,而且是十分必要的。在已度過的大學時間里,我們大多數(shù)接觸的是專業(yè)課。我們在課堂上掌握的僅僅是專業(yè)課的理論知識,如何去鍛煉我們的實踐能力?如何把我們所學的專業(yè)基礎課理論知識運用到實踐中去呢?而傳統(tǒng)的期末理論考試無法讓我們真正理解嵌入式系統(tǒng),這次嵌入式系統(tǒng)的課程考核改革就為我們提供了良好的實踐平臺,將理論付諸于實踐。
在這次《ARM嵌入式系統(tǒng)原理》期末課程考核中,我設計的題目是《基于嵌入式系統(tǒng)的LCD廣告牌設計》。通過這次設計,我對ARM嵌入式系統(tǒng)尤其是嵌入式系統(tǒng)程序設計有了初步的了解,同時知識面也進一步得到了擴展和加深。
由于以前一直學的是51單片機,對于嵌入式的學習也只停留在理論上,甚至都沒有見過真正的ARM芯片。剛開始做嵌入式作品時,我拿到一塊ARM7-LPC2103核心板時也是一頭霧水,翻開芯片手冊,只感覺ARM的管腳配置和寄存器配置和我之前學過的51有很大差別,感覺似懂非懂。但既然拿到了板子就要把嵌入式的作品做出來。
在做本次嵌入式作品的過程中,我感觸最深的當屬查閱大量的設計資料了。為了讓自己的設計更加完善,查閱這方面的設計資料是十分必要的,同時也是必不可少的。我們是在做作品,但我們不是藝術家,他們可以拋開實際盡情在幻想的世界里翱翔,而我們一切都要有據(jù)可依,有理可尋,不切實際的構想永遠只能是構想,永遠無法升級為設計。
其次,在這次課程設計中,我們運用到了以前所學的專業(yè)課知識,如:Proteus仿真、C語言、模擬和數(shù)字電路知識等,并且也熟悉了keil環(huán)境下開發(fā)ARM的過程。雖然過去從未獨立應用過它們,但在學習的過程中帶著問題去學我發(fā)現(xiàn)效率很高,這是我做這次嵌入式作品后的又一收獲。要做好一個作品,就必須做到:在設計程序之前,對所用微控制器的內(nèi)部結構有一個系統(tǒng)的了解,知道該控制器內(nèi)有哪些資源;要有一個清晰的思路和一個完整的的軟件流程圖;在設計程序時,不能妄想一次就將整個程序設計好,反復修改、不斷改進是程序設計的必經(jīng)之路。
要養(yǎng)成注釋程序的好習慣,一個程序的完美與否不僅僅是實現(xiàn)功能,而應該讓人一看就能明白你的思路,這樣也為資料的保存和交流提供了方便;在設計作品過程中遇到問題是很正常的,但我們應該將每次遇到的問題記錄下來,并分析清楚,以免下次再碰到同樣的問題。雖然作品做出來了,但是從中學到的知識會讓我受益終身。
附錄1:電路圖