李志強(qiáng) 郭麒 肖尊興 陳海明
(衡陽師范學(xué)院,湖南 衡陽 421008)
LED點(diǎn)陣顯示屏是由一系列發(fā)光二極管排列組合而成的點(diǎn)陣,根據(jù)字形控制點(diǎn)陣屏局部發(fā)光完成字母、數(shù)字和漢字顯示。LED屏的顯示多采用計(jì)算機(jī)控制,目前生產(chǎn)廠家提供的LED屏控制系統(tǒng)都是通過控制LED屏來顯示各種數(shù)據(jù)的。由于數(shù)據(jù)種類的多樣混雜,數(shù)據(jù)不能以一種穩(wěn)定格式進(jìn)行保存。本文所介紹的顯示方法用到的系統(tǒng)雖也是控制LED屏顯示的軟件,但它是采用表格數(shù)據(jù)庫保存數(shù)據(jù),將表格數(shù)據(jù)庫和LED屏顯示直接連接起來,讓LED屏顯示表格數(shù)據(jù)庫中的內(nèi)容,從而解決LED屏不能統(tǒng)一管理數(shù)據(jù)顯示的問題,也使得各種文字信息的公布變得更加方便。
顯示中,我們需用到現(xiàn)行計(jì)算機(jī)通用的字庫字模,一個字的點(diǎn)陣分為 16×16、24×24、32×32和48×48等不同規(guī)格。一個LED顯示屏成品主要由控制卡和單元板兩部分組成。組裝LED屏?xí)r,必須先確定接口的一致性,才方便組裝。如果接口不一致,需自行制作轉(zhuǎn)換線。
在系統(tǒng)中信號先由PC機(jī)發(fā)送給控制卡,通過控制卡識別信號,再根據(jù)識別情況返回一個信號給PC機(jī),如果控制卡識別成功,將把顯示信號發(fā)給LED屏,讓其顯示相應(yīng)信息。PC機(jī)上的控制軟件對顯示信號進(jìn)行操作,先將PC機(jī)上的字符機(jī)器碼編譯成LED屏顯示碼,通過串口發(fā)送給控制卡,再根據(jù)控制卡返回的信號在PC機(jī)上判斷LED屏是否顯示成功,然后控制卡會自動將正確的顯示碼發(fā)送給LED屏。
在許多單片機(jī)與嵌入式應(yīng)用系統(tǒng)中,經(jīng)常要用到文字顯示,如何提取字符點(diǎn)陣顯示信息,本文接下來就這一問題介紹一種簡易、快速的提取方法。PC機(jī)中的數(shù)據(jù)通過串口通信發(fā)送,在程序中一般以16進(jìn)制表示2進(jìn)制數(shù),常見的編碼有ASCII碼、Binary碼、Unicode碼等。在要介紹的提取方法中,LED屏顯示數(shù)據(jù)的編碼是相對獨(dú)立的,它的編碼由廠家設(shè)定,顯示數(shù)據(jù)中,數(shù)字和字母的編碼由ASCII碼轉(zhuǎn)換而來,漢字編碼由Unicode碼轉(zhuǎn)換而來。
字母和數(shù)字的顯示編碼是將它們的ASCII碼減去0x0a作為高8位,將0x63作為低8位;若是多個字母或數(shù)字,則將它們的ASCII碼減去0x0a并從高到低依次存放,再將0x63存放在低8位即可。
以字母“A”為例說明:
字母“A”的 ASCII碼為 0x41,0x41-0x0a=0x37,將0x37作為高8位,0x63作為低8位,得到字母“A”的LED屏顯示編碼為0x3763。
①漢字內(nèi)碼轉(zhuǎn)換成Unicode碼
漢字在PC機(jī)中存儲的漢字標(biāo)準(zhǔn)交換碼是一種計(jì)算機(jī)內(nèi)部碼,是微機(jī)內(nèi)部使用的代碼、系統(tǒng)處理的對象。在計(jì)算機(jī)內(nèi)英文字符是用一個字節(jié)的ASCII碼表示,由于漢字眾多,對一個漢字需用兩個字節(jié)表示,且為了與系統(tǒng)中ASCII碼相區(qū)別,將這兩個字節(jié)的最高位置1,作為機(jī)器內(nèi)的漢字代碼即機(jī)內(nèi)碼,簡稱內(nèi)碼。要將漢字內(nèi)碼轉(zhuǎn)換成LED屏顯示碼就必須先將其轉(zhuǎn)換成Unicode碼,在VC++中有一個函數(shù)能完成此轉(zhuǎn)換功能,該函數(shù)為:
intMultiByteToWideChar(UINT Code-Page,
該函數(shù)最后返回一個整數(shù),若函數(shù)調(diào)用成功且轉(zhuǎn)換的字符不為空,則返回寬型字符的數(shù)值;若函數(shù)調(diào)用成功而轉(zhuǎn)換的字符為空,則返回一個能接收轉(zhuǎn)換字符緩沖大小的數(shù)值;若函數(shù)調(diào)用失敗,則返回0。該函數(shù)有六個參數(shù):第一個參數(shù)表示轉(zhuǎn)換要得到的編碼類型;第二個參數(shù)表示轉(zhuǎn)換類型的設(shè)置;第三個參數(shù)表示將要轉(zhuǎn)換的字符串;第四個參數(shù)表示將要轉(zhuǎn)換的字符串的字節(jié)數(shù);第五個參數(shù)表示轉(zhuǎn)換后字符存儲區(qū)的首地址;第六個參數(shù)表示存儲區(qū)的大小。
②Unicode碼轉(zhuǎn)換成顯示編碼
將漢字在PC機(jī)上存儲的漢字標(biāo)準(zhǔn)交換碼轉(zhuǎn)換成Unicode碼后,將Unicode碼的低8位加上0x70所得的除進(jìn)位以外的8位作為高8位,再將Unicode碼的高8位減去0x43后與上一步的進(jìn)位相加作為低8位;若是多個漢字,則通過同樣的方式轉(zhuǎn)換后,從高到低依次存放即可。
以漢字“我”為例說明:
漢字“我”在PC機(jī)上存儲的漢字標(biāo)準(zhǔn)交換碼為4650,利用MultiByteToWideChar函數(shù)轉(zhuǎn)換得到其Unicode碼為0x6211,其Unicode碼的低8位為0x11,0x11+0x70=0x81,所得除進(jìn)位以外的8位0x81作為高8位;Unicode碼的高8位為0x62,0x62-0x43=0x1F,上一步?jīng)]有進(jìn)位,0x1F直接作低8位,漢字“我”的LED屏顯示編碼就為0x811F。
發(fā)送給LED屏的數(shù)據(jù)除了字符的顯示編碼外還有它從高位起的48個字節(jié)和從低位起的4個字節(jié),這些數(shù)據(jù)共同組成LED顯示字符的數(shù)據(jù)包,其中高位字節(jié)的第19個字節(jié)表示進(jìn)入動畫,第20個字節(jié)表示環(huán)繞邊框,第21個字節(jié)表示進(jìn)入速度,第22個字節(jié)表示停留時間,第41個字節(jié)表示字體顏色,第45個字節(jié)表示字符個數(shù),其低位字節(jié)的第1、2個字節(jié)表示驗(yàn)證碼,這是前面高位所有數(shù)求和所得的兩個字節(jié),然后交換其本身的高低字節(jié)得到。
本文論述了如何在LED顯示屏上顯示字符信息的方法,并結(jié)合實(shí)例進(jìn)行了說明。從而很好地解決了在LED顯示屏上顯示表格信息這一難題。此方法通過直接將計(jì)算機(jī)中的數(shù)據(jù)庫和LED顯示屏連接,實(shí)現(xiàn)了用計(jì)算機(jī)控制LED屏的功能,加上計(jì)算機(jī)中數(shù)據(jù)庫技術(shù)已十分成熟,因此可以方便地對數(shù)據(jù)進(jìn)行存儲、修改、刪除,所以本文提出的LED點(diǎn)陣顯示屏字符信息顯示的方法解決了其他LED顯示系統(tǒng)不便于設(shè)計(jì)表格和保存數(shù)據(jù)的問題。
所述方法在LED點(diǎn)陣顯示屏、學(xué)風(fēng)信息顯示系統(tǒng)等方面的應(yīng)用,充分顯示了此顯示方法具有靈活性好、功能強(qiáng)、簡單易操作等優(yōu)點(diǎn),有很好的發(fā)展前景。
[1]李衛(wèi)東.微機(jī)控制LED點(diǎn)陣顯示屏[J].大連理工大學(xué),2000,(1):23-24.
[2]黃永順.從國標(biāo)字庫中提取漢字點(diǎn)陣信息的方法及應(yīng)用 [J]漳州師范師院學(xué)報,2004,(17):48-50.
[3]趙堂春,李勇,陶砂.基于 32×16LED 顯示屏混合字符顯示的設(shè)計(jì)與實(shí)現(xiàn)[J].制造業(yè)自動化,2010,(5):45-50.
[4]余金棟,寫式LED點(diǎn)陣顯示屏的設(shè)計(jì)[J].電子技術(shù),2010,(5):50-55.
[5]哲源.掌握VisualC++MFC程序設(shè)計(jì)與剖析[M].北京:清華大學(xué)出版社,2001,120-123.
[6]李剛.MSCEComm控件在串口編程中的應(yīng)用 [J].重慶電力高等??茖W(xué)校學(xué)報,2003,(4):11-62.
[7]闞能琪,汪鑫.MSComm控件在串口編程中的應(yīng)用[J].四川工業(yè)學(xué)院學(xué)報,(1):2003,56-77.