新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 六 ARM9(S3C2440)的LCD顯示-理論知識

六 ARM9(S3C2440)的LCD顯示-理論知識

作者: 時間:2016-11-27 來源:網(wǎng)絡(luò) 收藏

本文引用地址:http://butianyuan.cn/article/201611/322171.htm

所有顯示器顯示圖像的原理都是從上到下,從左到右的。這是什么意思呢?這么說吧,一副圖像可以看做是一個矩形,由很多排列整齊的點(diǎn)一行一行組成,這些點(diǎn)稱之為像素。那么這幅圖在LCD上的顯示原理就是:

A:顯示指針從矩形左上角的第一行第一個點(diǎn)開始,一個點(diǎn)一個點(diǎn)的在LCD上顯示,在上面的時序圖上用時間線表示就為VCLK,我們稱之為像素時鐘信號;
B:當(dāng)顯示指針一直顯示到矩形的右邊就結(jié)束這一行,那么這一行的動作在上面的時序圖中就稱之為1 Line;
C:接下來顯示指針又回到矩形的左邊從第二行開始顯示,注意,顯示指針在從第一行的右邊回到第二行的左邊是需要一定的時間的,我們稱之為行切換;
D:如此類推,顯示指針就這樣一行一行的顯示至矩形的右下角才把一副圖顯示完成。因此,這一行一行的顯示在時間線上看,就是時序圖上的HSYNC;
E:然 而,LCD的顯示并不是對一副圖像快速的顯示一下,為了持續(xù)和穩(wěn)定的在LCD上顯示,就需要切換到另一幅圖上(另一幅圖可以和上一副圖一樣或者不一樣,目 的只是為了將圖像持續(xù)的顯示在LCD上)。那么這一副一副的圖像就稱之為幀,在時序圖上就表示為1 Frame,因此從時序圖上可以看出1 Line只是1 Frame中的一行;
F:同樣的,在幀與幀切換之間也是需要一定的時間的,我們稱之為幀切換,那么LCD整個顯示的過程在時間線上看,就可表示為時序圖上的VSYNC。

上面時序圖上各時鐘延時參數(shù)的含義如下:(這些參數(shù)的值,LCD產(chǎn)生廠商會提供相應(yīng)的數(shù)據(jù)手冊)

VBPD(vertical back porch):表示在一幀圖像開始時,垂直同步信號以后的無效的行數(shù),對應(yīng)驅(qū)動中的upper_margin;
VFBD(vertical front porch):表示在一幀圖像結(jié)束后,垂直同步信號以前的無效的行數(shù),對應(yīng)驅(qū)動中的lower_margin;
VSPW(vertical sync pulse width):表示垂直同步脈沖的寬度,用行數(shù)計算,對應(yīng)驅(qū)動中的vsync_len;
HBPD(horizontal back porch):表示從水平同步信號開始到一行的有效數(shù)據(jù)開始之間的VCLK的個數(shù),對應(yīng)驅(qū)動中的left_margin;
HFPD(horizontal front porth):表示一行的有效數(shù)據(jù)結(jié)束到下一個水平同步信號開始之間的VCLK的個數(shù),對應(yīng)驅(qū)動中的right_margin;
HSPW(horizontal sync pulse width):表示水平同步信號的寬度,用VCLK計算,對應(yīng)驅(qū)動中的hsync_len;

對于以上這些參數(shù)的值將分別保存到REGBANK寄存器組中的LCDCON1/2/3/4/5寄存器中:(對寄存器的操作請查看S3c2440數(shù)據(jù)手冊LCD部分)

LCDCON1:17- 8位CLKVAL
6- 5位掃描模式(對于STN屏:4位單/雙掃、8位單掃)
4- 1位色位模式(1BPP、8BPP、16BPP等)
LCDCON2:31 - 24位VBPD
23 - 14位LINEVAL
13 - 6位VFPD
5 - 0位VSPW
LCDCON3:25 - 19位HBPD
18 - 8位HOZVAL
7 - 0位HFPD
LCDCON4:7 - 0位HSPW
LCDCON5:

4.幀緩沖(FrameBuffer):

幀緩沖是Linux為顯示設(shè)備提供的一個接口,它把一些顯示設(shè)備描述成一個緩沖區(qū),允許應(yīng)用程序通過FrameBuffer定義好的接口訪問這些圖形設(shè)備,從而不用去關(guān)心具體的硬件細(xì)節(jié)。對于幀緩沖設(shè)備而言,只要在顯示緩沖區(qū)與顯示點(diǎn)對應(yīng)的區(qū)域?qū)懭腩伾?值,對應(yīng)的顏色就會自動的在屏幕上顯示。下面來看一下在不同色位模式下緩沖區(qū)與顯示點(diǎn)的對應(yīng)關(guān)系:




我相信看完這些以后大家會對這一塊有稍一些了解了,下面是我自己的理解:

LCD是在我們學(xué)習(xí)ARM9時覺得比較麻煩的一塊,因?yàn)閯偨佑|的時候一眼望去覺得內(nèi)容可是不少,不知道從哪里下手,呵呵,其實(shí)我們慢慢來分析就會逐漸明朗起來。

首先說一下我們平時所說的多少位的LCD,有24位的,有16位的指的是LCD數(shù)據(jù)的位數(shù),LCD的數(shù)據(jù)實(shí)際上是LCD要顯示的顏色,24位的是紅綠藍(lán)各占8位,16位則是紅綠藍(lán)按照565分配的,其實(shí)24的也可以只接16位,每個顏色地位接地就可以,所以要給LCD的緩沖區(qū)一個數(shù)據(jù)才能在LCD上顯示出來。那究竟是怎么顯示的呢,那就得先說一下像素了,LCD的像素實(shí)際上就LCD屏幕有多少個點(diǎn),LCD顯示的東西都是一個一個點(diǎn)拼湊出來的,比如我用的是320*240的LCD,就是說LCD每一行有320個點(diǎn),而每一列有240個點(diǎn),所以總共有320*240個點(diǎn),我們讓適當(dāng)?shù)狞c(diǎn)顯示適當(dāng)?shù)念伾瓦_(dá)到了我們的目的。

其實(shí)剛開始困擾我們的是LCD的初始化的問題,要設(shè)置的東西比較多,其實(shí)我們是記不住這些東西的,呵呵,作為入門我們可以參考別人的初始化程序,把里面的參數(shù)改成我們自己的LCD的參數(shù)就OK了。

那么我們到底是怎么把我們要顯示的數(shù)據(jù)送給LCD控制起的呢?是這樣的,我們可以定義一個二維數(shù)組,把我們要顯示的數(shù)據(jù)存到里面,然后把這個數(shù)組的地址賦給LCD的相應(yīng)的寄存器,這個寄存器是LCDSADDRn,具體的設(shè)置大家可以參考數(shù)據(jù)手冊,我們可以把二維數(shù)組的坐標(biāo)和LCD的坐標(biāo)對應(yīng)起來,那么我們就可以隨意的讓哪一個像素點(diǎn)顯示什么顏色就顯示什么顏色了。這就把數(shù)據(jù)送出的過程,也就是顯示一個像素點(diǎn)的過程。

到現(xiàn)在我們已經(jīng)知道如何顯示一個像素了,那接下來就是LCD顯示最基本的東西了----字符和圖片。漢字和圖片的顯示都是基于像素點(diǎn)的顯示的,我們把要顯示的字符和圖片轉(zhuǎn)化成相應(yīng)的數(shù)據(jù),然后傳遞給LCD即可。我們可以專門的寫一個顯示字符的函數(shù)和一個顯示圖片的函數(shù)。顯示字符的數(shù)據(jù)可以用取模軟件生成,因?yàn)樯傻淖址麛?shù)據(jù)是表示的每一個點(diǎn)要不要亮,亮的地方用1表示,不亮的地方用0表示,所以如果用LCD顯示,我們還要告訴LCD顯示什么顏色,這才是LCD需要的數(shù)據(jù),比如說16*16的數(shù)據(jù),有16行16列,我們將一行的數(shù)據(jù),也就是16位數(shù)據(jù)的每一位都取出來,為1的地方,我們就給LCD一個16位的數(shù)據(jù),為0的地方就不給數(shù)據(jù),這樣就能顯示了,取模生成的數(shù)據(jù)都是按行來的。圖片的顯示直接就將16位的數(shù)據(jù)傳遞給LCD,這個圖片數(shù)據(jù)的產(chǎn)生,我們可以用軟件LCD彩色圖片轉(zhuǎn)換工具(BMP_to_H)生成C語言文件,我們只需對文件進(jìn)行簡單的修改就能加入到我們的程序中,修改方法在軟件的說明中都有。

以上這些都是我自己的理解,話雖然不多,但這些都是我剛開始學(xué)的時候困擾我的地方,我相信看了這些對你理解LCD到底是怎樣顯示的會有一定的幫助,說的不對的地方,請大家及時幫我改正,呵呵。

下一篇文章中我將結(jié)合具體的代碼分析一下LCD的操作過程。


上一頁 1 2 下一頁

關(guān)鍵詞: ARM9S3C2440LCD顯

評論


技術(shù)專區(qū)

關(guān)閉