第九讲 单片机驱动彩色液晶屏 控制RA8889软件:显存操作

本文详细介绍了使用STM32F103C6T6单片机通过RA8889驱动彩色液晶屏的技术,包括系统搭建、硬件配置、软件初始化、图形绘制、文字显示、显存操作和视频播放等内容,旨在帮助开发者掌握驱动彩色液晶屏的完整流程。
摘要由CSDN通过智能技术生成

单片机驱动TFT彩色液晶屏系列讲座

目录

第一讲 单片机最小系统STM32F103C6T6通过RA8889驱动彩色液晶屏播放视频
第二讲 单片机最小系统STM32F103C6T6控制RA8889驱动彩色液晶屏硬件框架
第三讲 单片机驱动彩色液晶屏 控制RA8889软件:如何初始化
第四讲 单片机驱动彩色液晶屏 控制RA8889软件:绘图
第五讲 单片机驱动彩色液晶屏 控制RA8889软件:显示文字:Part1.内部字库
第六讲 单片机驱动彩色液晶屏 控制RA8889软件:显示文字:Part2.外接字库
第七讲 单片机驱动彩色液晶屏 控制RA8889软件:显示文字:Part3.自建字库
第八讲 单片机驱动彩色液晶屏 控制RA8889软件:显示图片
第九讲 单片机驱动彩色液晶屏 控制RA8889软件:显存操作
第十讲 单片机驱动彩色液晶屏 控制RA8889软件:图像运算
第十一讲 单片机驱动彩色液晶屏 控制RA8889软件:播放avi视频
第十二讲 单片机驱动彩色液晶屏 如何打包bin档
第十三讲 单片机驱动彩色液晶屏 bin档的烧录方法

RA8889内建128Mb显存;RA8876有两种,一种内建64Mb显存,另一种是外扩自己加SDRAM,内建或者外扩硬件上兼容,可灵活选用。

分辨率与显存的关系

举例来说明比较容易理解,比如800x480的分别率,要求显示16位色深,那么显存要求是:800x480*16/8=768000(Bytes);
如果要求显示的是24位色,那么显存要求是:800x480x24/8=1152000(Bytes)。

RA8889内建128Mb显存,即128/8=16MBytes,用在800x480@16位色,显示缓冲区为:16x1024/768≈21个;用在800x480@24位色,显示缓冲区为:16x1024/1152≈14个。

画布图像宽度、主图像宽度和活动窗口
  • 画布图像宽度(Canvas Image Width),是将显存规划出最大宽度,宽度一般设定为屏宽的倍数。用户必须配置画布图像宽度以确定图像大小,并在将数据写入图像缓冲区之前配置活动窗口(Active_Window)范围。
  • 主图像宽度(Main Image Width),规划出显示缓存宽度,这个值设定和画布图像宽度(Canvas Image Width)一样即可。通过设定Main_Window_Start_XY坐标,定位当前显示窗口要显示哪个区域的图像。
  • 活动窗口(Active_Window),在图层范围内规划一个区域用于写入数据,需要设定坐标和宽、高参数。

下图举例,假设液晶屏宽是800,画布图像宽度和主图宽度均设为1600,显示区域可以任意指定的,活动区域也可以任意指定的。
在这里插入图片描述
主要调用以下API函数:

    Canvas_Image_Start_address(0);    			//**[50h][51h][52h][53h]**//
    Canvas_image_width(canvas_image_width);		//**[54h][55h]**//
    Main_Image_Start_Address(0);				//**[20h][21h][22h][23h]**//
    Main_Image_Width(main_image_width);			//**[24h][25h]**//
    Main_Window_Start_XY(0, 0);    				//**[26h][27h][28h][29h]**//
    Active_Window_XY(0, 0);    					//**[56h][57h][58h][59h]**//
    Active_Window_WH(LCD_Width, LCD_Height);    //**[5Ah][5Bh][5Ch][5Dh]**//
SDRAM的读写

写点函数:

// Write pixel to SDRAM
// Not support MCU_16bit_ColorDepth_24bpp_Mode_1
void putPixel(
    unsigned short x // x of coordinate
    ,
    unsigned short y // y of coordinate
    ,
    unsigned long color
    /*color : 
    8bpp:R3G3B2
    16bpp:R5G6B5
    24bpp:R8G8B8 
    */
)
{
    Goto_Pixel_XY(x, y);
    LCD_CmdWrite(0x04);
    Check_Mem_WR_FIFO_not_Full();

#ifdef MCU_8bit_ColorDepth_8bpp
    LCD_DataWrite(color);
#endif
#ifdef MCU_8bit_ColorDepth_16bpp
    LCD_DataWrite(color);
    Check_Mem_WR_FIFO_not_Full();
    LCD_DataWrite(color >> 8);
#endif
#ifdef MCU_8bit_ColorDepth_24bpp
    LCD_DataWrite(color);
    Check_Mem_WR_FIFO_not_Full();
    LCD_DataWrite(color >> 8);
    Check_Mem_WR_FIFO_not_Full();
    LCD_DataWrite(color >> 16);
#endif
#ifdef MCU_16bit_ColorDepth_16bpp
    LCD_DataWrite(color);
#endif
#ifdef MCU_16bit_ColorDepth_24bpp_Mode_2
    LCD_DataWrite(color);
    Check_Mem_WR_FIFO_not_Full();
    LCD_DataWrite(color >> 16);
#endif
}

读点函数:

// Read pixel from SDRAM
// Not support MCU_16bit_ColorDepth_24bpp_Mode_1
unsigned long ReadPixel(
    unsigned int x // x of coordinate
    ,
    unsigned int y // y of coordinate
    /*color : 
	8bpp:R3G3B2
    16bpp:R5G6B5
    24bpp:R8G8B8 
	*/
)
{
    unsigned long tmp;
    Check_2D_Busy();
    Goto_Pixel_XY(x, y);
    LCD_CmdWrite(0x04);
    LCD_DataRead(); // need a nop before reading data
    Check_Mem_RD_FIFO_not_Empty();

#ifdef MCU_8bit_ColorDepth_8bpp
    tmp = LCD_DataRead();
#endif
#ifdef MCU_8bit_ColorDepth_16bpp
    LCD_DataRead(); // need a nop before reading data
    tmp = LCD_DataRead();
    tmp = tmp << 8;
    tmp += LCD_DataRead();
#endif
#ifdef MCU_8bit_ColorDepth_24bpp
    tmp = LCD_DataRead();
    tmp += LCD_DataRead() << 8;
    tmp += LCD_DataRead() << 16;
#endif
#ifdef MCU_16bit_ColorDepth_16bpp
    LCD_DataRead(); // need a nop before reading data
    tmp = LCD_DataRead();
#endif
#ifdef MCU_16bit_ColorDepth_24bpp_Mode_2
    tmp = LCD_DataRead();
    tmp += LCD_DataRead() << 16;
#endif

    Check_Mem_RD_FIFO_Full();

    return tmp;
}

不同色深定义,数据的存放格式不同,故读写显存时需要根据色深定义区别操作,详细数据格式在此不展开说明,详细请参考RA8889/RA8876的规格书。

第九讲 THE END

了解更多信息:http://www.lcdvision.com.cn

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值