資料介紹
LCD驅(qū)動(dòng)編寫(xiě)小結(jié)
3.1 背光:對(duì)于大部分的彩色LCD一定要接背光,我們才能看到屏上的內(nèi)容;
3.2 控制信號(hào):不同的LCD廠商對(duì)于控制信號(hào)有不同的叫法,
VFRAME:LCD控制器和LCD驅(qū)動(dòng)器之間的幀同步信號(hào)。該信號(hào)告訴LCD屏的新的一幀開(kāi)始了。LCD控制器在一個(gè)完整幀顯示完成后立即插入一個(gè)VFRAME信號(hào),開(kāi)始新一幀的顯示;
VLINE:LCD控制器和LCD驅(qū)動(dòng)器之間的線同步脈沖信號(hào),該信號(hào)用于LCD驅(qū)動(dòng)器將水平線(行)移位寄存器的內(nèi)容傳送給LCD屏顯示。LCD控制器在整個(gè)水平線(整行)數(shù)據(jù)移入LCD驅(qū)動(dòng)器后,插入一個(gè)VLINE信號(hào);
VCLK:LCD控制器和LCD驅(qū)動(dòng)器之間的像素時(shí)鐘信號(hào),由LCD控制器送出的數(shù)據(jù)在VCLK的上升沿處送出,在VCLK的下降沿處被LCD驅(qū)動(dòng)器采樣;
VM:LCD驅(qū)動(dòng)器的AC信號(hào)。VM信號(hào)被LCD驅(qū)動(dòng)器用于改變行和列的電壓極性,從而控制像素點(diǎn)的顯示或熄滅。VM信號(hào)可以與每個(gè)幀同步,也可以與可變數(shù)量的VLINE信號(hào)同步。
3.3 數(shù)據(jù)線:也就是我們說(shuō)的RGB信號(hào)線,不過(guò)需要與硬件工程是配合的是他采用了哪種接線方法,24位16位或其它。對(duì)于16位TFT屏又有兩種方式,在寫(xiě)驅(qū)動(dòng)前你要清楚是5:6:5還是5:5:5:I,這些與驅(qū)動(dòng)的編寫(xiě)都有關(guān)系
3.4 要注意一下LCD的電源電壓,對(duì)于手持設(shè)備來(lái)說(shuō)一般都為5V或3.3V,如果LCD的需要的電源電壓是5v,那就要注意,電壓只有3.3V的電壓需要提高到5V,否則你可能能將屏點(diǎn)亮,但顯示的圖像要等到太陽(yáng)從西邊出來(lái)的那一天才能正常,呵呵,我可吃過(guò)苦頭的哦!
3.5 3.3V邏輯電壓轉(zhuǎn)變成5V邏輯電壓電路圖
3.6 最后還有一個(gè)問(wèn)題,有些LCD屏還需要一顆伴侶芯片,就是S3C2410手冊(cè)中的那顆LPC3600。這可能在LCD的手冊(cè)中都有論述吧,我沒(méi)有遇到過(guò)這樣的屏,所以也不是很清楚,不過(guò)現(xiàn)在的大部分LCD屏應(yīng)該都不需要這個(gè)討厭的家伙了
3.7 還得提醒大家一下,S3C2410到LCD屏的連線千萬(wàn)千萬(wàn)別超過(guò)0.5米,否則會(huì)給你帶來(lái)麻煩,我也是吃過(guò)苦頭的,LCD屏上面的部分顯示任何信息都是正確的,而只有屏的底部會(huì)有時(shí)正確有時(shí)錯(cuò)誤,折騰了好一陣,才知道是連線太長(zhǎng)的緣故!
3.8 好了,在硬件工程師的幫助下,硬件接好了,那就該我們做軟件的干活了,編寫(xiě)驅(qū)動(dòng)吧
3.9 讓我們首先看一下RGB數(shù)據(jù)結(jié)構(gòu)的定義
static struct lcd_rgb ***_lcd_rgb_16 = {
red: //-- offset:11 length:5
green: //-- offset:5 length:6
blue: //-- offset:0 length:5
transp: //-- offset:0 length:0
};
3.10 這是對(duì)16位色的RGB顏色進(jìn)行定義,R:G:B:I = 5:6:5:0,即我們常說(shuō)的565顯示方式。
3.11 隨便寫(xiě)一個(gè)16位數(shù)據(jù)的顏色數(shù)據(jù)(為了分析的方便,我把它寫(xiě)成二進(jìn)制)
RGB = 10101101 10111001 根據(jù)上面的結(jié)構(gòu)定義我們來(lái)分析一下RGB各是多少(因?yàn)闆](méi)有透明色,我們不去分析)
a) blue: {offset: 0, length: 5} 偏移量為0,長(zhǎng)度為5,我們從那個(gè)RGB中提取出來(lái)便是 “11001”
b) green:{offset: 5, length: 6} 偏移量為5,長(zhǎng)度為6,我們從那個(gè)RGB中提取出來(lái)便是101 101
c) red: {offset: 11, length: 5 } 偏移量為11,長(zhǎng)度為5,我們從那個(gè)RGB中提取出來(lái)便是 10101
d) 我們得到了一個(gè)RGB值為21:45:25,就是這個(gè)顏色
e) 那么反過(guò)來(lái),有了RGB的值我們?cè)撊绾?,因?yàn)镽GB的有效位數(shù)都不足一個(gè)字節(jié)(8位),那我們只能忍痛割愛(ài)了,舍棄掉低位數(shù)據(jù),代碼如下:
r = R & 0xF8;
g = G & 0xFC;
b = B & 0xF8;
high = r | (g<<5);
low = (g<<3) | (b>>3);
color= (high << 8) | low;
記住,這段代碼在GUI程序中是有用的
3.12 很重要的:
a)顏色位數(shù),bpp:16如果你的LCD屏是TFT的,那一般都可以達(dá)到16位色或24位色,這也要看硬件怎么連接了,根據(jù)情況進(jìn)行設(shè)置即可;
b) LCD屏的寬度和高度xres: 240,yres: 320這個(gè)就不用多說(shuō)了,你的屏的分辨率是多少就設(shè)置成多少唄。
3.12 寄存器的設(shè)置,這些也不困難。下面就讓我們一起一口一口的將S3C2410的LCD寄存器統(tǒng)統(tǒng)吃掉!
首先介紹一下我這塊屏,這是日立的一塊TFT屏,大小為640X240,可以支持到16位色。
與驅(qū)動(dòng)有關(guān)的一張表,
3.13 看一下LCD寄存器1的設(shè)置。
LINECNT --- 這是一個(gè)只讀的數(shù)據(jù),我們當(dāng)然沒(méi)有必要理它
CLKVAL --- 這可是一個(gè)很有用的參數(shù),其實(shí)沒(méi)必要管它后面的計(jì)算,我們可以通過(guò)實(shí)際的測(cè)試來(lái)得出一個(gè)有效的值,對(duì)于PNRMODE --- 這個(gè)應(yīng)該不用多做解釋,大家一看都明白了,對(duì)于TFT屏,只能設(shè)置成11,而對(duì)于CSTN屏,可能需要根據(jù)實(shí)際屏的信息去設(shè)置,我遇到的屏都設(shè)置成10,即8bit單掃描模式。對(duì)于4bit單掃描、4bit雙掃描、8bit單掃描的BPPMODE --- 這個(gè)參數(shù)更不用多說(shuō)了吧,就是設(shè)置屏的顏色位數(shù)嘍。
3.14 LCD 控制器 2,對(duì)于 TFT 屏必須要填
看一下圖二 LCD屏資料,對(duì)比一下得出如下信息:
LCD2_VBPD:
Vertical back po
LCD2_VFPD:
Vertical front porc
LCD2_VSPW:
Vsync Valid width
關(guān)于LINEVAL在程序的后面將
經(jīng)過(guò)分析,我們知道了如何設(shè)置LCD2:
3.15 LCD 控制器 3
對(duì)于 TFT 屏,很容易將 HBPD 和 HFPD 找出來(lái),如下
porch 典型值為 37
porch 典型值為 32
此處暫時(shí)不管
LCD3_HBPD:
Horizontal back
LCD3_HFBD:
Horizontal back
對(duì)于HOZVAL同樣會(huì)在后面提到,
經(jīng)過(guò)分析,我們知道了如何設(shè)置LCD3:
3.16 LCD 控制器 4
對(duì)于 TFT 屏,需要設(shè)置 HSPW 的值,這個(gè)在 LCD 手冊(cè)上也很容易
_HSPW:
典型值為 5意思,有什么作用,我從來(lái)不動(dòng)它,只取它最初的那個(gè)值13
經(jīng)過(guò)分析,我們知道了如 何設(shè)置 LCD4:
3.17 LCD 控制器 5
這個(gè)寄存器的看起來(lái)比較復(fù)雜,但是無(wú)外乎這幾類:
a.只讀信息:VSTATUS和HSTATUS只讀的東東,設(shè)置它也沒(méi)
b.TFT屏的顏色信息:BPP24BL、FRM565TFT屏的顏色信息,這個(gè)我們?cè)贚CD的硬件連接時(shí)已經(jīng)提到了,根據(jù)具體的接線方式,設(shè)置信息。
c.控制信號(hào)的極性,這些信息主要是使S3C2410的信號(hào)輸出極性與LCD屏的輸入極性題,需要根據(jù)具體的硬件進(jìn)行設(shè)置,較為常見(jiàn)的是vline/hsync 、VFRAME/VSYNC脈沖的極性。
d.顏色信息的字節(jié)交換控制位:BSWP、HWSWP
這兩位用來(lái)控制字節(jié)交換和半字交換,主要用來(lái)大小頭的問(wèn)題,如果
輸出到屏上的漢字左右互換了,或者輸出到屏上的圖花屏了,可以更改這個(gè)選項(xiàng)。
e.我的這塊TFT的信息設(shè)置如下:lcdcon5,一塊 CSTN 屏的信息:lcdcon5
f.FrameBuffer 起始寄存器 2 和 FrameBuffer 起始寄存器 3
這兩個(gè)寄存器的設(shè)置比較重要,在此我給出12位色CSTN屏和16位色TFT的設(shè)置代碼:
g.RGB Loopup Table Register
這三個(gè)寄存器的在驅(qū)動(dòng)256色CSTN屏的時(shí)候需要使用,我在別的芯片上使用過(guò),因?yàn)檫@顆芯片支持12位色,所以沒(méi)有去調(diào)試,我給出兩組可能的值:
S3C44B0上的
rREDLUT = 0xFCA86420;
rGREENLUT = 0xFCA86420;
rBLUELUT = 0xFFFFFA50;
Jupiter上的
rREDLUT = 0xFEC85310
rGREENLUT = 0xFEC85310
rBLUELUT = 0xFB40
3.18 好了,各個(gè)寄存器的設(shè)置完成了,最后在驅(qū)動(dòng)CSTN屏的時(shí)候需要提醒大家一句,CSTN的信號(hào)引腳中有一個(gè)叫VM/DISP的信號(hào)線,這個(gè)信號(hào)線的作用就是打開(kāi)LCD的顯示開(kāi)關(guān),讓其進(jìn)行顯示,它可以接到任何一個(gè)GPIO口上。S3C2410中提供了一個(gè)VM信號(hào),可以將LCD的這個(gè)信號(hào)與S3C2410的VM信號(hào)相接即可,然后在驅(qū)動(dòng)中一定要加上如下語(yǔ)句(藍(lán)色選中部分):
否則你的LCD可能沒(méi)有任何顯示哦(對(duì)于TFT屏不需要這個(gè)語(yǔ)句)
3.19. 驅(qū)動(dòng)寫(xiě)好了,重新Make,下載就可以了。如果一切順利,在TFT屏或256色的CSTN屏上會(huì)有一個(gè)漂亮的小蜻蜓(應(yīng)該是蜻蜓吧)出現(xiàn)。注意,并不是蜻蜓出現(xiàn)了就代表你的驅(qū)動(dòng)OK了,還要用GUI程序做進(jìn)一步的測(cè)試,因?yàn)槟骋粋€(gè)或幾個(gè)參數(shù)雖然不正確,但是仍然能夠看到小蜻蜓的,但顯示圖形的時(shí)候就有問(wèn)題了。另外,在驅(qū)動(dòng)CSTN到12位色的時(shí)候,我們?cè)谄辽峡床坏叫◎唑眩ㄎ业腘塊CSTN屏上都沒(méi)見(jiàn)到小蜻蜓),我想,可能是armLinux本身不支持12位色顯示,或者我們某些地方?jīng)]搞對(duì)的原因吧,但這不代表你的驅(qū)動(dòng)有問(wèn)題,用GUI程序?qū)慒rameBuffer,看看能否的到正確的結(jié)果。
3.20. GUI程序的編寫(xiě)
3.21 其實(shí)要在LCD上顯示圖像,說(shuō)白了就是把數(shù)據(jù)(包含顏色)寫(xiě)到FrameBuffer中對(duì)應(yīng)的位置就可以了用mmap函數(shù)使用戶空間的一段地址關(guān)聯(lián)到設(shè)備內(nèi)存(FrameBuffer)上。無(wú)論何時(shí),只要程序在分配的地址范圍內(nèi)進(jìn)行讀取或者寫(xiě)入,實(shí)際上就是對(duì)設(shè)備的訪問(wèn),使用 mmap 可以既快速又簡(jiǎn)單地訪問(wèn)顯示卡的內(nèi)存。對(duì)于象這樣的性能要求比較嚴(yán)格的應(yīng)用來(lái)說(shuō),直接訪問(wèn)能給我們提供很大不同。
3.22 不過(guò)我曾將幫一個(gè)網(wǎng)友調(diào)試了一個(gè)S3C44B0上的GUI程序,在他的GUI中mmap函數(shù)總會(huì)出錯(cuò),因?yàn)闆](méi)有拿到他的硬件和驅(qū)動(dòng)源碼,沒(méi)有分析出其中的原因,所以只得用write函數(shù),直接向fb0寫(xiě)入數(shù)據(jù),奇怪的是只寫(xiě)入一部分?jǐn)?shù)據(jù)好像都不起任何作用,只得整屏數(shù)據(jù)寫(xiě)入才搞定了。這可就比較痛苦了,不過(guò)好在他只是寫(xiě)入的黑白數(shù)據(jù),數(shù)據(jù)量還不是很大,要是彩色的那可真的痛苦了
3.23 另外,我還想多啰嗦兩句,F(xiàn)rameBuffer的像素點(diǎn)與LCD屏上的像素點(diǎn)的對(duì)應(yīng)關(guān)系 ,深入了解一下對(duì)程序的理解可能會(huì)更清楚一點(diǎn)。我們知道黑白(2色)顏色用0和1就可以表示了,也就是1位數(shù)據(jù)就可以了,那1個(gè)字節(jié)就可以表示8位數(shù)據(jù),假如這個(gè)字節(jié)是10101010,F(xiàn)rameBuffer的偏移地址為0,則在LCD屏上便會(huì)顯示出4個(gè)黑點(diǎn),黑點(diǎn)中間會(huì)有4個(gè)白點(diǎn)出現(xiàn)(假如1是黑色);對(duì)于4色則用00、01、10、11就可以表示出四種顏色,即用兩位數(shù)據(jù)可以表示一位數(shù)據(jù),那同樣是10101010,則對(duì)應(yīng)于LCD屏上則顯示的是顏色值為10,長(zhǎng)度為4(8/2)的一條直線;同理,對(duì)于8位色(256色),則8位數(shù)據(jù)才能表示出一個(gè)點(diǎn)的顏色值,10101010在LCD屏上就只能顯示為顏色值為10101010的點(diǎn)了。
3.24 有了上面的基礎(chǔ)我們就可以很好的理解這個(gè)語(yǔ)句了:
即FrameBuffer的大小=LCD屏的寬度 * LCD屏的高度 * 每像素的位數(shù) / 每字節(jié)的位數(shù)
例如,一個(gè)320*240的黑白平,F(xiàn)rameBuffer的大小為
320 * 240 * 1 / 8 = 9600 (字節(jié))
而一個(gè)320 * 240的16位色LCD的FrameBuffer的大小則為
3.25 TFT屏16位色的畫(huà)點(diǎn)函數(shù)
3.26 5) TFT屏16位色下顯示24色位圖函數(shù)
320 * 240 * 16 / 8 = 153600(字節(jié)
- LCD1602驅(qū)動(dòng)根據(jù)數(shù)據(jù)手冊(cè)編寫(xiě)
- LCD驅(qū)動(dòng)控制專用芯片TM1721數(shù)據(jù)手冊(cè) 12次下載
- 點(diǎn)陣式存儲(chǔ)器多功能LCD驅(qū)動(dòng)電路VK2C22 13次下載
- 點(diǎn)陣式存儲(chǔ)器多功能LCD驅(qū)動(dòng)電路VK2C24 17次下載
- 低功耗LCD驅(qū)動(dòng)芯片VKL060原理圖下載 27次下載
- LCD液晶驅(qū)動(dòng)芯片SOP24L POD原理圖下載 16次下載
- LCD控制驅(qū)動(dòng)電路芯片VK1056C原理圖下載 29次下載
- 6*4 LCD控制驅(qū)動(dòng)電路芯片VK1024B參考電路 12次下載
- 6*4 LCD控制驅(qū)動(dòng)電路芯片VK1024B 26次下載
- 32*4 LCD驅(qū)動(dòng)器芯片VK1621S-1數(shù)據(jù)手冊(cè) 19次下載
- 看碼源總結(jié)Keil C 51單片機(jī)延時(shí)程序編寫(xiě)資料下載
- TFT LCD液晶顯示器的工作原理-謝崇凱(最全版本)LCD驅(qū)動(dòng)必看.pdf 0次下載
- LCD模塊與點(diǎn)陣LCD驅(qū)動(dòng)與顯控原理及實(shí)踐全解析 71次下載
- LCD驅(qū)動(dòng)總結(jié) 13次下載
- 點(diǎn)陣LCD驅(qū)動(dòng)編寫(xiě)指南
- 基于FPGA的LCD1602液晶顯示模塊驅(qū)動(dòng)設(shè)計(jì) 1623次閱讀
- AOSP源碼定制-內(nèi)核驅(qū)動(dòng)編寫(xiě) 1335次閱讀
- RK3568驅(qū)動(dòng)指南|驅(qū)動(dòng)基礎(chǔ)進(jìn)階篇-進(jìn)階8 內(nèi)核運(yùn)行ko文件總結(jié) 1192次閱讀
- 基于OpenHarmony編寫(xiě)GPIO平臺(tái)驅(qū)動(dòng)和應(yīng)用程序 926次閱讀
- 緩沖方案驅(qū)動(dòng)大型LCD 769次閱讀
- 如何設(shè)計(jì)一個(gè)簡(jiǎn)單的LCD驅(qū)動(dòng)框架 2107次閱讀
- PIC單片機(jī)驅(qū)動(dòng)LCD段驅(qū)動(dòng)器的設(shè)計(jì) 1433次閱讀
- 對(duì)認(rèn)識(shí)SOP的認(rèn)知、作用、特征及編寫(xiě)要素! 6245次閱讀
- LCD1602的驅(qū)動(dòng)程序的代碼編寫(xiě) 1.2w次閱讀
- LCD驅(qū)動(dòng)分析_LCD控制器設(shè)置及代碼詳解 1.9w次閱讀
- 基于MSP430的SPI驅(qū)動(dòng)編寫(xiě)之用MSP430驅(qū)動(dòng)AFE4400 5356次閱讀
- lcd驅(qū)動(dòng)程序如何編寫(xiě)顯示圖片功能 2581次閱讀
- 如何用嵌入式Linux系統(tǒng)編寫(xiě)鍵盤(pán)驅(qū)動(dòng) 1363次閱讀
- 嵌入式驅(qū)動(dòng)的構(gòu)造分析總結(jié) 4629次閱讀
- IC驅(qū)動(dòng)LCD方案分析以及考量,為什么STN點(diǎn)陣會(huì)引起LCD出現(xiàn)錯(cuò)誤?是否驅(qū)動(dòng)的問(wèn)題? 1654次閱讀
下載排行
本周
- 1電子電路原理第七版PDF電子教材免費(fèi)下載
- 0.00 MB | 1490次下載 | 免費(fèi)
- 2單片機(jī)典型實(shí)例介紹
- 18.19 MB | 92次下載 | 1 積分
- 3S7-200PLC編程實(shí)例詳細(xì)資料
- 1.17 MB | 27次下載 | 1 積分
- 4筆記本電腦主板的元件識(shí)別和講解說(shuō)明
- 4.28 MB | 18次下載 | 4 積分
- 5開(kāi)關(guān)電源原理及各功能電路詳解
- 0.38 MB | 10次下載 | 免費(fèi)
- 6基于AT89C2051/4051單片機(jī)編程器的實(shí)驗(yàn)
- 0.11 MB | 4次下載 | 免費(fèi)
- 7藍(lán)牙設(shè)備在嵌入式領(lǐng)域的廣泛應(yīng)用
- 0.63 MB | 3次下載 | 免費(fèi)
- 89天練會(huì)電子電路識(shí)圖
- 5.91 MB | 3次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費(fèi)
- 2PADS 9.0 2009最新版 -下載
- 0.00 MB | 66304次下載 | 免費(fèi)
- 3protel99下載protel99軟件下載(中文版)
- 0.00 MB | 51209次下載 | 免費(fèi)
- 4LabView 8.0 專業(yè)版下載 (3CD完整版)
- 0.00 MB | 51043次下載 | 免費(fèi)
- 5555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33562次下載 | 免費(fèi)
- 6接口電路圖大全
- 未知 | 30320次下載 | 免費(fèi)
- 7Multisim 10下載Multisim 10 中文版
- 0.00 MB | 28588次下載 | 免費(fèi)
- 8開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21539次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935053次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537791次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233045次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191183次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183277次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138039次下載 | 免費(fèi)
評(píng)論