劉琦 占華林 葉立穎 傅鴻波 張開軒
(1、江西科技師范大學(xué)理工學(xué)院,江西南昌 330100 2、江西科技師范大學(xué),江西南昌 330013)
在電梯中,除了基本的機(jī)械升降之外,還需要有顯示屏提示使用者一些適當(dāng)?shù)男畔?,包括樓層和方向以及今后可能用到的特殊功能,而如今顯示信息還不夠豐富,有些電梯中的屏幕僅是簡單的LED 的靜態(tài)顯示,使用者可以獲得的信息有限并且乏味。隨著人們生活水平的日益提高,已經(jīng)漸漸需要更多的功能以及更好的觀感體驗(yàn)。而本文所介紹的點(diǎn)陣屏滾動(dòng)顯示使其能夠更直觀地觀察電梯的運(yùn)行狀態(tài),并且動(dòng)態(tài)地顯示可以給予使用者電梯正在運(yùn)行的速度感,能夠減少乘客等待時(shí)的無聊情緒,使用動(dòng)態(tài)顯示電梯的樓層必然會(huì)取代靜態(tài)顯示屏幕。
單片機(jī)由運(yùn)算器、控制器、Flash/RAM、I/O 接口、總線、定時(shí)器等模塊組成的一塊集成電路(SoC)。它還具有體積小、重量輕、價(jià)格低、可靠性高、使用靈活、資料豐富和開發(fā)周期短等優(yōu)點(diǎn)。嵌入式在如今生活中正在扮演越來越重要的角色,它可以應(yīng)用在非常多的地方,比如在汽車的車載裝置、工業(yè)車床上控制各種儀表儀器、網(wǎng)絡(luò)之間的數(shù)據(jù)傳輸和通訊、自動(dòng)化生產(chǎn)控制數(shù)據(jù)的實(shí)時(shí)處理、智能卡、樓宇控制以及音樂或遙控玩具等等。
基于以上的背景,本文選用STM32 單片機(jī)作為主控制器,用STM32 嵌入式口袋機(jī)進(jìn)行數(shù)字處理與輸出,再由口袋機(jī)上集成的GPIO 口輸入按鍵設(shè)置功能上的“上升”與“下降”來模擬電梯的上升與下降,最后由一塊16*16 點(diǎn)陣屏上下滾動(dòng)顯示。
項(xiàng)目中采用單片機(jī)控制LED 點(diǎn)陣滾動(dòng)顯示來做電梯的顯示模塊。因?yàn)長ED 的動(dòng)態(tài)顯示范圍廣、色彩清晰明亮、使用壽命較長以及工作可靠穩(wěn)定等眾多優(yōu)點(diǎn),LED 顯示屏幕現(xiàn)在已經(jīng)成為各種顯示媒體中顯示各種信息的理想選擇。而目前有一部分LED 點(diǎn)陣顯示系統(tǒng)為編程便利集成了字庫,從而減輕了軟件的工作量,雖然這樣顯示是會(huì)相對(duì)比較容易,但是顯示的效果也只能按照之前集成的模塊來顯示,而不能根據(jù)用戶的實(shí)際需求來改變顯示方式和顯示內(nèi)容,這樣子的反而是限制了LED 的使用范圍廣的優(yōu)點(diǎn),就不能滿足某些特殊的顯示要求,比如說,電梯在上升或下降的過程中,箭頭的朝上或朝下或某些符號(hào)和圖像的動(dòng)態(tài)顯示,常規(guī)的LED 點(diǎn)陣顯示系統(tǒng)難以實(shí)現(xiàn)其效果。所以我們采用基于STM32 嵌入式口袋機(jī)的C 語言編程的方式來完成這些特殊的顯示,相比之下,這個(gè)方法會(huì)更為的靈活,不但能夠顯示電梯運(yùn)行的層數(shù),而且還可以用不同動(dòng)態(tài)顯示方式來顯示電梯的各種運(yùn)行狀態(tài),讓乘坐電梯的顧客可以更清晰、簡明、直觀的了解到電梯的運(yùn)行狀態(tài)。
要實(shí)現(xiàn)電梯的升降提示,首先在沒有輸入的情況下保持現(xiàn)有的狀態(tài),在初始狀態(tài)下則不顯示。再通過口袋機(jī)上集成的GPIO 口輸入“上升”和“下降”信號(hào)。芯片檢測到信號(hào)之后,則根據(jù)代碼判斷執(zhí)行哪一條語句。通過C 語言代碼定義的兩個(gè)函數(shù)和用PCtoLED2002 軟件進(jìn)行數(shù)字的取模。在收到信號(hào)之后,則會(huì)執(zhí)行響應(yīng)的函數(shù),從而從IO 口輸出相應(yīng)的電信號(hào),使點(diǎn)陣屏顯示相應(yīng)的數(shù)字以及數(shù)字的滾動(dòng)。需要說明的是,雖然是逐行顯示,但是由于人的視覺滯頓和LED 顯示的余輝效應(yīng),人往往會(huì)感覺到16 行LED 是同時(shí)顯示的。
本設(shè)計(jì)中我選的是STM32 單片機(jī),它基于Cortex-M3 系列的基礎(chǔ)上優(yōu)化定點(diǎn)運(yùn)算能力、新增加了浮點(diǎn)運(yùn)算單元(滿足高性能計(jì)算需求)、數(shù)字信號(hào)處理單元(DSP)及并行計(jì)算模塊等,該款芯片既有較強(qiáng)的控制能力和信號(hào)處理功能,極大地?cái)U(kuò)大使用范圍。本論文使用的口袋機(jī)采用了上述芯片,既保留了原有芯片的開放狀態(tài),I/O 口盡量引出,每個(gè)擴(kuò)展口輸出電源均設(shè)有過流、過載、短路保護(hù)等,超過限定值立即斷電。在使用轉(zhuǎn)接板時(shí),同時(shí)支持正反面插接,均可以正常供電使用。
圖1 口袋機(jī)主板
在設(shè)計(jì)中,選擇的是16×16 點(diǎn)陣,該點(diǎn)陣模塊由256 個(gè)LED組成,我們只要其相對(duì)應(yīng)的X 軸、Y 軸順向偏壓,即可使LED發(fā)亮。具體來說,可以行掃描或列掃描,但不同方式的掃描取得的字模不一樣。若采用行掃描方式,高電平從第一行開始掃描,根據(jù)字模把相應(yīng)列的電平置低,同時(shí)還要保持一定的延時(shí),這樣才算完成了一行的掃描,直到所有行掃描。為了讓人眼能觀察到字符顯示效果,上述掃描必須重復(fù)一定次數(shù)。
圖2 點(diǎn)陣屏原理圖
軟件程序是整個(gè)控制系統(tǒng)的核心部分,本設(shè)計(jì)中采用的是基于STM32 嵌入式口袋機(jī)的C 語言進(jìn)行編程,與匯編語言相比,C 語言具有編程效率高、結(jié)構(gòu)性強(qiáng)、易讀、便于移植等優(yōu)點(diǎn),適應(yīng)大規(guī)模工程編程。LED 點(diǎn)陣屏采用動(dòng)態(tài)掃描的方式,實(shí)現(xiàn)對(duì)字符、數(shù)字、圖案等信息的傳輸控制及顯示。在軟件開發(fā)平臺(tái)方面,采用界面友好、集編輯、編譯于一體、適應(yīng)多種語言的軟件開發(fā)平臺(tái)——Keil uVision5。由于在本次項(xiàng)目設(shè)計(jì)中選用的點(diǎn)陣屏沒有自帶字庫,所以需要在程序代碼中自己設(shè)置一個(gè)數(shù)組用來存放單個(gè)數(shù)字的“模”,而本次實(shí)驗(yàn)所使用的取模軟件是PCtoLED2002,在軟件中選擇好16*16 的大小的LED 屏幕,除了有通過數(shù)字自動(dòng)生成的字符模式之外,還有可以用來生成箭頭符號(hào)的圖形模式。再結(jié)合代碼中的實(shí)現(xiàn)電信號(hào)輸出的算法,將屏幕分為上半屏和下半屏輸出,8 位為一個(gè)元素,總共有32 個(gè)元素的數(shù)組,在取模中將輸出模式改為列行式。
實(shí)現(xiàn)刷屏滾動(dòng)的方式即為,定義一個(gè)顯示數(shù)組,不斷循環(huán)輸出,而在每次循環(huán)輸出的時(shí)候,將里面的元素按照數(shù)字的列行式依次替換,從而達(dá)到上升下降的效果。
軟件實(shí)現(xiàn)的主要功能包括有:a.使用庫函數(shù)獲取GPIO 口輸入信號(hào)。b.If 條件語句判斷輸入信號(hào)為“上升”還是“下降”。c.輸出電信號(hào)至點(diǎn)陣屏中,使可以觀察到可以理解的正常圖形。d.使用數(shù)組的方法實(shí)現(xiàn)數(shù)字的“上升”和“下降”。e. 使用PCtoLED2002 軟件實(shí)現(xiàn)對(duì)數(shù)字的取模。接通電源后,如果一開始沒有接受到任何輸入信號(hào),則點(diǎn)陣屏上不顯示任何圖像。如果在顯示完一遍之后,沒有接收到最新的輸入信號(hào),則顯示的數(shù)字不變。下面列出軟件的主要子模塊:主程序模塊、中斷模塊、LED 顯示模塊。
4.1 主程序模塊:調(diào)用GPIO 寄存器初始化函數(shù)、定時(shí)寄存器初始化、中斷初始化、LED 顯示模塊
4.2 中斷模塊:通過GPIO 捕捉電梯按鍵,當(dāng)有鍵按下時(shí),觸發(fā)中斷,運(yùn)行中斷服務(wù)函數(shù)
4.3 LED 顯示模塊:使用PCtoLED2002 軟件實(shí)現(xiàn)對(duì)數(shù)字的取模,并將數(shù)據(jù)送入到16*16 點(diǎn)陣屏顯示
通過實(shí)物測試,本文采用的STM32 單片機(jī)作為主控制器,使用集成GPIO 口輸入信號(hào)控制和16*16 點(diǎn)陣屏顯示,通過STM32F407 控制口袋機(jī)IO 口輸出的電信號(hào),來使屏幕上可以正確顯示數(shù)字和方向。