《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 模擬設(shè)計(jì) > 設(shè)計(jì)應(yīng)用 > 基于AVR單片機(jī)的VRAM型彩色液晶顯示模塊設(shè)計(jì)[圖]
基于AVR單片機(jī)的VRAM型彩色液晶顯示模塊設(shè)計(jì)[圖]
摘要: 介紹一種基于AVR單片機(jī)和硬件漢字庫(kù)的VRAM型彩色液晶顯示模塊的設(shè)計(jì)。給出彩色液晶顯示器的顯示原理、硬件接口設(shè)計(jì)框圖以及硬件漢字庫(kù)的制作和應(yīng)用,同時(shí)給出基于C語(yǔ)言的程序設(shè)計(jì)模塊,實(shí)現(xiàn)了應(yīng)用VRAM型液晶的模塊化,便于移植在其他類型的單片機(jī)。
Abstract:
Key words :
1 引言

隨著電子技術(shù)的飛速發(fā)展,越來(lái)越多的領(lǐng)域應(yīng)用到以單片機(jī)為控制核心、用液晶作為顯示終端的數(shù)字化設(shè)備。彩色液晶顯示器作為當(dāng)代高新技術(shù)的結(jié)晶產(chǎn)品,不但具有超薄平面、顯示信息豐富、色彩逼真的特點(diǎn),而且還具有體積小、耗電省、壽命長(zhǎng)、無(wú)輻射、抗震、防爆等其他類型顯示器無(wú)可比擬的優(yōu)點(diǎn),因而是工控儀表、機(jī)電設(shè)備等行業(yè)更新?lián)Q代的理想顯示器件。因此基于單片機(jī)系統(tǒng)的彩色液晶顯示模塊的使用也越來(lái)越廣泛。本文介紹一種基于AVR單片機(jī)硬件漢字庫(kù)的彩色液晶顯示模塊,該模塊實(shí)現(xiàn)了在彩色液晶顯示器上顯示不同顏色的中文、英文、數(shù)字及簡(jiǎn)單的畫(huà)圖功能。

2 液晶顯示器顯示原理

本模塊采用的液晶顯示器是河南友利華高科技有限公司生產(chǎn)的YD2502彩色液晶VRAM型顯示器。它的點(diǎn)陣數(shù)是320×240,VRAM容量是64k×8 位,由于屏幕上的任何一點(diǎn)都是由R(紅) 、G(綠) 、B(藍(lán))3種顏色組成,且灰度不可調(diào)節(jié),因此顯示顏色為8色?;驹砜驁D如圖1所示。DC/DC轉(zhuǎn)換器產(chǎn)生液晶所用各種驅(qū)動(dòng)電壓,DC/AC逆變器則用來(lái)點(diǎn)亮冷陰極背光燈,顯示驅(qū)動(dòng)邏輯電路采用了優(yōu)化邏輯電路,利用分時(shí)技術(shù)讓顯示與寫入數(shù)據(jù)同時(shí)進(jìn)行,實(shí)現(xiàn)了畫(huà)面的高速更新,且互不干擾。其顯示原理是:在顯示器內(nèi)部含有一個(gè)顯示緩沖區(qū)與屏幕顯示一一對(duì)應(yīng),使用時(shí)只需向緩沖區(qū)里寫入相應(yīng)的數(shù)據(jù),屏幕上即可顯示出對(duì)應(yīng)的彩色圖形或文字,也就是說(shuō)該顯示器可作為單片機(jī)系統(tǒng)的一個(gè)外部存儲(chǔ)器就可以實(shí)現(xiàn)彩色信息的顯示。

基于AVR單片機(jī)的VRAM型彩色液晶顯示模塊設(shè)計(jì)
圖1 YD2502原理框圖

3 硬件系統(tǒng)設(shè)計(jì)

3.1 硬件總體設(shè)計(jì)

本模塊中使用的單片機(jī)是AVR系列單片機(jī)中功能最強(qiáng)的ATmega128 。該單片機(jī)具有豐富的片上資源如具有128kB在線可重復(fù)編程Flash、4kB的E2 PROM、4kB的內(nèi)部SRAM、48個(gè)I/O端口、34個(gè)不同的中斷源、可尋址64kB的地址空間、ISP下載以及JTAG仿真等功能。詳細(xì)介紹請(qǐng)參考其數(shù)據(jù)手冊(cè)。

圖2是該模塊硬件系統(tǒng)總體設(shè)計(jì)框圖。由于YD2502的顯示緩沖區(qū)里的內(nèi)容是不能讀出的,為了保存寫入內(nèi)容,在該模塊中還外擴(kuò)了一片存儲(chǔ)器芯片61LV5128,其存儲(chǔ)容量為512kB,除了保存YD2502顯示緩沖區(qū)里的數(shù)據(jù)外,還為使用本模塊的嵌入式系統(tǒng)提供了擴(kuò)展應(yīng)用。由于ATmega128的尋址范圍只達(dá)到64KB,因此采用了分頁(yè)管理技術(shù)來(lái)操作512kB的存儲(chǔ)空間。在具體電路設(shè)計(jì)時(shí),將ATmega128的PB3~PB0連接到61LV5128的高4位地址線上,將512kB的存儲(chǔ)空間分成16頁(yè),每頁(yè)32kB。硬件漢字庫(kù)芯片AT29C040A的存儲(chǔ)容量也是512kB,與CPU的接口設(shè)計(jì)與61LV5128是類似的,只需將片選信號(hào)和高4位地址線接在不同的I/O口上就可以了。

基于AVR單片機(jī)的VRAM型彩色液晶顯示模塊設(shè)計(jì)
圖2 硬件設(shè)計(jì)圖

3.2 YD2502的接口設(shè)計(jì)

YD2502的接口方式采用總線方式,外部引線包括數(shù)據(jù)總線(DB7~DB0) 、片選信號(hào)(/CS) 、讀寫輸入(/RD、/WR)和寄存器選擇信號(hào)(RS),可以直接掛接到單片機(jī)的總線上,作為單片機(jī)的某部分內(nèi)存來(lái)使用。接口采用16針插座,引腳定義請(qǐng)參閱其說(shuō)明書(shū)。

根據(jù)YD2502可以作為單片機(jī)的外部存儲(chǔ)器使用的接口特性,將ATmega128的讀寫信號(hào)線與YD2502的讀寫信號(hào)線直接連接,具體接口設(shè)計(jì)原理如圖3所示。

基于AVR單片機(jī)的VRAM型彩色液晶顯示模塊設(shè)計(jì)
圖3 AT128與YD2502的接口

3.3 硬件漢字庫(kù)的制作

本模塊使用了硬件漢字庫(kù),省去了利用漢字取模軟件獲取點(diǎn)陣數(shù)據(jù)的麻煩,而且還避免了為保存這些數(shù)據(jù)而開(kāi)辟的大量程序存儲(chǔ)空間。

漢字庫(kù)中要燒寫的點(diǎn)陣文件是UCDOS軟件中的文件HZK16,該文件是16×16的國(guó)際漢字點(diǎn)陣文件,文件中按漢字區(qū)位碼從小到大依次存放國(guó)標(biāo)區(qū)位碼表中的所有漢字,每個(gè)漢字占用32字節(jié),每個(gè)區(qū)為94個(gè)漢字。漢字庫(kù)芯片采用的是AT29C040A,該芯片是ATMEL公司生產(chǎn)的512kB的Flash ROM。在制作時(shí),燒寫過(guò)程和普通的程序存儲(chǔ)器的編程基本相同,只要注意選擇正確的型號(hào)和在選擇打開(kāi)HZK16的方式時(shí)用二進(jìn)制方式就可以了,編程校驗(yàn)成功后,取下備用,硬件漢字庫(kù)芯片就制作好了。

實(shí)際上若顯示HZK16的文件屬性,其大小為262kB,而AT29C040A的存儲(chǔ)容量為512kB,超出部分可以存儲(chǔ)用戶固定的漢字、字母和數(shù)字的代碼,從而使顯示內(nèi)容更加靈活豐富。

4 軟件系統(tǒng)設(shè)計(jì)及實(shí)現(xiàn)

4.1 操作YD2502的程序設(shè)計(jì)

YD2502的指令碼格式如下:

基于AVR單片機(jī)的VRAM型彩色液晶顯示模塊設(shè)計(jì)

其中:CA1,CA0組合功能為內(nèi)部寄存器通道的選擇,功能如下:

基于AVR單片機(jī)的VRAM型彩色液晶顯示模塊設(shè)計(jì)

DISP:顯示控制位。

當(dāng)DISP設(shè)置為“1”時(shí),液晶顯示模塊為開(kāi)顯示狀態(tài)。

當(dāng)DISP設(shè)置為“0”時(shí),液晶顯示模塊為關(guān)顯示狀態(tài)。

X:表示未用位,可設(shè)為“0”。

ATmega128訪問(wèn)外部存儲(chǔ)器的軟件設(shè)計(jì)步驟是:先用extern聲明一個(gè)外部變量,再用map2ping_init函數(shù)(外部存儲(chǔ)地址分配函數(shù))分配給此變量一個(gè)外部存儲(chǔ)地址(因ATmega128內(nèi)部有4kB的SRAM所以外部存儲(chǔ)地址范圍為1000H~0FFFFH),那么對(duì)該變量的操作就實(shí)現(xiàn)了CPU對(duì)相應(yīng)地址的外部存儲(chǔ)空間的訪問(wèn)。

根據(jù)此步驟,對(duì)YD2502寫指令和寫數(shù)據(jù)的具體函數(shù)如下:

基于AVR單片機(jī)的VRAM型彩色液晶顯示模塊設(shè)計(jì)

寫指令函數(shù)如下:

基于AVR單片機(jī)的VRAM型彩色液晶顯示模塊設(shè)計(jì)

寫數(shù)據(jù)函數(shù)如下:

基于AVR單片機(jī)的VRAM型彩色液晶顯示模塊設(shè)計(jì)

除了上面兩個(gè)基本的函數(shù)外,對(duì)YD2502最基本的操作是往VRAM 里寫數(shù)據(jù),根據(jù)上面給出的指令碼,具體函數(shù)如下:

基于AVR單片機(jī)的VRAM型彩色液晶顯示模塊設(shè)計(jì)

4.2 畫(huà)點(diǎn)函數(shù)的實(shí)現(xiàn)

要在液晶上實(shí)現(xiàn)顯示字符和畫(huà)圖等功能,在屏幕上顯示一個(gè)點(diǎn)是實(shí)現(xiàn)這些功能的基礎(chǔ)。畫(huà)點(diǎn)函數(shù)實(shí)現(xiàn)的步驟是:首先確定該點(diǎn)對(duì)應(yīng)的VRAM中的內(nèi)存位置,找到該點(diǎn)具體對(duì)應(yīng)的數(shù)據(jù)位,填充顯示顏色的數(shù)據(jù),該點(diǎn)就按對(duì)應(yīng)的顏色顯示出來(lái)了。

4.2.1 顯示內(nèi)存與屏幕點(diǎn)陣的對(duì)應(yīng)關(guān)系

YD2502屏幕點(diǎn)陣為320×240,每一個(gè)點(diǎn)對(duì)應(yīng)3個(gè)像素(RGB),屏幕上8個(gè)點(diǎn)對(duì)應(yīng)內(nèi)存3個(gè)字節(jié),一行對(duì)應(yīng)320/8×3=120個(gè)字節(jié),其對(duì)應(yīng)關(guān)系如下:

基于AVR單片機(jī)的VRAM型彩色液晶顯示模塊設(shè)計(jì)

其中R,G,B表示紅、綠、藍(lán)三原色,D7~D0表示對(duì)應(yīng)的數(shù)據(jù)位。

對(duì)于屏幕上坐標(biāo)為(X,Y)的點(diǎn),其對(duì)應(yīng)內(nèi)存地址的計(jì)算方法為:

當(dāng)Y=0時(shí)  SRAM=0EFH×100H+[INT(X/8)]×3

當(dāng)Y>0時(shí)  SRAM=(Y-1)×100H+[INT(X/8)]×3

通過(guò)(X/8)的余數(shù)得出具體的內(nèi)存位置:

當(dāng)余數(shù)為0  則 RAM=SRAM  [1110,0000]

當(dāng)余數(shù)為1  則 RAM=SRAM  [0001,1100]

當(dāng)余數(shù)為2  則 RAM1=SRAM  [0000,0011]

RAM2 = SRAM + 1[1000 ,0000 ]

當(dāng)余數(shù)為3  則 RAM = SRAM + 1[0111 ,0000 ]

當(dāng)余數(shù)為4  則 RAM = SRAM + 1[0000 ,1110 ]

當(dāng)余數(shù)為5  則 RAM1 = SRAM + 1[0000 ,0001 ]

RAM2 = SRAM + 2[1100 ,0000 ]

當(dāng)余數(shù)為6  則 RAM = SRAM + 2[0011 ,1000 ]

當(dāng)余數(shù)為7  則 RAM = SRAM + 2[0000 ,0111 ]

其中[ ]內(nèi)為“1”的位表示應(yīng)該填充顏色的位置,SRAM表示該點(diǎn)對(duì)應(yīng)的基礎(chǔ)地址,RAM、RAM1和RAM2表示該點(diǎn)對(duì)應(yīng)的實(shí)際內(nèi)存地址。

當(dāng)數(shù)據(jù)位為“1”時(shí),對(duì)應(yīng)色點(diǎn)為亮;為“0”時(shí),對(duì)應(yīng)色點(diǎn)為暗。通過(guò)RGB三原色組合而得到的8種顏色代碼如下:

基于AVR單片機(jī)的VRAM型彩色液晶顯示模塊設(shè)計(jì)

例1:若X 、Y坐標(biāo)為(7,0)

SRAM = 0EFH ×100H + 0 = 0EF00H

余數(shù)為7 ,則 RAM = 0EF00H + 2 = 0EF02H

若此點(diǎn)為紅色,則送入0EF02H 內(nèi)存單元里的數(shù)據(jù)為[ 0EF02H] &11111000B + 00000100B

例2 :若X 、Y坐標(biāo)為(15,5)

SRAM = (5 - 1) ×100H + 1 ×3 = 403H

余數(shù)為5 ,則 RAM1 = 403H + 1 = 404H

RAM2 = 403H + 2 = 405H

若此點(diǎn)為白色,則送入這兩個(gè)單元的數(shù)據(jù)為

[ 404H] &11111110B + 00000001B

[ 405H] &00111111B + 11000000B

4.2.2 畫(huà)點(diǎn)函數(shù)的具體實(shí)現(xiàn)

從例1和例2可以看出,要只顯示一個(gè)色點(diǎn),就必須知道該點(diǎn)對(duì)應(yīng)的內(nèi)存中的數(shù)據(jù),而前面提到過(guò)內(nèi)存中的數(shù)據(jù)是不能讀出的,所以要將寫入內(nèi)存中的數(shù)據(jù)先保存起來(lái),即在向YD2502的顯示緩沖區(qū)里寫數(shù)據(jù)之前,應(yīng)先將此數(shù)據(jù)寫入61LV5128 。若在坐標(biāo)(X,Y)處畫(huà)顏色為color的點(diǎn),其具體函數(shù)如下:

基于AVR單片機(jī)的VRAM型彩色液晶顯示模塊設(shè)計(jì)

以上只給出了余數(shù)是0的情況,其他的情況可依此類推。計(jì)算內(nèi)存地址的LCD_pixeladdr函數(shù)可根據(jù)給出的內(nèi)存地址計(jì)算方法編寫,讀寫61LV5128的read_exram函數(shù)和write_exram函數(shù)可根據(jù)具體的硬件設(shè)計(jì)編寫,這里不再給出。

4.3 顯示漢字和其他功能的實(shí)現(xiàn)

在屏幕上顯示16×16點(diǎn)陣漢字的基本步驟是:首先取得該漢字的32個(gè)字節(jié)的點(diǎn)陣數(shù)據(jù),再確定屏幕上顯示的位置,利用畫(huà)點(diǎn)函數(shù)即可顯示該漢字。因本模塊使用了硬件漢字庫(kù)技術(shù),所以漢字的點(diǎn)陣數(shù)據(jù)是從漢字庫(kù)中獲取的。

在計(jì)算機(jī)漢字系統(tǒng)中,漢字是用機(jī)內(nèi)碼的形式存儲(chǔ)的,將漢字機(jī)內(nèi)碼減去0A0A0H就得到該漢字的區(qū)位碼,通過(guò)區(qū)位碼就可以找到該漢字點(diǎn)陣數(shù)據(jù)在漢字庫(kù)中的位置。例如:漢字“中”的機(jī)內(nèi)碼是十六進(jìn)制的“D6D0”,其中前兩位“D6”表示機(jī)內(nèi)碼的區(qū)碼,后兩位“D0”表示機(jī)內(nèi)碼的位碼。所以“中”的區(qū)位碼為0D6D0H - 0A0A0H =3630H,將區(qū)碼和位碼分別轉(zhuǎn)換為十進(jìn)制,得漢字“中”的區(qū)位碼為“5448”。即“中”的點(diǎn)陣位于第54區(qū)的第48個(gè)字的位置,在文件HZK16中的位置為第32×[(54 - 1)×94 + (48 - 1)] = 160928D以后的32個(gè)字節(jié)為“中”的點(diǎn)陣數(shù)據(jù),用SUPER2PRO25編程器讀入文件HZK16后利用其編輯功能中的緩沖區(qū)編輯查找到274A0H(160928D的十六進(jìn)制表示)開(kāi)始的32個(gè)字節(jié):01H,00H,01H,00H,01H,04H,7FH,F(xiàn)EH,41H,04H,41H,04H,41H,04H,41H,04H,7FH,F(xiàn)CH,41H,04H,01H,00H,01H,00H,01H,00H,01H,00H,01H,00H,01H,00H。這些數(shù)據(jù)與其點(diǎn)陣圖形的對(duì)應(yīng)關(guān)系如圖4所示,圖中黑色方格表示二進(jìn)制位“1”,即對(duì)應(yīng)該顯示的點(diǎn),白色方格表示二進(jìn)制位“0”,即不該顯示的點(diǎn)。因此要在液晶屏幕上顯示16×16點(diǎn)陣的漢字,首先應(yīng)找到該漢字在硬件漢字庫(kù)中的位置,取出其后的32個(gè)字節(jié)數(shù)據(jù)。取這32個(gè)字節(jié)數(shù)據(jù)的函數(shù)如下:

基于AVR單片機(jī)的VRAM型彩色液晶顯示模塊設(shè)計(jì)
圖4 漢字“中”的點(diǎn)陣圖形

基于AVR單片機(jī)的VRAM型彩色液晶顯示模塊設(shè)計(jì)

讀AT29C040A的read_exrom函數(shù)可根據(jù)硬件設(shè)計(jì)編寫,這里不再給出。

取得這32個(gè)字節(jié)數(shù)據(jù)后,下面的程序設(shè)計(jì)就比較容易了,這里只給出程序流程(如圖5所示),具體函數(shù)可根據(jù)此流程編寫。其中(X,Y)是該漢字顯示的起始點(diǎn),color是該漢字的顯示顏色,number是該漢字在chinese數(shù)組中的位置。顯示英文和數(shù)字的函數(shù)可根據(jù)顯示漢字的函數(shù)稍加改造后即可得到,這里不再詳細(xì)分析。

基于AVR單片機(jī)的VRAM型彩色液晶顯示模塊設(shè)計(jì)
圖5 顯示一個(gè)漢字程序流程圖

在本模塊中也實(shí)現(xiàn)了在屏幕上畫(huà)斜線、圓等功能,其具體實(shí)現(xiàn)過(guò)程就是在畫(huà)點(diǎn)函數(shù)的基礎(chǔ)上通過(guò)相應(yīng)的算法來(lái)編寫這些函數(shù)。畫(huà)線和畫(huà)圓算法比較多,在這里畫(huà)線算法采用的是整數(shù)數(shù)字微分分析法,畫(huà)圓算法采用的是貝森海姆算法。

鑒于篇幅所限,這里不再具體分析。由于YD2502是點(diǎn)陣式液晶顯示器,還可以通過(guò)移植嵌入式GUI(如μC/GUI)軟件,使其顯示多種曲線,各種窗口對(duì)象,如按鈕、編輯框、滑動(dòng)條等更加豐富靈活的圖形界面。

5 結(jié)語(yǔ)

以上程序均在ICCAVR編譯器里調(diào)試通過(guò),實(shí)現(xiàn)了在液晶屏幕上正常顯示各種顏色的漢字、英文、數(shù)字及簡(jiǎn)單的圖形功能。在筆者參與開(kāi)發(fā)的油田探測(cè)爆炸機(jī)設(shè)備中,采用了本液晶模塊,達(dá)到了顯示穩(wěn)定,顯示色彩豐富,人機(jī)界面友好的較理想的顯示效果。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。