小程序
全國(guó)熱線:
400-820-3783
公眾號(hào)

全國(guó)聯(lián)保

產(chǎn)品通過(guò)3C,CE,FCC等認(rèn)證

液晶顯示器漢字字模存儲(chǔ)方法
2018-09-17

加載中

液晶模塊顯示漢字方法

   1

   使用圖形液晶模塊以點(diǎn)陣形式來(lái)顯示漢字和圖形。每8個(gè)點(diǎn)組成1個(gè)字節(jié),每個(gè)點(diǎn)用一個(gè)2進(jìn)制位表示,存1的點(diǎn)顯示時(shí)在屏上顯示1個(gè)亮點(diǎn);存0的點(diǎn)則在屏上不顯示,蕞常用的16×16的漢字點(diǎn)陣由32個(gè)字節(jié)組成。以在我國(guó)應(yīng)用較為普及的液晶顯示驅(qū)動(dòng)控制器T6963C為例,在液晶屏上橫向8個(gè)點(diǎn)為1個(gè)字節(jié)數(shù)據(jù),則“國(guó)”字的16×16點(diǎn)陣字模如圖1所示,通過(guò)字模提取軟件按照先左后右,先上后下的方式對(duì)“國(guó)”字進(jìn)行字模提取,則可獲得圖1右邊的字模對(duì)應(yīng)的32個(gè)字節(jié)值。將這些字節(jié)按一定順序?qū)懭胍壕Э刂破鞯娘@示緩沖區(qū),就可在液晶屏上顯示16×16的“國(guó)”字。同理一個(gè)24×24的漢字則需72個(gè)字節(jié),存放方式如表1所示。其他規(guī)格的漢字存放方式以此類推。

 

 液晶控制器典型接口電路

   2

   通過(guò)單片機(jī)將已提取的漢字的字模輸入液晶控制器,即可按設(shè)定在液晶模塊顯示屏上顯示需要的漢字。圖2是典型的液晶模塊與單片機(jī)的接口電路。在圖中選用在我國(guó)應(yīng)用非常廣泛的8051單片機(jī)作為MCU,采用12864(128×64)液晶模塊,其內(nèi)置的液晶顯示驅(qū)動(dòng)控制器為日本東芝公司的T6963C。在電路中,地址線A12-A15和WR、RD信號(hào)通過(guò)GAL16V8譯碼出外擴(kuò)芯片的片選信號(hào),其中液晶的譯碼地址為0xE000,將地址線A0與液晶控制口的C/D相連。當(dāng)A0為低時(shí)液晶控制器接收數(shù)據(jù),A0為高時(shí)液晶控制器接收命令碼。因此液晶數(shù)據(jù)端口地址為0xE000,液晶命令端口為0xE001。采用KeilC51進(jìn)行程序設(shè)計(jì),在程序中可進(jìn)行如下定義:

 

    #define XBYTE ((unsigned charvolatile xdata *) 0)

    #define Lcd_Data XBYTE[0×E000] //液晶數(shù)據(jù)端口

    #define Lcd_Code XBYTE[0×E001] //液晶命令端口

   單片機(jī)的數(shù)據(jù)線通過(guò)74HC245雙向緩沖器與液晶控制器的數(shù)據(jù)口相連,用液晶控制器的片選信號(hào)/LCD_CS作為74HC245的使能信號(hào),單片機(jī)的寫信號(hào)/WR控制數(shù)據(jù)傳送方向。/WR為低時(shí),單片機(jī)數(shù)據(jù)寫入液晶控制器;/WR為高時(shí),CPU讀取液晶控制器的數(shù)據(jù)和狀態(tài)。

 漢字字模存儲(chǔ)及提取方法

   3

   在單片機(jī)系統(tǒng)中對(duì)字模的存儲(chǔ),根據(jù)單片機(jī)的程序存儲(chǔ)容量和其尋址空間情況,可采取以下3種方式。

 

   ①將提取的漢字字模數(shù)據(jù)作為常量數(shù)組存放在程序存儲(chǔ)區(qū)內(nèi)。這種方法較為常用,針對(duì)程序不大或單片機(jī)無(wú)外部擴(kuò)展數(shù)據(jù)存儲(chǔ)區(qū)功能的情況。

   如下面程序所示,將提取的要顯示漢字的字模數(shù)據(jù)定義成常量數(shù)組。如要顯示“合肥”兩字。

    const char Hz_Dot[]={    // 漢字16×16點(diǎn)陣

 0×01,0×01,0×02,0×04,0×08,0×10,0×2F,0×C0,//合 0

 0×00,0×1F,0×10,0×10,0×10,0×10,0×1F,0×10,

 0×00,0×00,0×80,0×40,0×20,0×10,0×EE,0×04,

 0×10,0×F8,0×10,0×10,0×10,0×10,0×F0,0×10,

 0×04,0×7F,0×45,0×45,0×45,0×7D,0×45,0×45,//肥 0×20

 0×45,0×7D,0×45,0×45,0×45,0×45,0×54,0×88,

 0×04,0×FE,0×24,0×24,0×24,0×24,0×24,0×FC,

 0×04,0×00,0×00,0×02,0×02,0×02,0×FE,0×00};

   再編制漢字顯示子函數(shù)Write_Hz,其中要調(diào)用另外2個(gè)子函數(shù)Lcd_Wait和Disp_address。Lcd_Wait為讀取液晶控制器是否忙函數(shù),而Disp_address為液晶控制器顯示緩沖區(qū)地址設(shè)置函數(shù),可根據(jù)液晶控制器資料編制。

    void Write_Hz(Uchar x,Uchary,Uint p) //寫漢字

   //x,y為漢字在液晶屏的顯示位置坐標(biāo),p為要顯示的漢字在//數(shù)組中的下標(biāo)。

    {
 Uchar i,low_ad,high_ad;

 Uint address,tp;

 

 address=(Uint)x*Wide+y;   //**

 tp=address;

 for(i=0;i<16;i++)       //寫左半部

 {

    low_ad=(Uchar)(tp &&0xff);

    high_ad=(Uchar)(tp >>8);

    Disp_address(low_ad,high_ad);

    Lcd_Wait( );

    Lcd_Data=Hz_Dot[p+i]; //***

    Lcd_Wait( );

    Lcd_Code=0×C4;

    tp=tp+Wide;


 }

 address++;

 tp=address;

 for(i=0;i<16;i++)         //寫右半部

 {

    low_ad=(Uchar)(tp &&0×ff);

    high_ad=(Uchar)(tp >>8);

    Disp_address(low_ad,high_ad);

    Lcd_Wait( );

    Lcd_Data=Hz_Dot[p+16+i];  //****

    Lcd_Wait( );

    Lcd_Code=0xC4;            //寫數(shù)據(jù)命令

       tp=tp+Wide;

     }

    }

   函數(shù)Write_Hz的參數(shù)x和y對(duì)應(yīng)液晶屏幕的顯示位置,其與液晶控制器顯示緩沖區(qū)中的地址通過(guò)行**可計(jì)算出,該行中Wide為事先定義的液晶屏每行字節(jié)數(shù),對(duì)于DG12864液晶而言,Wide為16。函數(shù)函數(shù)Write_Hz根據(jù)16×16點(diǎn)陣漢字在液晶控制器顯示緩沖區(qū)的存放形式,依次改變顯示地址,先將左半部1~16個(gè)字節(jié)寫入顯示緩沖區(qū),再寫入右半部17~32個(gè)字節(jié)。若要液晶顯示“合肥”兩字,只要在程序中帶顯示地址參數(shù)調(diào)用該函數(shù)即可。如:

   Write_Hz(0,4,0);     //合

   Write_Hz(0,10,0x20);    //肥

   ②將提取的漢字字模數(shù)據(jù)存放在EPROM或EEPROM內(nèi),作為擴(kuò)展的數(shù)據(jù)存儲(chǔ)器供單片機(jī)調(diào)用。采用哈佛結(jié)構(gòu)的單片機(jī),如8051單片機(jī)及其派生產(chǎn)品,程序存儲(chǔ)器(ROM)和數(shù)據(jù)存儲(chǔ)器(RAM)可分別尋址,51單片機(jī)ROM和RAM蕞大的尋址空間均為64K。通常來(lái)說(shuō),對(duì)于中型的嵌入式系統(tǒng),尤其是帶液晶的單片機(jī)系統(tǒng),64K的程序空間并不富裕,而將漢字字模作為常量數(shù)組會(huì)大大占用ROM的空間。而相對(duì)來(lái)說(shuō),數(shù)據(jù)存儲(chǔ)器只需幾K就夠用了,剩下很多空間可用于功能芯片的擴(kuò)展。將提取的漢字字模數(shù)據(jù)存放在EPROM或EEPROM內(nèi),并設(shè)定該芯片的片選地址,則只要知道某個(gè)漢字字模數(shù)據(jù)在該芯片的存儲(chǔ)位置,通過(guò)程序計(jì)算出偏移地址,即可實(shí)現(xiàn)顯示功能。例如:設(shè)存放漢字字模數(shù)據(jù)的EEPROM的片選地址為0x9000,則通過(guò)程序定義:

    #defineHz_Dot    0×9000

    #define VBYTE  (unsignedchar volatile xdata *)

   若要編制漢字顯示子函數(shù)Write_Hz,只要將上面Write_Hz函數(shù)中:

    ***行換成Lcd_Data=*(VBYTE(Hz_Dot+p+i));

    ****行換成Lcd_Data=*(VBYTE(Hz_Dot+p+16+i))。

   ③將整個(gè)漢字字庫(kù)存放在EPROM或EEPROM內(nèi),程序根據(jù)要顯示漢字的機(jī)內(nèi)碼來(lái)調(diào)用漢字字模。某些高端單片機(jī),如MOTOROLA的M68300系列32位單片機(jī),尋址范圍可達(dá)8M。液晶顯示常用的16×16漢字庫(kù)二進(jìn)制數(shù)據(jù)文件為200K,將漢字字庫(kù)存入大容量的EEPROM,通過(guò)地址線可尋址到漢字庫(kù)中的每一個(gè)漢字。在計(jì)算機(jī)中對(duì)漢字的識(shí)別是通過(guò)機(jī)內(nèi)碼來(lái)實(shí)現(xiàn)的,漢字標(biāo)準(zhǔn)機(jī)內(nèi)碼為2字節(jié)代碼。漢字在漢字庫(kù)中是按照區(qū)位來(lái)排列的,每一區(qū)中有94個(gè)漢字,每個(gè)漢字都對(duì)應(yīng)**的區(qū)號(hào)和在本區(qū)的位號(hào),漢字輸入法中就有區(qū)位碼方法。實(shí)際上,漢字機(jī)內(nèi)碼和區(qū)位碼有標(biāo)準(zhǔn)的對(duì)應(yīng)關(guān)系,某個(gè)漢字在字庫(kù)中的區(qū)號(hào)加上0×a0等于其機(jī)內(nèi)碼的高字節(jié),位號(hào)加上0×a0等于其機(jī)內(nèi)碼的低字節(jié)。因此很容易通過(guò)程序計(jì)算出要顯示的漢字在漢字庫(kù)中的區(qū)位號(hào),即得到了其在漢字庫(kù)中的偏移地址。由于EEPROM中存儲(chǔ)了整個(gè)漢字庫(kù),只須在硬件上設(shè)定存放漢字庫(kù)的存儲(chǔ)器片選地址,直接將漢字作為字符數(shù)組附給漢字顯示函數(shù),通過(guò)機(jī)內(nèi)碼計(jì)算出區(qū)號(hào)和位號(hào),即可方便的對(duì)漢字字模進(jìn)行調(diào)用了。與前2種方法相比,無(wú)須事先提取字模和設(shè)定其地址用于程序調(diào)用,因此在進(jìn)行程序升級(jí),涉及到漢字顯示時(shí),不用更改漢字字模數(shù)據(jù)。

 結(jié) 語(yǔ)

   4

   本文介紹了圖形液晶的漢字顯示方法,并以8051單片機(jī)為基礎(chǔ),結(jié)合液晶模塊與單片機(jī)的典型接口電路,介紹了3種存放漢字字模的方法,并給出C51程序例子,具有很強(qiáng)的使用指導(dǎo)性。

暫無(wú)評(píng)論!
我要評(píng)論 只有購(gòu)買過(guò)該商品的用戶才能評(píng)論。
微信公眾號(hào)
友情鏈接LINKS:

王經(jīng)理:13391240541       客戶熱線:400-820-3783       固定電話:021-34602052

網(wǎng)   址:allaboutsequim.com  

郵   箱:879947132@qq.com

地址:上海市松江區(qū)洞舟路559號(hào)10棟2層

上海液晶拼接屏廠家敬科電子主營(yíng):

等,

微信小程序

歡迎前來(lái)咨詢:400-820-3783

  • 電話咨詢
  • 13391240541
  • 400-820-3783
  • 021-34602052