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