張志廣,趙學作,于張紅,王 杰
(1河北科技師范學院數學與信息科技學院,河北秦皇島,066004;2河北省昌黎縣第三中學)
LED顯示屏作為一種全新的信息媒體,具有使用壽命長、可視角度大、功耗低、性能穩定等突出優點,在商場、企事業單位、體育場館等各個領域得到了廣泛的應用。目前的LED顯示屏顯示內容更新可以分為以下幾種控制方式[1]:(1)使用手提電腦到設備現場,通過串口連接電腦和控制卡,用控制軟件進行現場更新。缺點在于操作復雜、運作成本高。(2)通過運行LED控制軟件,連接帶有網口的LED屏控制卡,進行內容更新。目前市場上帶有網口的控制卡多數只能在局域網范圍內使用,無法進行遠程控制。如果給控制卡一個靜態IP,無疑會加大運行成本。(3)通過GPRS短信方式更新顯示內容,這種控制方式需要控制卡帶有SIM手機卡,控制卡價格較貴,運行成本高。筆者提出了一種利用站點、mini2440嵌入式設備,通過互聯網進行遠程字屏顯示內容更新的新方案,使用普通的帶有RS232串口的控制卡即可,具有內容更新操作簡單,運行成本低,遠程更新的優點。
該系統包括用于更新顯示內容的站點、mini2440開發板上的Windows CE程序、帶有串口的字屏控制卡、LED顯示屏。
通過登錄站點進行LED屏顯示內容發布,mini2440通過串口和控制板進行通信,利用嵌入式設備上的wince程序讀取網頁數據后通過串口向字屏控制卡發送握手幀和數據幀,字屏顯示內容得到更新。系統結構框圖如圖1所示。

圖1 遠程字屏控制系統結構
字屏內容更新站點采用ASP.NET術,c#語言,sql server 2005數據庫開發。主要進行LED屏內容的更新。管理員登錄該站點,可以針對不同的LED屏進行顯示內容的發布,設置內容播放時間,發布后通知內容、發布時間、有效播放時間、屏號等內容通過Response.write寫入特定頁面,字段間用豎線分割,以利于部署在mini2440開發板上的wince程序讀取解析。wince程序讀取后已讀字段自動改為TRUE,下次將不再進行讀取。站點還有刪除已發通知內容、日志記錄等功能,實例如下所示:
Id號通知內容屏號播放時間(分鐘)通知發布時間已讀標志發布人174|軟件研發中心歡迎您!|2|30|2011-6-14 13∶01∶28 True|李明。
在mini2440上用c#開發了字屏遠程控制客戶端軟件,mini2440[2]采用wince 6.0操作系統。客戶端軟件主要包括網頁內容讀取模塊、數據幀構成模塊、串口操作模塊、定時器模塊4個部分。
該模塊從指定頁面讀取網頁內容,該網頁內容如第2節所示,然后對其進行分割截取,存入相應變量以備構建數據幀使用。
首先使用WebRequest request=WebRequest.Create(PageUrl),創建一個對該網頁的請求對象request,然后通過WebResponse response=request.GetResponse(),創建一個來自PageUrl地址的響應對象,通過System.IO.Stream resStream=response.GetResponseStream(),創建一個字節流。用指定的字符編碼為該流創建一個StreamReader實例,接下來就可以用該StreamReader實例對網頁內容進行讀操作。對網頁內容進行分割后,根據對應屏號是否正確和該信息未被讀取標志返回TRUE或FALSE。
本系統是在上海仰邦電子科技有限公司的BX-TII控制卡的基礎上進行開發的,采用該廠家提供的用戶開發數據、通訊協議來構成數據幀。數據幀構成過程重點涉及數據長度、接收區域數據、校驗值等3個部分[3]。其他部分根據通信協議比較容易構成。
3.2.1 數據長度的計算 本次開發采用的是128*16的單色字屏,首先根據網頁內容讀取模塊讀取到的顯示內容計算需要顯示的屏數pingnum,然后根據通信協議計算得出公式datalength=23+pingnum*262;datalength為數據長度。數據長度為4個字節。通過開發的intToByte(int datalength)方法將int類型的數據長度轉換為4個字節的字節數組。然后將該字節數組中的4個字節按照高字節在前、低字節在后的順序放入數據幀字節數組中。
3.2.2 接收區域數據的構成 接收區域數據的構成重點在于將從特定網頁讀取到的顯示內容進行點陣字庫的轉換,然后將點陣字庫的字節放入數據幀。中文字符點陣字庫選用了HZK16字模文件,首先通過System.Text.Encoding.Default.GetBytes(string s)將漢字s轉換為2個字節的字節數組,通過處理該字節數組可得到該漢字的區碼和位碼,然后根據該區碼和位碼可計算出該漢字在字模文件中的偏移量,接下來對HZK16字模文件進行定位、讀操作,讀取游標定位后的32個字節即為該漢字的字模[4]。
英文、數字、標點符號的點陣字庫選用了ASC16字模文件,通過英文、數字或標點的ASCII值定位該字符在字模文件中的偏移量,然后從ASC16文件中偏移量處讀取16個字節,可以得到該字符的字模信息[5]。由于字屏顯示采用16*16的點陣顯示1個字符,1個字符需要32個字節的數據,所以需要對英文、標點符號的顯示進行處理。開發用的字屏使用低效,即一個LED燈對應的數據位為0點亮,1不亮,所以處理方法為添加16個字節的0xFF,既可以在16*16的點陣中顯示一個英文或標點。但是這樣顯示出的效果極不美觀,英文間的間隔太大。開發中又進一步進行了處理,如果是兩個連續的英文、數字、標點需要顯示,則將兩個從ASC16文件中讀到的16個字節的字模進行合并,得到1個32個字節的字模,這樣縮短了相鄰英文、數字間的顯示距離,使顯示效果得到改善。
3.2.3 校驗值的計算 校驗方法為計算要發送的數據的校驗和,取校驗和值的低4個字節,高字節在前、低字節在后。在接收區域部分構成之后,可以通過for循環計算校驗和。將計算出的校驗和取低4個字節轉換為字節數組,放入數據幀字節數組中。
開發采用的BX-TII控制卡使用RS232串口和上位機進行通信[6]。由于上位機為mini2440嵌入式設備,和字屏控制卡屬于同一種通信設備,所以串口線采用交叉線。
串口操作包括串口的初始化、串口的打開和串口的關閉等子模塊。在串口初始化操作中首先通過串口名稱、波特率、奇偶校驗位、數據位和停止位初始化System.IO.Ports.SerialPort的實例,然后定義串口接收到數據后調用的處理方法。通過SeriaPort.open()打開串口,通過SeriaPort.close()關閉串口[7]。
開發中定義了2個計時器[1]。1個為System.Windows.Forms類型的窗體計時器Timer1,該計時器每1分鐘讀取指定網頁數據,判斷是否有新內容需要顯示;另1個計時器采用System.Threading.Timer類型的線程計時器Timer2。當有新內容需要顯示時,根據管理員發布的播放時間開啟該計時器,到時向控制板發送由指定內容的字符串形成的數據幀,形成常規內容顯示。各個模塊協同工作的程序流程如圖2所示。

圖2 定時器各模塊協同工作的程序流程
系統為LED屏的遠程控制提供了一種全新的模式,通過網頁發布更新內容,避免了繁瑣的控制軟件的使用,方便了管理員對字屏顯示內容的更新。采用普通的帶有串口的控制卡,Mini2440開發板經過硬件裁剪后去掉觸摸屏和多余的接口,可以節省運行成本。該系統可以控制不同地點的LED屏,實現不同內容的顯示,尤其對于高處懸掛的LED屏幕顯示內容的更新更具有實用意義。本系統已經過實際運行測試,效果良好。
[1] 陳富軍,趙恒銳.基于GPRS遠程控制的多LED顯示屏設計[J].天中學刊,2009,24(2):40-41.
[2] MINI2440用戶手冊[M].廣東:廣州友善之臂科技有限公司,2009.
[3] 翁健紅.基于c#的ASP.NET程序設計[M].北京:機械工業出版社,2008.
[4] 劉楚湘,王丹琪,尤雙楓.帶串行口通信漢字點陣屏的研究與實現[J].新疆師范大學學報:自然科學版,2008,27(2):61-68.
[5] 陽進.基于單片機的LED顯示屏的漢字顯示[J].科技論壇,2005(12):112-113.
[6] 楊興.LED顯示屏系統原理及工程技術[M].北京:電子工業出版社,2004.
[7] 劉瑞新.C#網絡編程及應用[M].北京:機械工業出版社,2007.