基于嵌入式系統的LCD漢字顯示
引言
本文引用地址:http://dyxdggzs.com/article/169543.htm隨著(zhù)嵌入式技術(shù)的迅猛發(fā)展,人機交互界面也越來(lái)越顯示出它的重要性。實(shí)際的LCD應用中要顯示的漢字一般很有限,并不需要完整的漢字庫,再加上完整字庫在程序中要占用大量空間,因而非完整漢字庫的研究就有了其自身的現實(shí)必要性。本文以AT91SAM7S256處理器的LCD顯示模塊為例,介紹了非完整漢字庫的建立方法及其具體實(shí)現。
1 液晶顯示原理
液晶顯示器LCD (Liquid Crystal Display)主要用于文本、圖形及圖像信息的顯示。液晶顯示屏具有輕薄、體積小、耗電量低、無(wú)輻射、平面直角顯示以及影像穩定不閃爍等特點(diǎn)。液晶是一種介于固態(tài)和液態(tài)之間的有機化合物。當被加熱時(shí),它會(huì )呈現透明的液態(tài),而冷卻的時(shí)候會(huì )結晶成混亂的固態(tài)。用于液晶顯示器的是Nematic液晶,當向液晶通電時(shí),液晶體分子便排列得井然有序,可以使光線(xiàn)容易通過(guò);而不通電時(shí),液晶分子便排列混亂,阻止光線(xiàn)通過(guò)。
從整體來(lái)看,TN(扭曲向列型)單色液晶顯示器液晶分子的排列就像螺旋形的扭轉排列。光線(xiàn)從上向下照射時(shí),通常只有一個(gè)角度的光線(xiàn)能夠穿透下來(lái),通過(guò)上濾光片導入上部夾層的溝槽中,再通過(guò)液晶分子扭轉排列的通路從下濾光片穿出。一旦通過(guò)電極給這些液晶分子加電之后,液晶分子變成豎立的狀態(tài),這樣光線(xiàn)就無(wú)法通過(guò),結果在顯示屏上出現黑色。這樣會(huì )形成透光時(shí)(即不加電時(shí))為白、不透光時(shí)(加電時(shí))為黑,字符就可以顯示在屏幕上了。
2 漢字信息的編碼知識
2.1 漢字的編碼標準
漢字系統對每個(gè)漢字預先規定輸入計算機中的代碼,即漢字的外部碼。計算機為了識別漢字,要把漢字的外部碼轉換成內部碼進(jìn)行存儲和處理。輸出時(shí),還將漢字的內部碼轉換成漢字的字形碼。主要的漢字編碼有以下幾種:
1) 國標碼:計算機與其他系統或設備之間進(jìn)行漢字代碼信息交換的標準漢字代碼。它用兩個(gè)字節代碼來(lái)表示一個(gè)漢字。行、列各 94(0-93),用先行后列的兩個(gè) 7 位二進(jìn)制數表示。
2) 區位碼:每個(gè)漢字(圖形符號)用兩個(gè)字節表示,每個(gè)字節只用低 7 位,即最高位為 0 的二進(jìn)制碼。漢字編碼使用的高字節稱(chēng)為區碼,低字節稱(chēng)為位碼。區位碼共 94 個(gè)區,每個(gè)區有 94 個(gè)位,組成一個(gè) 94*94 的矩陣。
3) 機內碼:中文或西文信息在計算機系統中的代碼表示稱(chēng)為機內碼。是計算機對漢字進(jìn)行存儲、運算的實(shí)際代碼。一般用連續兩個(gè)字節表示漢字的內碼且每個(gè)字節最高位為 1。
2.2 區位碼、國標碼和機內碼之間的轉換關(guān)系
(區位碼的十六進(jìn)制表示)+A0A0H=機內碼。國標碼+8080H =(區位碼的十六進(jìn)制表示)+A0A0H。國標碼=(區位碼的十六進(jìn)制表示)+2020H。
3 完整漢字庫下的漢字顯示以及漢字英文混合顯示
3.1 完整漢字庫下的漢字顯示原理
漢字的輸出是將漢字的筆劃離散化,用點(diǎn)陣來(lái)表示。點(diǎn)陣的中每個(gè)點(diǎn)位只有兩種狀態(tài):有筆畫(huà)(1)、無(wú)筆畫(huà)(0)。描述漢字點(diǎn)陣信息的二進(jìn)制代碼集稱(chēng)為漢字的字模。所有漢字和符號的點(diǎn)陣信息就組成了漢字庫。
點(diǎn)陣字庫文件已經(jīng)給使用者提供好了,關(guān)鍵在于如何取得漢字的圖形,即漢字的點(diǎn)陣字模。首先看一下如何取得漢字的區位碼。計算機在處理漢字和 ASCII 字符時(shí) ,使每個(gè) ASCII字符占用一個(gè)字節,而一個(gè)漢字占用兩個(gè)字節,其值稱(chēng)為漢字的內碼。其中第一個(gè)字節的值為區號加上 32(20H),第二個(gè)字節的值為位號加上 32(20H)。為了與 ASCII 字符區別開(kāi),表示漢字的兩個(gè)字節的最高位都是 1,也就是兩個(gè)字節的值都又加上了 128(80H)。這樣,通過(guò)漢字的內碼,就可以計算出漢字的區位碼。具體算式如下:
qh=c1-32-128=c1-160, wh=c2-32-128=c2-160 或 qh=c1-0xa0, wh=c2-0xa0
其中 qh 、wh 為漢字的區號和位號,c1、c2 為漢字的第一字節和第二字節。
根據區號和位號可以得到漢字字模在文件中的位置:
location=(94*(qh-1)+(wh-1))*一個(gè)點(diǎn)陣字模的字節數。
字模的表示順序為:先從左到右,再從上到下,依此類(lèi)推,畫(huà)滿(mǎn) 16×16 個(gè)點(diǎn)。這樣,一個(gè) 16×16 點(diǎn)陣的漢字總共需要 16*16/8=32 個(gè)字節表示。因此,當顯示16×16 點(diǎn)陣的漢字時(shí),只要根據區碼和位碼計算出該漢字點(diǎn)陣在ROM 中存放的起始地址,然后從此地址連續地取出 32 個(gè)字節的漢字點(diǎn)陣,并寫(xiě)入 LCD 模塊對應的地址中,就可以顯示出該漢字。
3.2 漢字英文混合顯示
在應用中,常需要漢字和英文字符混合顯示,在軟件處理時(shí)需要判斷顯示的內容是漢字的編碼還是英文字符的編碼,如果是漢字編碼則根據其機內碼計算區位碼,并根據區位碼計算出該漢字在字模中的起始地址。顯示16×16 點(diǎn)陣漢字的混合顯示軟件流程圖如圖1所示:
圖1混合顯示軟件流程圖
按照以上的顯示原理可以編寫(xiě)出在完整漢字庫下的漢字英文混合顯示程序,具體程序代碼在很多資料中都有,這里就不再贅述。
4 非完整漢字庫的建立及漢字英文混合顯示
4.1 非完整漢字庫的建立
在很多的人機界面中,雖然顯示的漢字數量較多,但實(shí)際無(wú)重復的漢字數卻較少,而且不同的應用環(huán)境用到的漢字也有其自身的特殊性。如果是提供少量的互不重復的漢字,較好的做法如下:利用 DM Tool 字模轉化工具生成所需要的漢字模,然后利用 123.exe 軟件生成相應的機內碼。接下來(lái)就可將以上所得到的漢字的機內碼和其字模合在一起組成數組,如此反復就可以將所需要的所有漢字都形成數組,最后將這些漢字組成二維數組。如下所示:
const UINT16T DDSHZTable[][17] = {
{ //時(shí)
0xCAB1, //機內碼
0x0010, 0x0010, 0x7c10, 0x4410, 0x47fe, 0x4410, 0x7c10, 0x4510,
0x4490, 0x4490, 0x7c10, 0x0010, 0x0010, 0x0010, 0x0050, 0x0020//字模
},
……
}
在定義上面的二維數組時(shí)不規定數組的大小,這樣就可以方便地添加自己需要的漢字。要顯示特定漢字的時(shí)候,只需要從數組中查找內碼與要求漢字內碼相同的即可獲得字模。
4.2 軟硬件設計
下面結合AT91SAM7S256處理器介紹LCD 模塊的軟硬件設計過(guò)程。
4.2.1 硬件電路設計
LCD 模塊采用 PM04OX1,LED 背光。320*96 點(diǎn)陣,256 色顯示,亮度控制:6位。背光LED :6支(串聯(lián)),亮度控制 2位,背光電流 2.5mA~20mA。CN7,CN8: 連接LCD面板 PM042OX1; CN6: LCD背光電源;U6: Timing Controller,PVI-2003A; U8: VS_ASIC, MCU-LCD 接口轉換邏輯。以下介紹 MCU-VS_ASIC-Timing Controller 硬件接口。連接 LCD 面板的接口信號包括: LCDCLK, R[5:0],G[5:0],B[5:0], VSHS 和 VSVS。其中 VSHS, VSVS 來(lái)源于 MCU 的PIO; LCDCLK來(lái)源于 MCU-SPI的 NPCS3; R[5:0],G[5:0],B[5:0]是 U8 根據 MCU-SPI 的VSCK(SPI-SCK)、VSDO(SPI-MOSI)、LCDCLK (SPI-NPCS3)和 VSVS 產(chǎn)生。
LED 驅動(dòng) (LED0~LED15) 是 U8 根據 MCU-SPI 的 VSCK(SPI-SCK)、VSDO(SPI-MOSI)、LCDCLK(SPI-NPCS3) 和 VSVS 產(chǎn)生。 LCD掃描方向選擇:RP1、RP2 為 LCD 掃描方向選擇,它們只能焊接其中的 1 只。LCD驅動(dòng)原理框圖如圖2所示:
圖2 LCD驅動(dòng)原理框圖
4.2.2 軟件設計
通過(guò) SPI-DMA 完成一個(gè)整行的掃描過(guò)程。在該過(guò)程中,DMA(直接存儲器存?。?向 SPI(串行外設接口) 傳輸 400 個(gè) 8 位數據。一個(gè)完整周期需要有 104 行掃描。其中第 0 行掃描的前 3 個(gè)數據為 PMRAM 數據,其他數據無(wú)意義(可以是任何數)。第 1 行和第 103 行掃描的全部數據均無(wú)意義;第 2~102行為數據掃描,每一行數據中前 64 個(gè)和后 16 個(gè)數據無(wú)意義,中間 320 個(gè)數據為顯示數據。
LCD驅動(dòng)過(guò)程是由 SPI-DMA 操作配合 SPI-DMA 中斷服務(wù)程序完成的。應當指出的是,在MCU相應的設備按要求初始化后,由于沒(méi)有啟動(dòng)SPI-DMA,LCD驅動(dòng)過(guò)程不能自動(dòng)開(kāi)始。因此顯示初始化程序應當:
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
評論