<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 消費電子 > 設計應用 > 圖形LCD模塊ACM19264ASB的漢字顯示

圖形LCD模塊ACM19264ASB的漢字顯示

——
作者:孫志勇,張劍云,劉春生 時(shí)間:2007-01-26 來(lái)源:《電子元器件應用》 收藏

1引言

在基于單片機的智能系統中,漢字顯示是很重要的一個(gè)組成部分,它應用廣泛、操作容易、調試簡(jiǎn)便。

然而,在單片機上顯示漢字也存在幾個(gè)問(wèn)題。首先,單片機資源有限,我們不能為了顯示漢字占用太多的資源;其次,漢字存儲讀取比較繁瑣,使用不方便;第三,漢字是通過(guò)點(diǎn)陣顯示出來(lái)的,往往與lcd寫(xiě)入方式不一樣,這就得進(jìn)行轉換和調整。

值得注意的是,基于單片機的漢字顯示不能在字符lcd上實(shí)現。使用圖形lcd有很多優(yōu)點(diǎn),不僅能顯示漢字,而且可以實(shí)現漢字動(dòng)態(tài)移動(dòng)和上下滾屏,實(shí)現漢字與圖形的混合顯示,同時(shí)功耗低。

2基于單片機的漢字顯示原理

2.1漢字字模

漢字一般是以點(diǎn)陣式存儲的,如16×16,24×24點(diǎn)陣(即漢字的字模),每個(gè)漢字由32字節(16點(diǎn)陣)或72字節(24點(diǎn)陣)描述。根據漢字的不同字體,也可分為宋體字模、楷體字模、黑體字模等等。

漢字的字模其實(shí)是漢字字形的圖形化。對于16點(diǎn)陣字模,就是把漢字寫(xiě)在一個(gè)16×16的網(wǎng)格內,漢字的筆畫(huà)能過(guò)某網(wǎng)格時(shí)該網(wǎng)格就對應1,否則該網(wǎng)格對應0,這樣每一網(wǎng)格均對應1或0,把對應1的網(wǎng)格連起來(lái)看,就是這個(gè)漢字。漢字就是這樣通過(guò)字節表示點(diǎn)陣存儲在字庫中的。

為了方便查找所需漢字的點(diǎn)陣,每個(gè)漢字都與一個(gè)雙字節的內碼一一對應。通過(guò)漢字的內碼可以計算出它的點(diǎn)陣起始字節?,F以16點(diǎn)陣為例說(shuō)明。

先由內碼計算出它在漢字庫中的區位碼,計算公式為:

區碼=內碼第一字節-160

位碼=內碼第二字節-160

再由區位碼可以得到它在漢字庫中字模第一個(gè)字節的位置:
(區碼×94+位碼)×32 于是,可以向后連續讀出由32個(gè)字節組成的該字的點(diǎn)陣數據。

2.2漢字顯示

漢字占用資源太多(如16點(diǎn)陣,每個(gè)漢字就需32字節),因而通常把漢字庫放在eeprom里,需要顯示某個(gè)漢字時(shí),先算出它的區位碼,再求出點(diǎn)陣起始位置,從eeprom中順序調出該字的點(diǎn)陣數據,存在緩沖區里,最后依次送往lcd顯示,描出該字。需要說(shuō)明的是漢字存儲方式與lcd顯示方式有一定差別。

本文使用另一種顯示方法,即事先將程序用到的漢字、符號和數碼(為了節省顯示空間,可以將數碼壓成8×16點(diǎn)陣),編成一個(gè)文本文件,用一段小程序做出相應小的漢字庫,這個(gè)小字庫的漢字點(diǎn)陣數據取自于一般漢字庫。再經(jīng)過(guò)轉換和調整,得到新的漢字庫,最后把新字庫固化在eeprom中。單片機只需按序號讀出點(diǎn)陣字節,送往lcd即可顯示所需漢字。減輕了單片機的負擔,去除了繁瑣的查找內碼、求起始位置、轉換、調整等工作,提高了系統可靠性。

本文引用地址:http://dyxdggzs.com/article/21123.htm 表116點(diǎn)陣漢字字庫存儲方式

3自定義小字庫的制作

典型的漢字庫可選用ucdos下的字庫,如16點(diǎn)陣字庫hzk16。需要256k空間,用了較大的eeprom,又不方便讀取,而實(shí)際應用中需要的漢字又非常少,因而我們可以自己制作小的漢字庫,在這個(gè)小字庫里只包含系統需要的漢字。這樣,一方面節省讀取時(shí)間,另一方面大大地節省了資源。

限于篇幅,這里僅僅給出流程圖(假定事先將所需漢字寫(xiě)到了一個(gè)文本文件),如圖1所示。

4圖形點(diǎn)陣液晶顯示acm19264asb的結構與原理

4.1技術(shù)參數和性能

1)電源:+5v;
2)顯示內容:192(列)×64(行)點(diǎn)陣,可顯示圖形,也可顯示12×4(16點(diǎn)陣)漢字;
3)全屏幕點(diǎn)陣;
4)7種指令;
5)與cpu接口采用8位數據總線(xiàn)并行輸入輸出和8條控制線(xiàn)。

4.2主要外部接口
1)vss:地;
2)d/i:高時(shí)表示db7~db0為顯示數據,低時(shí)表示為顯示指令數據;
3)r/w:讀寫(xiě)控制;
4)e:使能信號;
5)db7~db0:數據線(xiàn);
6)cs3~cs1:3組列驅動(dòng)選擇器;
7)reset:復位控制;
8)vee:負電壓驅動(dòng)。

4.3指令說(shuō)明,指令字為【r/w,d/i,db7,db6,db5,db4,db3,db2,db1,db0】

1)顯示開(kāi)關(guān)控制【0,0,0,0,1,1,1,1,1,d】,d=1表示開(kāi)顯示,可進(jìn)行各種顯示操作;

2)設置顯示起始行【0,0,1,1,a5,a4,a3,a2,a1,a0】,起始行地址可以是0~63的任意一行;

3)設置頁(yè)地址(即x地址)【0,0,1,0,1,1,1,a2,a1,a0】,8行為一頁(yè),模塊共64行即8頁(yè),0~7可選;

4)設置y地址【0,0,0,1,a5,a4,a3,a2,a1,a0】,y可從0~63選,對應cs3~cs1,各包含64列,y可選擇其中一列作讀寫(xiě)操作起始列,每操作一次y自動(dòng)加1;

5)讀狀態(tài)【1,0,bf,0,on/off,rst,0,0,0,0】,其中bf為忙標志,bf=1表示內部正進(jìn)行操作,不接受外部指令,on/off為顯示控制觸發(fā)器狀態(tài),on/off=1為開(kāi)顯示,數據就顯示在屏幕上,rst=1表示內部正進(jìn)行初始化,不接受任何指令和數據;

6)寫(xiě)顯示數據【0,1,d7,d6,d5,d4,d3,d2,d1,d0】,寫(xiě)入顯示數據存儲單元進(jìn)行顯示,y地址指針自動(dòng)加1;

7)讀顯示數據【1,1,d7,d6,d5,d4,d3,d2,d1,d0】,讀出數據,y自動(dòng)加1。

4.4模塊主要硬件構成說(shuō)明

圖形顯示lcd模塊acm19264asb的內部結構

如圖2所示。ic4為行驅動(dòng)器,ic3~ic1為列驅動(dòng)器,各驅動(dòng)器含有如下功能器件:指令寄存器(ir),數據寄存器(dr),忙標志(bf),顯示控制觸發(fā)器(dff),xy地址計數器,顯示數據ram(ddram),z地址計數器(即行掃描計數器,掃完一行自動(dòng)加1,0~63循環(huán),故可實(shí)現滾屏顯示)。

4.5顯示數據存儲單元地址表

表2示出顯示數據存儲單元地址。

表2圖形顯示lcd模塊acm19264asb的ddram地址表

5漢字庫到lcd的調整與轉換

從表1和表2可以看出,漢字庫點(diǎn)陣需要經(jīng)過(guò)調整和轉換才能顯示在lcd上。具體地講,需要先從行點(diǎn)陣轉換到列點(diǎn)陣,再翻轉180°。相應程序如下:

先將#include加到頭文件中,然后設置數組:

unsignedintfarhzlib[16*1000];轉換前的漢字庫點(diǎn)陣數組,雙字節寫(xiě)入unsignedintfarhzxlib[8*2000];轉換后的漢字庫點(diǎn)陣數組,單字節寫(xiě)入 這里,轉換前的漢字庫數組每次按雙字節寫(xiě)入16位點(diǎn)陣數據,快捷方便,轉換后的漢字庫數組按單字節寫(xiě)入。 最后把轉換子程序函數加到主程序后面即可。轉換子程序如下:voidhz_tzh(){

inti,j,k,getbit;for(k=0;k{for(i=0;i<16;i++);先轉換低16字節{for(j=7;j>=0;j--){getbit=(hzlib[16*k+j]>>(15-i))-(hzlib[16*k+j]>>(16-i))*2;取每個(gè)字節的相同位,實(shí)現行到列的轉換hzxlib[i+32*k]+=getbit<時(shí),高低位順序倒轉180°}}for(i=16;i<32;i++);再轉換高16字節{for(j=15;j>=8;j--){getbit=(hzlib[16*k+j]>>(31-i))-(hzlib[16*k+j]>>(32-i))*2hzxlib[i+32*k]+=getbit<<(j-8)}}}}

6漢字顯示應用舉例

圖3示出漢字顯示的典型應用框圖。

cpld用來(lái)擴展i/o口,單片機通過(guò)cpld讀取漢字庫eeprom點(diǎn)陣數組,緩存到sram中,然后依次寫(xiě)入lcd顯示出來(lái),鍵盤(pán)用來(lái)輸入指令與改變數據。

使用過(guò)程中應注意幾個(gè)問(wèn)題:

1)lcd分3個(gè)區cs1~cs3分別選中寫(xiě)入,確定顯示位置后,先選中對應區cs再寫(xiě)入;
2)該型號lcd每行只能顯示24個(gè)漢字,到邊界時(shí)注意加一個(gè)判斷程序,防止顯示位置出錯;
3 )程序中可能用到數碼,為了節省顯示空間,可以事先將數碼壓成8×16點(diǎn)陣,添加到eeprom漢字庫后面。 本系統在信號源產(chǎn)生系統中,已成功使用,速度快,程序簡(jiǎn)捷,沒(méi)有出現誤碼等問(wèn)題。



關(guān)鍵詞: 模塊

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>