戴 娟,孫亞中
DAI Juan1, SUN Ya-zhong2
(1. 南京工業(yè)職業(yè)技術(shù)學院 電氣與電子工程學院,南京 210046;2. 中國電子科技集團 第五十五研究所,南京 210046)
LED顯示屏已經(jīng)廣泛應用于現(xiàn)實社會中,許多從事該行業(yè)的人員都經(jīng)歷過相應編程設計,但在LED顯示屏實現(xiàn)書寫顯示功能方面,涉及的人員并不多,相關(guān)資料也很少,特別是用單片機控制實現(xiàn)LED顯示屏中較復雜功能——圖像拖移方面的處理編程,觸及的人員和可查資源就更少。
早期在一個N×N點陣LED書寫屏中,用單片機實現(xiàn)完成任意圈定圖像拖移的功能編程時,采用圈定圖像地址中顯示數(shù)據(jù)的搬家、覆蓋,出現(xiàn)再次移動時會將原顯示圖形修改,移動過的區(qū)域圖像,會出現(xiàn)拖動痕跡,即移動區(qū)域的圖形不能恢復的問題。本文給出了一個用51單片機控制系統(tǒng),借助C語言中的動態(tài)數(shù)組完成移動圈定圖形,并能將拖移過的軌跡消除,恢復原圖形的功能設計方法構(gòu)思及相應程序。
LED點陣書寫顯示屏結(jié)構(gòu)分:點陣模塊,光筆控制器,圖像控制器。結(jié)構(gòu)如圖1所示。
圖2(a)中光敏電陰與三個運放器構(gòu)成光筆;圖2(b)中使用STC12C5410單片機作控制核心,74HC161與74HC245作譯碼驅(qū)動,共同產(chǎn)生LED點陣屏的行譯碼信號,LED的列信號則由單片機的端口P1.5串行輸出。
圖1 LED點陣書寫顯示屏
圖像拖移的處理步驟主要有:對圖像圈定點的處理、對圈內(nèi)圖像坐標點的處理和顯示圖像數(shù)據(jù)的移動。
1)對圖像圈定點的處理:把圈上的點按照行進行排序,取出列坐標的最大值和最小值。
2)對圈內(nèi)圖像坐標點的處理:上一步取出的行和列坐標的最大值和最小值可以構(gòu)成一個矩形,把矩形內(nèi)的地址進行坐標化并存入數(shù)組。
3)顯示圖像數(shù)據(jù)移動:上述兩步執(zhí)行后,光筆觸及屏上的第一點(x1,y1)定為基準點,第二點(x2,y2) 為結(jié)束點,隨著光筆移動,而前面被圈中的點跟隨基準點移動,當單片機處理速度比較高時,人眼就可察覺拖移的效果。
圖2 控制器原理圖
圖3 LED點陣圖像顯示數(shù)據(jù)區(qū)結(jié)構(gòu)原理圖
單片機軟件編程中針對圖像拖動顯示功能要求,開辟了三個顯示數(shù)據(jù)RAM區(qū),如圖3,其中顯示數(shù)據(jù)區(qū)DDS和原圖像數(shù)據(jù)區(qū)OIS為與屏體相關(guān)的、同樣大小的靜態(tài)數(shù)組[a][b],圈定對象圖像區(qū)MIS數(shù)據(jù)則應根據(jù)程序員習慣來構(gòu)建。
關(guān)鍵是原顯示圖像數(shù)據(jù)不能被拖動過的顯示圖像數(shù)據(jù)修改??梢圆捎迷赟RAM 中開辟同屏幕同大小的顯示緩存,用來保存原圖像數(shù)據(jù),該數(shù)據(jù)只有在調(diào)用新的顯示圖像時才被修改。
LED點陣顯示時,利用顯示指針所指的地址與移動圖像地址比較,當在該移動區(qū)域內(nèi)則調(diào)用該區(qū)域數(shù)據(jù),超出該移動區(qū)域則調(diào)用原顯示圖像數(shù)據(jù)。
數(shù)組構(gòu)建:1)顯示數(shù)據(jù)區(qū)DDS(對應顯示數(shù)據(jù)數(shù)組DDS[a][b])
3.4 抗細菌生物膜 細菌生物膜是指細菌侵入人體后形成的由細菌及其分泌的含水聚合性基質(zhì)共同組成的膜樣多細菌復合體,是細菌繁殖及對抗宿主的一種方式。細菌形成生物膜后其耐藥性是游離狀態(tài)的 500~1 000 倍,可使細菌逃避宿主的體液免疫及細胞免疫反應。MA 主要通過以下 2 個方面發(fā)揮抗細胞生物膜作用:(1)減少生物膜形成期藻酸鹽等物質(zhì)的含量;(2)于細胞生物膜的Ⅰ基因區(qū)發(fā)揮作用,通過降低酰基絲氨酸內(nèi)脂酶濃度、抑制細菌群體感應等功能破壞已生成的生物膜[25]。
2)原圖像數(shù)據(jù)區(qū)OIS(對應顯示數(shù)據(jù)數(shù)組OIS[a][b])
3)圈定圖形數(shù)據(jù)區(qū)MIS有兩種方法:靜態(tài)區(qū),動態(tài)區(qū)。考慮到靜態(tài)區(qū)的程序處理雖簡單,但占用資源大;而動態(tài)區(qū)程序處理復雜,但資源重復利用率較高。我們采用構(gòu)建動態(tài)數(shù)組,對應數(shù)據(jù)數(shù)組unsigned char xdata *pdat。
所有數(shù)組中的數(shù)據(jù)均以二進制形式與LED 點陣一一對應。
如圖4 所示。
圖4 圖像拖移軟件流程
1)通過控制器采用亮點掃描方式獲取光筆所在的行列x、y坐標,將該數(shù)據(jù)按照先x后y順序存入一維動態(tài)數(shù)組paddr [n],即n為偶數(shù)為x坐標,n為奇數(shù)為y坐標建立初始的移動區(qū)域地址坐標數(shù)組。
2)利用冒泡法[1]或三目運算(x = (x<y)? x:y和x = (x>y)? x:y) )在paddr [ ]中找出最大、最小行xmax、 xmin。
3)建立移動圖形地址數(shù)組pp[ ][ ],從xmin到xmax, 根據(jù)x依次遞增排序,在數(shù)組paddr[ ]找出同x值時列y坐標,將y值大者送pp [1][x-xmin],值小者送pp [0][x-xmin]。
4)根據(jù)移動圖形地址數(shù)組pp [ ][ ]和原始圖形數(shù)據(jù)數(shù)組OIS [a][b],建立移動圖形數(shù)據(jù)數(shù)組pdat[],行為從xmin到xmax依次增加,只需要保存列數(shù)據(jù)。
5)接收光筆移動坐標數(shù)據(jù),處理需移動的偏移值xl=x2-x1、yl=y2-y1,根據(jù)偏移值修改移動圖形地址數(shù)組pp [ ][ ]。
6)根據(jù)移動圖形地址數(shù)組pp [ ][ ]、移動圖形數(shù)據(jù)數(shù)組pdat [ ]和原圖形數(shù)據(jù)數(shù)組OIS [ ][ ],構(gòu)建顯示圖形數(shù)據(jù)數(shù)組DDS [ ][ ]。
顯然在1.1中提及對圖像圈定點的處理是通過1)、2)過程完成,對圈內(nèi)圖像坐標點的處理是通過3)過程完成,顯示圖像數(shù)據(jù)的移動通過4)、5)、6)過程完成。
利用STC12C5410單片機控制一個a×b×8點陣LED模塊的書寫顯示屏系統(tǒng),借助少許按鍵,實現(xiàn)圈定圖像拖移功能。該方法已經(jīng)應用于實際工程項目中。
在應用中還遇到:圈定的圖形不是封閉的,我們一般采用根據(jù)上下數(shù)據(jù)找出數(shù)據(jù)規(guī)律,上下坐標值對稱求平均值[4],人為設定閉合點;圈定的圖形是多拐點,對于單片機來說處理不能完全象C++語言那樣方便,比較復雜,我們也采用了光滑不等距插值算法[5],對于LED顯示屏這種分辨率不高的顯示,效果也可以。
[1]Robert Sedgewick. 周良中譯, C算法[M], 人民郵電出版社, 2004.
[2]譚浩強, C語言程序設計[M], 清華大學出版社, 2008.
[3]劉文濤, 單片機語言C51典型應用設計[M], 人民郵電出版社, 2005.
[4]尹彥芝, C語言常用算法與子程序[M], 清華大學出版社,1991.
[5]徐士良, C常用算法程序集[M], 清華大學出版社, 1994.