新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Stm32的TFT LCD顯示器控制學(xué)習(xí)筆記

        Stm32的TFT LCD顯示器控制學(xué)習(xí)筆記

        作者: 時(shí)間:2016-12-01 來(lái)源:網(wǎng)絡(luò) 收藏
        學(xué)習(xí)stm32,TFT LCD顯示屏控制是很重要的一章,本人在初步學(xué)習(xí)STM32遇到了很多困難,所以把學(xué)習(xí)中積累的部分感覺(jué)重要的知識(shí)點(diǎn)羅列出來(lái)。目前常用的TFT液晶內(nèi)部驅(qū)動(dòng)芯片是ILI9320,ILI9325系列,內(nèi)部原理基本一致,我用的是ILI9320。用stm32驅(qū)動(dòng)液晶,實(shí)際上就是驅(qū)動(dòng)ILI9320芯片。點(diǎn)亮TFT LCD的具體步驟有:

        (1)stm32與ILI9320芯片管腳的初始化。

        本文引用地址:http://www.104case.com/article/201612/324408.htm

        void LCD_Init(void); /*初始化LCD,也就是初始化LCD控制器ILI9320芯片與stm32控制器的管腳連接配置*/其中包括CS:TFTLCD片選信號(hào),WR:向TFTLCD寫(xiě)入信號(hào),RD:從TFTLCD讀取信號(hào),DB(15--0):16位雙向數(shù)據(jù)線(xiàn),RST:硬復(fù)位TFTLCD,RS:命令/數(shù)據(jù)標(biāo)志(0 讀寫(xiě)命令;1 讀寫(xiě)數(shù)據(jù)),TFT模塊有個(gè)控制器,名為ILI9320,該控制器自帶顯存,其顯存總大小為172820,模塊數(shù)據(jù)線(xiàn)與顯存的對(duì)應(yīng)關(guān)系位565方式


        SGRAM (Synchronous Graphics Random-Access Memory),同步圖形隨機(jī)存儲(chǔ)器,是一種專(zhuān)為顯卡設(shè)計(jì)的顯存、一種圖形讀寫(xiě)能力較強(qiáng)的顯存,由SDRAM改良而成。SGRAM讀寫(xiě)數(shù)據(jù)時(shí)不是一一讀取,而是以“塊”(Block)為單位,從而減少了內(nèi)存整體讀寫(xiě)的次數(shù),提高了圖形控制器的效率。同SDRAM一樣,SGRAM也分普通SGRAM與DDR SGRAM兩種。

        R0,這個(gè)命令有兩個(gè)功能,如果對(duì)它寫(xiě),則最低位位OSC,用于開(kāi)啟或關(guān)閉振蕩器,而如果對(duì)它讀,返回控制器型號(hào)。我們知道了控制器型號(hào),可以針對(duì)不同型號(hào)的控制器,進(jìn)行不同對(duì)的初始化。

        R3,入口模式命令。重點(diǎn)關(guān)注I/D0,I/D1,AM這三個(gè)位,因?yàn)檫@3個(gè)位控制了屏幕的顯示方向。AM:控制GRAM更新方向,當(dāng)AM=0的時(shí)候,地址以行方向更新,當(dāng)為1的時(shí)候,地址以列方向更新。I/D[1:0]:當(dāng)更新了一個(gè)數(shù)據(jù)之后,根據(jù)這兩個(gè)位的設(shè)置來(lái)控制地址計(jì)數(shù)器自動(dòng)增加/減少1,其關(guān)系圖如下

        R7,顯示控制命令。該命令CL位用來(lái)控制是8位彩色,還是26萬(wàn)色。為0是26萬(wàn)色,為1時(shí)八位色。D1,D0,BASEE這三個(gè)位用來(lái)控制顯示開(kāi)關(guān)與否的。

        當(dāng)全部置1的時(shí)候開(kāi)啟顯示,全0是關(guān)閉。我們一般通過(guò)該命令的設(shè)置來(lái)開(kāi)啟或關(guān)閉顯示器,以降低功耗

        R22,(讀/寫(xiě))數(shù)據(jù)(到/從)GRAM。

        R32,R33,設(shè)置GRAM的行地址和列地址。R32用于設(shè)置列地址(X坐標(biāo),0~239),R33用于設(shè)置行地址(Y坐標(biāo),0~319)。當(dāng)我們要在某個(gè)指定點(diǎn)寫(xiě)入一個(gè)顏色的時(shí)候,先通過(guò)這兩個(gè)命令設(shè)置到改點(diǎn),然后寫(xiě)入顏色值就可以了。

        R34,寫(xiě)數(shù)據(jù)到GRAM命令,當(dāng)寫(xiě)入了這個(gè)命令之后,地址計(jì)數(shù)器才會(huì)自動(dòng)的增加和減少。

        R80~R83,行列GRAM地址位置設(shè)置。這幾個(gè)命令用于設(shè)定你顯示區(qū)域的大小,我們整個(gè)屏的大小240*320, 但是有時(shí)候我們只需要在其中一部分區(qū)域?qū)懭霐?shù)據(jù),如果用先寫(xiě)坐標(biāo),后寫(xiě)數(shù)據(jù)這樣的方式來(lái)實(shí)現(xiàn),則速度大打折扣。

        此時(shí)我們可以通過(guò)這幾個(gè)命令,在其中開(kāi)辟一個(gè)區(qū)域,然后不停地丟數(shù)據(jù),地址計(jì)數(shù)器就會(huì)根據(jù)R3的設(shè)置自動(dòng)增加/減小,這樣就不需要頻繁的寫(xiě)地址了,大大提高了刷新的速度。

        (2)具體TFTLCD模塊功能程序

        顯示屏寬度參數(shù)定義


        #define LCD_W 240
        #define LCD_H 320
        #define LCD_LED PCout()//LCD背光
        #define LCD_CS PCout() //片選端口
        #define LCD_RS PCout() //數(shù)據(jù)/命令
        #define LCD_WR PCout() //寫(xiě)數(shù)據(jù)
        #define LCD_RD PCout() //讀數(shù)據(jù)
        A. 寫(xiě)寄存器
        首先根據(jù)英文版的ILI9320 datasheet 描述的關(guān)于寫(xiě)寄存器控制管腳的主要配置。下圖所示:
        圖:寫(xiě)寄存器波形圖

        voidLCD_WriteReg(u16 LCD_Reg,u16 LCD_RegValue)
        {
        /* Write 16-bit Index, thenWrite Reg */
        ClrCs //片選復(fù)位
        ClrRs //選擇命令
        ClrWr //寫(xiě)數(shù)據(jù)復(fù)位
        LCD_Write(LCD_Reg); //寫(xiě)入操作指令代碼
        SetWr //寫(xiě)數(shù)據(jù)置位
        /* 寫(xiě)16位的數(shù)據(jù)到指定寄存器*/
        SetRs
        ClrWr
        LCD_Write(LCD_RegValue); //寫(xiě)數(shù)據(jù)
        SetWr
        SetCs
        }
        B. 讀寄存器
        圖:讀寄存器波形圖

        u16 LCD_ReadReg(u8 LCD_Reg)
        {
        u16data;
        ClrCs
        ClrRs
        ClrWr
        LCD_Write(LCD_Reg);
        SetWr

        SetRs
        ClrRd
        SetRd
        data= LCD_Read();
        SetCs
        return data;
        }
        C. 寫(xiě)GRAM
        圖:寫(xiě)GRAM波形圖
        /*讀GRAM準(zhǔn)備過(guò)程*/
        void LCD_WriteRAM_Prepare(void)
        {
        /*Write 16-bit Index, then Write Reg */
        ClrCs
        ClrRs
        ClrWr
        LCD_Write(0x22);
        SetWr
        SetCs
        }
        /*讀GRAM*/
        void LCD_WriteRAM(u16 RGB_Code)
        {
        /*Write 16-bit Index, then Write Reg */
        ClrCs
        SetRs
        ClrWr
        LCD_Write(RGB_Code);
        SetWr
        SetCs
        }
        D. 讀GRAM
        圖:讀GRAM波形圖
        u16 LCD_ReadRAM(void)
        {
        u16dummy;
        u16data;
        LCD_WriteRAM_Prepare();
        LCD_DB_AS_InPut(); //將DB端口設(shè)置為輸入模式
        dummy= LCD_ReadSta();
        dummy++;
        data= LCD_ReadSta();
        LCD_DB_AS_OutPut();
        return data;
        }

        E.剩下的部分就是控制液晶畫(huà)點(diǎn)劃線(xiàn),顯示圖像的內(nèi)容,跟51時(shí)代的控制液晶基本類(lèi)似。



        關(guān)鍵詞: Stm32TFTLCD顯示器控

        評(píng)論


        技術(shù)專(zhuān)區(qū)

        關(guān)閉
        主站蜘蛛池模板: 大理市| 德格县| 庆阳市| 汉源县| 东明县| 元氏县| 乐陵市| 霸州市| 广元市| 双桥区| 静乐县| 镶黄旗| 济源市| 巴楚县| 台北市| 垫江县| 广饶县| 洞头县| 吴忠市| 务川| 揭西县| 德兴市| 宁化县| 丰宁| 济宁市| 朝阳区| 体育| 濮阳市| 和政县| 衡阳市| 甘德县| 瑞安市| 谷城县| 左贡县| 三都| 阿合奇县| 铜梁县| 吉首市| 米脂县| 威远县| 鹤山市|