文章详情

RA8875驱动彩色TFT液晶模块应用程序

日期:2024-04-29 21:24
浏览次数:2129
摘要: RA8875驱动彩色TFT液晶模块应用程序 摘要:本文介绍了清达光电5.7英寸彩色TFT液晶模块,主要介绍RA8875控制器的功能以及驱动320240此款显示屏的应用程序等。 1,RA8875驱动彩色TFT液晶模块应用程序——RA8875介绍: RA8875 是一个文字与绘图模式的双图层液晶显示 (TFT-LCD) 控制器,可结合文字或2D图形应用,*大可支持到800*480 点分辨率的中小尺寸数字面板。内建 768KB 显示内存可提供大多数使用者的应用一个更弹性的解决方案。此外,使用者可藉由选用外部串行式Flash 接口,支持B...

RA8875驱动彩色TFT液晶模块应用程序


摘要:本文介绍了清达光电5.7英寸彩色TFT液晶模块,主要介绍RA8875控制器的功能以及驱动320240此款显示屏的应用程序等。


1,RA8875驱动彩色TFT液晶模块应用程序——RA8875介绍:

    RA8875 是一个文字与绘图模式的双图层液晶显示 (TFT-LCD) 控制器,可结合文字或2D图形应用,*大可支持到800*480 点分辨率的中小尺寸数字面板。内建 768KB 显示内存可提供大多数使用者的应用一个更弹性的解决方案。此外,使用者可藉由选用外部串行式Flash 接口,支持BIG5/GB 编码,可提供*大达32*32 像素之的字型输入。在图形的使用上,RA8875 支持2D 的BTE 引擎 (Block Transfer Engine),此功能兼容于一般通用的2D BitBLT 功能,可处理大量图形数据转换与传送。同时RA8875 也内建几何图形加速引擎 (Geometric Speed-up Engine),提供使用者透过简单的设定轻松画出直线、矩形、圆形和椭圆的几何图形。为了贴近终端始用者的应用,RA8875 整合了强大的功能,如画面卷动功能、显示浮动窗口、图形Pattern 及文字放大等功能,可大量节省使用者软件开发的时间,并提升MCU软件的执行效率。

    RA8875 提供低成本的 8080/6800 并列式MCU 接口,由于内建强大的硬件加速功能,可降低数据传输所需的时间并且改善效率。RA8875提供串行式 SPI/I2C 等极少量脚位的界面,内建 4-wire 的触控面板控制器,以及2组脉波宽度调变 (PWM) ,可用于调整面板背光或其它应用。相对于其它的解决方案,RA8875 是一个功能强大及低成本的彩色TFT 控制器,让使用者顺利解决软硬件开发上的疑虑,同时达成低成本、高效能的系统方案。

RA8875控制器特点



2,RA8875驱动彩色TFT液晶模块应用程序——清达光电5.7英寸彩色TFT液晶模块HGF05731介绍

HGF05731是一款文字与图形双图层显示的液晶模组, 可结合文字或2D图形应用。 支持BIG5/GB/UNICODE等编码;在图形的使用上,支持一2D的BET引擎,此BET兼容于一般通用的2D BitBLT的功能,可用于处理大量图形数据的转换;除此还包括一些强大的图形处理功能,如画面旋转功能、卷动功能、文字放大等等,并提升MCU软件的执 行效率。   此款产品主要特点如下: >  支持文字和绘图两种混合显示模式 >  色彩深度:256色/64K色 >  支持320X240Pixels 2 Layers >  此款默认8-bit 8080时序,是一款功能强大的彩色TFT屏。 (支持8-bit 8080、3/4-wire SPI 及I2C时序,时序可选) >  内建DDRAM: 768KB >  内建10KB字型ROM(8*16Dots)及支持标准ISO8859-1/2/3/4编码 >  支持外面串列式Flash/ROM SPI 界面 >  支持集通公司UNICODE/BIG5/GB系列字库(16X16/24X24/32X32Dots) >  支持1倍到4倍字型放大(垂直和水平) >  支持文字垂直旋转模式功能 >  内建2D BET功能 >  内建几何图形加速绘图引擎 >  提供可调整大小的文字写入游标功能 >  提供32*32pixel的图形光标功能 >  支持256个使用者自定8X16字元符号 >  支持16个使用者自建8X8像素图形Pattern,或4个使用者自建16X16像素图形Pattern >  脉波宽度调制(PWM)控制LED背光 >  内建4线式触控面板控制器(此款产品触摸屏可选) >  提供低耗电的睡眠模式


3,RA8875驱动彩色TFT液晶模块应用程序——应用程序

#include "lcd.h"
#include "delay.h"
#include "stdlib.h"
//#include "car_pic.h"
#define LCD_FAST_IO     1     //定义是否使用快速IO    0,不实用.1,使用    

#if LCD_FAST_IO==1 //快速IO
//写寄存器函数
 void LCD_CmdWrite(u8 Cmd)
{
    LCD_RS_SET;//写地址  
    LCD_CS_CLR;
    DATAOUT(Cmd);
    LCD_WR_CLR;
    LCD_WR_SET;   
    LCD_CS_SET;  
}

#else//正常IO
//写寄存器函数
void LCD_CmdWrite(u8 Cmd)
{
    LCD_RS=1;//写地址  
     LCD_CS=0;
    DATAOUT(Cmd);
    LCD_WR=0;
    delay_ms(10);
    LCD_WR=1;
     LCD_CS=1;   
}     
#endif

void LCD_DataWrite(u16 Data)
{    GPIOA->CRL=0X33333333; //PB0-7  上拉输出
    GPIOA->CRH=0X33333333; //PB8-15 上拉输出
    GPIOA->ODR=0XFFFF;    //全部输出高
    LCD_CS_CLR;
    LCD_RS_CLR;

    DATAOUT(Data);
        LCD_WR_CLR;    
    LCD_WR_SET;       
    LCD_RS_SET;
    LCD_CS_SET;

    

}  



//***********************读状态
u8 LCD_StatusRead(void)
{
       u16 t;
    GPIOB->CRL=0X88888888; //PB0-7  上拉输入
    GPIOB->CRH=0X88888888; //PB8-15 上拉输入
    GPIOB->ODR=0XFFFF;    //全部输出高
#if LCD_FAST_IO==1 //快速IO
    LCD_RS_SET;
    LCD_CS_CLR;
    //读取数据(读寄存器时,并不需要读2次)
    LCD_RD_CLR;            
    t=DATAIN;    
    LCD_RD_SET;
    LCD_RS_CLR;
    LCD_CS_SET;
#else
    LCD_RS=1;
    LCD_CS=0;
    //读取数据(读寄存器时,并不需要读2次)
    LCD_RD=0;
    t=DATAIN;
    LCD_RD=1;
    LCD_CS=1;
#endif  
    GPIOB->CRL=0X33333333; //PB0-7  上拉输出
    GPIOB->CRH=0X33333333; //PB8-15 上拉输出
    GPIOB->ODR=0XFFFF;    //全部输出高
    return t;    

}

//***********************读数据
u8 LCD_DataRead(void)
{

      u16 t;
    GPIOB->CRL=0X88888888; //PB0-7  上拉输入
    GPIOB->CRH=0X88888888; //PB8-15 上拉输入
    GPIOB->ODR=0XFFFF;    //全部输出高
#if LCD_FAST_IO==1 //快速IO
    LCD_RS_CLR;
    LCD_CS_CLR;
    //读取数据(读寄存器时,并不需要读2次)
    LCD_RD_CLR;            
    t=DATAIN;    
    LCD_RD_SET;
    LCD_RS_SET;
    LCD_CS_SET;
#else
    LCD_RS=0;
    LCD_CS=0;
    //读取数据(读寄存器时,并不需要读2次)
    LCD_RD=0;
    t=DATAIN;
    LCD_RD=1;
    LCD_CS=1;
#endif  
    GPIOB->CRL=0X33333333; //PB0-7  上拉输出
    GPIOB->CRH=0X33333333; //PB8-15 上拉输出
    GPIOB->ODR=0XFFFF;    //全部输出高
    return t;  
}
    

//***********************写指令
void Write_Dir(u8 Cmd,u16 Data)
{
  LCD_CmdWrite(Cmd);
  LCD_DataWrite(Data);
}


//----------------------------//
void LCD_Reset(void)
{

    RCC->APB2ENR|=1<<3;//先使能外设PORTA时钟
     RCC->APB2ENR|=1<<4;//先使能外设PORTC时钟

    RCC->APB2ENR|=1<<0;    //开启辅助时钟
    JTAG_Set(SWD_ENABLE);  //开启SWD
                                            
    //PORTC5~10复用推挽输出     
    GPIOC->CRH&=0XFFFFF000;
    GPIOC->CRH|=0X00000333;
    GPIOC->CRL&=0X000FFFFF;
    GPIOC->CRL|=0X33300000;  
    GPIOC->ODR|=0X07E0;     
    //PORTA 推挽输出     
    GPIOB->CRH=0X33333333;
    GPIOB->CRL=0X33333333;     
    GPIOB->ODR=0XFFFF;
    LCD_RST = 0; //RA8875 RESET pin
    delay_ms(1);
    LCD_RST = 1;
    delay_ms(10);
}    

void RA8875_PLL_ini(void)
{
  #ifdef P320x240
    LCD_CmdWrite(0x88);    
    LCD_DataWrite(0x0a);
    delay_ms(1);
    LCD_CmdWrite(0x89);
    LCD_DataWrite(0x02);       
    delay_ms(1);
#endif


#ifdef P480x272
    LCD_CmdWrite(0x88);      
    LCD_DataWrite(0x0a);
    delay_ms(1);     
    LCD_CmdWrite(0x89);        
    LCD_DataWrite(0x02);  
    delay_ms(1);
#endif

#ifdef P640x480
    LCD_CmdWrite(0x88);    
    LCD_DataWrite(0x0b);
    delay_ms(1);    
    LCD_CmdWrite(0x89);        
    LCD_DataWrite(0x02);     
    delay_ms(1);
#endif

#ifdef P800x480
    LCD_CmdWrite(0x88);       
    LCD_DataWrite(0x0c);
    delay_ms(1);    
    LCD_CmdWrite(0x89);       
    LCD_DataWrite(0x02);  
    delay_ms(1);
#endif
}    

//------------------------------------------//
void LCD_Initial(void)
{     

    RA8875_PLL_ini();
    LCD_CmdWrite(0x10);  //SYSR   bit[4:3]=00 256 color  bit[2:1]=  00 8bit MPU interface
    //LCD_DataWrite(0x0c);   // if 8bit MCU interface   and 65k color display                              
    LCD_DataWrite(0x0F); // if 16bit MCU interface   and 65k color display  
#ifdef P320x240
//==============    Display Window    320x240 ==================    
    LCD_CmdWrite(0x04);     //set PCLK invers
    LCD_DataWrite(0x81);  
    delay_ms(1);
    
     //Horizontal set
    LCD_CmdWrite(0x14); //HDWR//Horizontal Display Width Setting Bit[6:0]
    LCD_DataWrite(0x27);//Horizontal display width(pixels) = (HDWR + 1)*8   
    LCD_CmdWrite(0x15); //Horizontal Non-Display Period Fine Tuning Option Register (HNDFTR)
    LCD_DataWrite(0x00);//Horizontal Non-Display Period Fine Tuning(HNDFT) [3:0]  
    LCD_CmdWrite(0x16); //HNDR//Horizontal Non-Display Period Bit[4:0]
    LCD_DataWrite(0x03);//Horizontal Non-Display Period (pixels) = (HNDR + 1)*8  
    LCD_CmdWrite(0x17); //HSTR//HSYNC Start Position[4:0]
    LCD_DataWrite(0x02);//HSYNC Start Position(PCLK) = (HSTR + 1)*8
    LCD_CmdWrite(0x18); //HPWR//HSYNC Polarity ,The period width of HSYNC.
    LCD_DataWrite(0x03);//HSYNC Width [4:0]   HSYNC Pulse width(PCLK) = (HPWR + 1)*8
     //Vertical set
    LCD_CmdWrite(0x19); //VDHR0 //Vertical Display Height Bit [7:0]
    LCD_DataWrite(0xef);//Vertical pixels = VDHR + 1
    LCD_CmdWrite(0x1A); //VDHR1 //Vertical Display Height Bit [8]
    LCD_DataWrite(0x00);//Vertical pixels = VDHR + 1
    LCD_CmdWrite(0x1B); //VNDR0 //Vertical Non-Display Period Bit [7:0]
    LCD_DataWrite(0x0f);//Vertical Non-Display area = (VNDR + 1)
    LCD_CmdWrite(0x1C); //VNDR1 //Vertical Non-Display Period Bit [8]
    LCD_DataWrite(0x00);//Vertical Non-Display area = (VNDR + 1)   
    LCD_CmdWrite(0x1D); //VSTR0 //VSYNC Start Position[7:0]
    LCD_DataWrite(0x0e);//VSYNC Start Position(PCLK) = (VSTR + 1)
    LCD_CmdWrite(0x1E); //VSTR1 //VSYNC Start Position[8]
    LCD_DataWrite(0x06);//VSYNC Start Position(PCLK) = (VSTR + 1)
    LCD_CmdWrite(0x1F); //VPWR //VSYNC Polarity ,VSYNC Pulse Width[6:0]
    LCD_DataWrite(0x01);//VSYNC Pulse Width(PCLK) = (VPWR + 1)

  //Active window  set
  //setting active window X
    LCD_CmdWrite(0x30); //Horizontal Start Point 0 of Active Window (HSAW0)
    LCD_DataWrite(0x00); //Horizontal Start Point of Active Window [7:0]
    LCD_CmdWrite(0x31); //Horizontal Start Point 1 of Active Window (HSAW1)       
    LCD_DataWrite(0x00); //Horizontal Start Point of Active Window [9:8]
    LCD_CmdWrite(0x34); //Horizontal End Point 0 of Active Window (HEAW0)
    LCD_DataWrite(0x3F); //Horizontal End Point of Active Window [7:0]
    LCD_CmdWrite(0x35); //Horizontal End Point 1 of Active Window (HEAW1)       
    LCD_DataWrite(0x01); //Horizontal End Point of Active Window [9:8]

   //setting active window Y
    LCD_CmdWrite(0x32); //Vertical Start Point 0 of Active Window (VSAW0)
    LCD_DataWrite(0x00); //Vertical Start Point of Active Window [7:0]
    LCD_CmdWrite(0x33); //Vertical Start Point 1 of Active Window (VSAW1)       
    LCD_DataWrite(0x00); //Vertical Start Point of Active Window [8]
    LCD_CmdWrite(0x36); //Vertical End Point of Active Window 0 (VEAW0)
    LCD_DataWrite(0xef); //Vertical End Point of Active Window [7:0]
    LCD_CmdWrite(0x37); //Vertical End Point of Active Window 1 (VEAW1)       
    LCD_DataWrite(0x00); //Vertical End Point of Active Window [8]

#endif 


文件内容有限,如需更全程序,请来电13701081790或者QQ 453189731 索取