在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > S3C2440的LCD簡(jiǎn)單應(yīng)用與實(shí)現(xiàn)

            S3C2440的LCD簡(jiǎn)單應(yīng)用與實(shí)現(xiàn)

            作者: 時(shí)間:2016-11-11 來(lái)源:網(wǎng)絡(luò) 收藏
            LCD的種類可分為:STN ,TFT ,LTPS ,OLED。其他類別各自有各自的優(yōu)缺點(diǎn)。由于FL2440上面用的是TFT類型,我們單獨(dú)來(lái)說(shuō)一下這個(gè)。TFT LCD大大縮短了屏幕響應(yīng)時(shí)間,其響應(yīng)時(shí)間小于80ms。并且改善了STN連續(xù)顯示時(shí)屏幕模糊閃爍,提高了動(dòng)態(tài)畫面的播放力,呈現(xiàn)出色彩飽和度和對(duì)比度都非常不錯(cuò),缺點(diǎn)就是功耗太高。

            TFT LCD的TTL信號(hào)

            本文引用地址:http://www.biyoush.com/article/201611/316627.htm

            VSYNC 垂直同步信號(hào)

            HSYNC水平同步信號(hào)

            HCLK 像素時(shí)鐘信號(hào)

            VD[23:0] 數(shù)據(jù)信號(hào)

            LEND 行結(jié)束信號(hào)(非必須)

            PWREN 電源開(kāi)關(guān)信號(hào)

            顯示器上的數(shù)據(jù)組成格式

            一幅圖像被稱為一幀(frame),每幀由多行組成,每行有多個(gè)像素組成,每一個(gè)像素的顏色用若干位的數(shù)據(jù)來(lái)表示。對(duì)于單色顯示器,每個(gè)像素使用1位來(lái)表示,稱為1BPP;對(duì)于256色顯示器,每個(gè)像素使用8位來(lái)表示,稱為8BPP.

            顯示器從屏幕左上方開(kāi)始,一行一行地取得每個(gè)像素的數(shù)據(jù)并顯示出來(lái),當(dāng)顯示到一行的最右邊時(shí),跳到下一行的最左邊開(kāi)始顯示下一行,當(dāng)顯示完所有行時(shí),跳到左上邊開(kāi)始下一幀。顯示器沿著“Z”字行的路線進(jìn)行掃描,使用HSYNC、VSYNC信號(hào)來(lái)控制掃描路線跳轉(zhuǎn),HSYNC表示“是跳到最左邊的時(shí)候了”,VSYNC表示“是跳到最上邊的時(shí)候了”。

            VSYNC信號(hào)出現(xiàn)的頻率表示一秒鐘內(nèi)能顯示多少幀圖像,稱為垂直頻率或者場(chǎng)頻率。就是常說(shuō)的“顯示器頻率”;HSYNC信號(hào)出現(xiàn)的頻率稱為水平頻率。現(xiàn)在來(lái)看一下時(shí)序圖。

            VSYNC可以理解為一幀圖像有效地信號(hào),在它低電平有效的時(shí)候,要連續(xù)發(fā)出(LINEVAL+1)個(gè)行有效數(shù)據(jù)HSYNC信號(hào);而在HSYNC有效地時(shí)候,要連續(xù)發(fā)出(HOZVAL+1)個(gè)像素有效數(shù)據(jù),這時(shí)像素?cái)?shù)據(jù)的頻率是由VCLK控制,VCLK是作為時(shí)序圖的基準(zhǔn)信號(hào)。我們開(kāi)發(fā)板上用的屏是240*320的3.5寸觸摸屏,那么LINEVAL+1=240,HOZVAL+1=320。開(kāi)始時(shí),對(duì)垂直頻率理解很模糊,后面干脆理解為一幀圖像有效地信號(hào),這樣正好與它的“顯示器頻率”相對(duì)應(yīng)。在時(shí)序圖中,可以看見(jiàn)VSWP/VBPD/VFPD和HSPW/HBPD/HFPD這幾個(gè)參數(shù),這是由于LCD在工作中往往四周會(huì)有黑框,我們通過(guò)設(shè)置這幾個(gè)參數(shù),可以控制使LCD的實(shí)際顯示區(qū)域(數(shù)據(jù)有效區(qū))與屏幕大小相當(dāng),這樣就看不到黑框。

            VSPW表示VSYNC信號(hào)的脈沖寬度為(VSPW+1)個(gè)HSYNC信號(hào)周期,即VSPW+1行,這VSPW+1行數(shù)據(jù)無(wú)效。

            VSPD表示VSYNC信號(hào)脈沖之后,還要經(jīng)過(guò)VSPD+1個(gè)HSYNC信號(hào)周期,有效行才出現(xiàn)。

            VFPD表示在連續(xù)發(fā)出LINEVAL+1行有效數(shù)據(jù)后,還要經(jīng)過(guò)VFPD+1個(gè)無(wú)效行,之后完整的一幀結(jié)束。

            HSPW表示HSYNC信號(hào)脈沖寬度為(HSPW+1)個(gè)VCLK信號(hào)周期,即HSPW+1個(gè)像素是無(wú)效的。

            HBPD表示在HSYNC信號(hào)脈沖之后,還要經(jīng)過(guò)HBPD+1個(gè)VCLK信號(hào)周期,有效像素才能夠出現(xiàn)。

            HFPD表示在連續(xù)發(fā)出HOZVAL+1個(gè)像素的有效數(shù)據(jù)之后,還要發(fā)出(HFPD+1)個(gè)無(wú)效像素,完整的一行結(jié)束。

            VCLK是像素時(shí)鐘,計(jì)算公式如下:

            VCLK=HCLK/[(CLKVAL+1)*2]

            CLKVAL可以通過(guò)LCDCON1設(shè)置,HCLK是100MHz,根據(jù)驅(qū)動(dòng)的LCD的像素時(shí)鐘為6.4MHz,代入得到CLKVAL值為6.8,取整后(6)存入到LCDCON1中,此時(shí)得到的VCLK為7.1MHz。

            現(xiàn)在看一下場(chǎng)頻(VSF)和行頻(HSF)的計(jì)算公式:

            HSF=VCLK/[(HSPW+1)+(HSPD+1)+(HFPD+1)+(HOZVAL+1)]=7.1/408=17.5KHz

            VSF=HSF/[(VSPW+1)+(VBPD+1)+(VFPD+1)+(LINEVAL+1)]=17.5/270=64.8Hz

            接下來(lái)了解一下24BPP模式下圖像數(shù)據(jù)格式。

            現(xiàn)在設(shè)置好VSYNC、HSYNC、VCLK等信號(hào)的參數(shù)之后,并將幀內(nèi)存(frame memory)d地址告訴LCD控制器,它即可自動(dòng)的發(fā)起DMA傳輸從幀內(nèi)存中得到圖像數(shù)據(jù),最終在上述信號(hào)的控制下出現(xiàn)在數(shù)據(jù)總線VD[23:0]上。在內(nèi)存中使用4個(gè)字節(jié)(32位)來(lái)表示一個(gè)像素,其中的3個(gè)字節(jié)從高到低分別表示紅、綠、藍(lán),剩余的一個(gè)字節(jié)無(wú)效。是低字節(jié)還是高字節(jié)無(wú)效,可以通過(guò)LCDCON5[12]來(lái)設(shè)置,設(shè)置為0,低字節(jié)有效,設(shè)置為1,高字節(jié)有效。
            ----------------------------------------------------------華麗分割------------------------------------------------------------------------------------------
            現(xiàn)在還要說(shuō)一個(gè)問(wèn)題就是顯示緩存區(qū)。這是要用到三個(gè)幀內(nèi)存地址寄存器LCDSADDR1~LCDSADDR3
            先來(lái)看一下幀內(nèi)存與視口(view point)對(duì)應(yīng)關(guān)系。視口就是要真正顯示的區(qū)域
            關(guān)于緩存區(qū)(內(nèi)存地址)我們定義一個(gè)二維數(shù)組LCD_BUFFER[240][320],來(lái)存儲(chǔ)像素?cái)?shù)據(jù)。在LCDSADDR1中,用來(lái)保存幀內(nèi)存的起始地址,視口所對(duì)應(yīng)的內(nèi)存起始地址??匆幌戮唧w寄存器格式:
            可以看出,幀內(nèi)存地址A[30:22]對(duì)應(yīng)LCDBANK[29:21],視口的起始地址LCDBASEU[21:0]對(duì)應(yīng)幀內(nèi)存起始地址A[21:1]。
            在LCDSADDR2中,用來(lái)保存幀緩存區(qū)結(jié)束地址A[21:1]。LCDBASEL等于LCD_BUFFER+(240*320*4)的結(jié)果的21位到1位的數(shù)據(jù)值。
            在LCDSADDR3中,OFFSIZE用于虛擬屏幕偏移長(zhǎng)度,不用可以設(shè)置為0;PAGEWIDTH用于定義視口寬度,以半字為單位。因此我們定義PAGEWIDTH=320*32/16。
            現(xiàn)在我們來(lái)看一段代碼分析:

            #inlcude "2440addr.h"
            #define U32 unsigned int

            #define M5D(n) ((n) & 0x1fffff) /*用于設(shè)置顯示緩存區(qū)時(shí),取低21位地址*/


            #define LCD_WIDTH 320 /*屏幕的寬*/

            #define LCD_HEIGHT 240 /*屏幕的高*/

            /*垂直同步信號(hào)的脈寬、后肩和前肩*/

            #define VSPW (3-1)

            #define VBPD (15-1)

            #define VFPD (12-1)

            /*水平同步信號(hào)的脈寬、后肩和前肩*/

            #define HSPW (30-1)

            #define HBPD (38-1)

            #define HFPD (20-1)

            /*顯示尺寸*/

            #define LINEVAL (LCD_HEIGHT-1)

            #define HOZVAL (LCD_WIDTH-1)

            /*for LCDCON1*/

            #define CLKVAL_TFT 6 /*設(shè)置時(shí)鐘信號(hào)*/

            #define MVAL_USED 0

            #define PNRMODE_TFT 3 /*TFT型LCD*/

            #define BPPMODE_TFT 13 /*24位TFT型LCD 24BPP*/

            /*for LCDCON5*/

            #define BPP24BL 0 /*32位數(shù)據(jù)表示24位顏色值時(shí),低位數(shù)據(jù)有效,高8位無(wú)效*/

            #define INVVCLK 0/*像素值在VCLK下降沿有效*/

            #define INVVLINE 1/*翻轉(zhuǎn)HSYNC信號(hào)*/

            #define INVVFRAME 1/*翻轉(zhuǎn)VSYNC信號(hào)*/

            #define INVVD 0 /*正常VD信號(hào)極性*/

            #define INVVDEN 0/*正常VDEN信號(hào)極性*/

            #define PWREN 1 /*使能PWREN信號(hào)*/

            #define BSWP0 /*顏色數(shù)據(jù)字節(jié)不交換*/

            #define HWSWP 0 /*顏色數(shù)據(jù)半字不交換*/

            /*定義顯示緩存區(qū)*/

            volatile U32 LCD_BUFFER[LCD_HEIGHT][LCD_WIDTH];

            extern unsigned char gImage_xiaogou[];

            /*延時(shí)程序*/

            void delay(int a)

            {

            int k;
            for(k=0;k

            }

            /*繪制屏幕背景顏色,顏色為c*/

            void Brush_Background( U32 c)

            {

            int x,y ;

            for( y = 0 ; y < LCD_HEIGHT ; y++ )

            {
            for( x = 0 ; x < LCD_WIDTH ; x++ )

            {
            LCD_BUFFER[y][x] =c;

            }
            }

            }

            /*畫實(shí)心圓,顏色為c。圓心在屏幕中心,半徑為80個(gè)像素*/

            void Draw_Circular(U32 c)

            {

            int x,y ;

            int tempX,tempY;

            int radius = 80;

            int SquareOfR = radius*radius;

            for( y = 0 ; y < LCD_HEIGHT ; y++ )/*將屏幕分成四個(gè)區(qū)域*/

            {

            for( x = 0 ; x < LCD_WIDTH ; x++ )

            {

            if(y<=120 && x<=160)

            {

            tempY=120-y;

            tempX=160-x;

            }

            else if(y<=120&& x>=160)

            {

            tempY=120-y;

            tempX=x-160;

            }

            else if(y>=120&& x<=160)

            {

            tempY=y-120;

            tempX=160-x;

            }

            else

            {

            tempY = y-120;

            tempX = x-160;

            }

            /*x2+y2與r2比較,畫圓,因?yàn)?pi;(x2+y2)=πr2(圓),兩邊比較時(shí)把π約掉,進(jìn)行比較*/

            if ((tempY*tempY+tempX*tempX)<=SquareOfR)

            LCD_BUFFER[y][x] = c ;

            }

            }

            }

            void Main(void)

            {

            /*配置LCD相關(guān)引腳*/

            rGPCUP = 0x00000000;

            rGPCCON = 0xaaaa02a9;

            rGPDUP = 0x00000000;

            rGPDCON=0xaaaaaaaa;

            /*設(shè)置LCD的類型、像素時(shí)鐘、設(shè)置像素位數(shù)、使能LCD信號(hào)的輸出。*/

            rLCDCON1=(CLKVAL_TFT<<8)|(MVAL_USED<<7)|(PNRMODE_TFT<<5)|(BPPMODE_TFT<<1)|0;

            /*這個(gè)非常重要。設(shè)置垂直方向各信號(hào)時(shí)間參數(shù)。*/

            rLCDCON2=(VBPD<<24)|(LINEVAL<<14)|(VFPD<<6)|(VSPW);

            rLCDCON3=(HBPD<<19)|(HOZVAL<<8)|(HFPD);/*設(shè)置水平方向各信號(hào)的時(shí)間參數(shù)*/

            rLCDCON4=(HSPW); /*設(shè)置HSYNC信號(hào)脈沖寬度*/

            rLCDCON5 = (BPP24BL<<12) | (INVVCLK<<10) | (INVVLINE<<9) | (INVVFRAME<<8) | (0<<7) | (INVVDEN<<6) | (PWREN<<3) |(BSWP<<1) | (HWSWP);

            /*******************************************************************************************/

            rLCDSADDR1=(((U32)LCD_BUFFER>>22)<<21)|M5D((U32)LCD_BUFFER>>1);

            rLCDSADDR2=M5D( ((U32)LCD_BUFFER+(LCD_WIDTH*LCD_HEIGHT*4))>>1 );

            rLCDSADDR3=LCD_WIDTH*32/16;
            /*在s3c2440中,寄存器LCDSADDR1和LCDSADDR2用于設(shè)置顯示緩存區(qū),即把我們定義的那個(gè)二維數(shù)組告訴s3c2440。其中LCDBANK的9位數(shù)據(jù)指定LCD的BANK,即顯示緩存區(qū)的第30位到第22位地址;LCDBASEU的21位數(shù)據(jù)指定了LCD的基址,即顯示緩存區(qū)開(kāi)始地址的第21位到第1位;LCDBASEL的21位數(shù)據(jù)指定了LCD的尾址,即顯示緩存區(qū)結(jié)束地址的第21位到第1位。例如,我們想要在尺寸為320×240的屏幕上顯示24位顏色,定義的顯示緩存區(qū)數(shù)組為L(zhǎng)CD_BUFFER[240][320],則LCDBANK等于LCD_BUFFER的第30位到第22位數(shù)據(jù)值(因?yàn)長(zhǎng)CD_BUFFER表示的就是數(shù)組的首地址),LCDBASEU等于LCD_BUFFER的第21位到第1位數(shù)據(jù)值,由于是用32位數(shù)據(jù)表示24為顏色,因此每個(gè)像素值是4個(gè)字節(jié),所以LCDBASEL等于(LCD_BUFFER+(240×320×4))結(jié)果的第21位到第1位的數(shù)據(jù)值。另外寄存器LCDSADDR3有兩個(gè)內(nèi)容:OFFSIZE和PAGEWIDTH。OFFSIZE用于虛擬屏幕的偏移長(zhǎng)度,如果我們不使用虛擬屏幕,就把它置為0;PAGEWIDTH定義了視口的寬,單位是半字,如在上面的例子中,PAGEWIDTH應(yīng)該為320×32÷16。

            */
            /***********************************************************************************************/

            rLCDINTMSK|=(3); /*屏蔽LCD中斷*/

            rTCONSEL = 0; /*無(wú)效LPC3600*/

            rGPGUP=rGPGUP|(1<<4); /*GPG4上拉電阻無(wú)效*/

            rGPGCON=rGPGCON|(3<<8); /*設(shè)置GPG4為L(zhǎng)CD_PWREN*/

            rGPGDAT = rGPGDAT | (1<<4) ; /*GPG4置1*/

            rLCDCON5=rLCDCON5&(~(1<<3))|(1<<3); /*有效PWREN信號(hào)*/

            rLCDCON5=rLCDCON5&(~(1<<5))|(0<<5); /*PWREN信號(hào)極性不翻轉(zhuǎn)*/

            rLCDCON1|=1; /*LCD開(kāi)啟,必須設(shè)置,否則LCD不工作*/

            while(1)

            {

            /*黑色背景,白色實(shí)心圓*/

            Brush_Background(0x0);

            Draw_Circular(0xffffff);

            delay(5000000);

            /*白色背景,黑色實(shí)心圓*/

            Brush_Background(0xffffff);

            Draw_Circular(0x0);

            delay(5000000);


            /*藍(lán)色背景,黃色實(shí)心圓 */

            Brush_Background(0xff);

            Draw_Circular(0xffff00);

            delay(5000000);


            /*綠色背景,品色實(shí)心圓*/

            Brush_Background(0xff00);

            Draw_Circular(0xff00ff);

            delay(5000000);


            /*紅色背景,青色實(shí)心圓*/

            Brush_Background(0xff0000);

            Draw_Circular(0xffff);

            delay(5000000);


            /*青色背景,紅色實(shí)心圓*/

            Brush_Background(0xffff);

            Draw_Circular(0xff0000);

            delay(5000000);


            /*品色背景,綠色實(shí)心圓*/

            Brush_Background(0xff00ff);

            Draw_Circular(0xff00);

            delay(5000000);


            /*黃色背景,藍(lán)色實(shí)心圓*/

            Brush_Background(0xffff00);

            Draw_Circular(0xff);

            delay(5000000);

            }

            }




            關(guān)鍵詞: S3C2440LC

            評(píng)論


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

            關(guān)閉