<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        Stm32的TFT LCD顯示器控制學習筆記

        作者:劉力宏   來源:本站原創   點擊數:  更新時間:2014年03月04日   【字體:

        學習stm32,TFT LCD顯示屏控制是很重要的一章,本人在初步學習STM32遇到了很多困難,所以把學習中積累的部分感覺重要的知識點羅列出來。目前常用的TFT液晶內部驅動芯片是ILI9320,ILI9325系列,內部原理基本一致,我用的是ILI9320。用stm32驅動液晶,實際上就是驅動ILI9320芯片。點亮TFT LCD的具體步驟有:

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

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


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

        R0,這個命令有兩個功能,如果對它寫,則最低位位OSC,用于開啟或關閉振蕩器,而如果對它讀,返回控制器型號。我們知道了控制器型號,可以針對不同型號的控制器,進行不同對的初始化。

        R3,入口模式命令。重點關注I/D0,I/D1,AM這三個位,因為這3個位控制了屏幕的顯示方向。AM:控制GRAM更新方向,當AM=0的時候,地址以行方向更新,當為1的時候,地址以列方向更新。I/D[1:0]:當更新了一個數據之后,根據這兩個位的設置來控制地址計數器自動增加/減少1,其關系圖如下

        R7,顯示控制命令。該命令CL位用來控制是8位彩色,還是26萬色。為0是26萬色,為1時八位色。D1,D0,BASEE這三個位用來控制顯示開關與否的。

        當全部置1的時候開啟顯示,全0是關閉。我們一般通過該命令的設置來開啟或關閉顯示器,以降低功耗。

            R22,(讀/寫)數據(到/從)GRAM。

        R32,R33,設置GRAM的行地址和列地址。R32用于設置列地址(X坐標,0~239),R33用于設置行地址(Y坐標,0~319)。當我們要在某個指定點寫入一個顏色的時候,先通過這兩個命令設置到改點,然后寫入顏色值就可以了。

        R34,寫數據到GRAM命令,當寫入了這個命令之后,地址計數器才會自動的增加和減少。

        R80~R83,行列GRAM地址位置設置。這幾個命令用于設定你顯示區域的大小,我們整個屏的大小240*320, 但是有時候我們只需要在其中一部分區域寫入數據,如果用先寫坐標,后寫數據這樣的方式來實現,則速度大打折扣。

        此時我們可以通過這幾個命令,在其中開辟一個區域,然后不停地丟數據,地址計數器就會根據R3的設置自動增加/減小,這樣就不需要頻繁的寫地址了,大大提高了刷新的速度。

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

        顯示屏寬度參數定義


        #define LCD_W 240
        #define LCD_H 320
        #define    LCD_LED   PCout()//LCD背光         
        #define    LCD_CS   PCout() //片選端口     
        #define    LCD_RS      PCout()  //數據/命令        
        #define    LCD_WR  PCout() //寫數據              
        #define    LCD_RD      PCout()  //讀數據       
        A.       寫寄存器
        首先根據英文版的ILI9320 datasheet 描述的關于寫寄存器控制管腳的主要配置。下圖所示:
        圖:寫寄存器波形圖
         
         voidLCD_WriteReg(u16 LCD_Reg,u16 LCD_RegValue)
        {
             /* Write 16-bit Index, thenWrite Reg */
             ClrCs       //片選復位
              ClrRs      //選擇命令
             ClrWr       //寫數據復位
              LCD_Write(LCD_Reg);     //寫入操作指令代碼
              SetWr      //寫數據置位
             /* 寫16位的數據到指定寄存器*/
             SetRs
             ClrWr
             LCD_Write(LCD_RegValue);   //寫數據
             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.   寫GRAM
        圖:寫GRAM波形圖
        /*讀GRAM準備過程*/
        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端口設置為輸入模式
          dummy= LCD_ReadSta();
         dummy++;
          data= LCD_ReadSta();
         LCD_DB_AS_OutPut();
         return    data;
        }

         

        E.剩下的部分就是控制液晶畫點劃線,顯示圖像的內容,跟51時代的控制液晶基本類似。

        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮