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

这篇具有很好参考价值的文章主要介绍了第九讲 单片机驱动彩色液晶屏 控制RA8889软件:显存操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

单片机驱动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,显示区域可以任意指定的,活动区域也可以任意指定的。
第九讲 单片机驱动彩色液晶屏 控制RA8889软件:显存操作,单片机驱动TFT彩色液晶屏系列讲座,单片机,嵌入式硬件
主要调用以下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文章来源地址https://www.toymoban.com/news/detail-794010.html

到了这里,关于第九讲 单片机驱动彩色液晶屏 控制RA8889软件:显存操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第七讲 单片机驱动彩色液晶屏 控制RA8889软件:显示文字:Part3.自建字库

    目录 第一讲 单片机最小系统STM32F103C6T6通过RA8889驱动彩色液晶屏播放视频 第二讲 单片机最小系统STM32F103C6T6控制RA8889驱动彩色液晶屏硬件框架 第三讲 单片机驱动彩色液晶屏 控制RA8889软件:如何初始化 第四讲 单片机驱动彩色液晶屏 控制RA8889软件:绘图 第五讲 单片机驱动彩色液

    2024年01月21日
    浏览(37)
  • 51单片机LCD1602液晶屏显示方法

    以显示hello,world!    2022.10.17  为例。 首先把LCD1602的模块化程序添加到项目目录中,模块化方法在51单片机之程序模块化_学习笔记吧的博客-CSDN博客这里可以学习。 实验程序: LCD1602.c文件代码: LCD1602.h文件代码: 把这两个代码,分别添加到LCD1602.c 和 LCD1602.h 文件,然后添加

    2023年04月08日
    浏览(35)
  • 51单片机学习笔记-12LCD1602液晶屏

    [toc] 注:笔记主要参考B站江科大自化协教学视频“51单片机入门教程-2020版 程序全程纯手打 从零开始入门”。 注:工程及代码文件放在了本人的Github仓库。 LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字

    2024年02月11日
    浏览(34)
  • 【51单片机系列】proteus中的LCD12864液晶屏

    文章来源:《单片机C语言编程与Proteus仿真技术》。 点阵字符型LCD显示模块只能显示英文字符和简单的汉字,要想显示较为复杂的汉字或图形,就必须采用点阵图型LCD显示模块,比如12864点阵图型LCD显示模块。 12864点阵图型LCD显示模块内部控制器采用KS0108或HD61202。其引脚排列

    2024年01月19日
    浏览(44)
  • 51单片机——LCD1602液晶屏 C语言入门编程

    目录 LCD1602: 数据指令:  字节写入时序: 1. LCD1602:LCD1602液晶上显示字符信息         1602液晶也叫1602字符型液晶,它能显示2行字符信息,每行又能显示16个字符。它是一种专门用来显示字母、数字、符号的点阵型液晶模块。它是由若 干个5x7的点阵字符位组成,每个点

    2024年02月05日
    浏览(34)
  • 51单片机LCD1602液晶屏显示字符,字符串,(有)无符号整数,十六进制数,二进制数等

    LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。液晶显示模块具有体积小、功耗低、显示内容丰富、超薄轻巧等优点,在嵌入式应用系统中得到越来越广泛的应用,这讲中向大家介绍的LCD1602 液晶显示模块(其内部控制器为HD44780 芯片),它可以显示两行,每行16 个字

    2024年02月04日
    浏览(40)
  • 低端单片机彩色屏幕的内存占用疑惑

    问题: 假设320*240的rgb565屏幕,320*240*2=153600,内存已经150K了,而很多低端单片机接口速度虽然勉强能用,但内存只有20K/8K,整屏的显存是绝对放不下的,只刷一部分都占很多内存,低端单片机刷彩屏都是写哪刷哪静态刷新的吗?这种场合比较合适的解决方法是什么?外挂ra

    2024年01月19日
    浏览(35)
  • 单片机开发教程5——51单片机驱动TFT彩屏

    TFT.zip 开发资料中的例程有些瑕疵,上面是整理后的例程,修改了一些参数,也添加了不少函数,函数都有对应的注释,只要花心思去看一应该是能看懂怎么用的。此外,这个例程也可以作为你们工程的模板,往上面添加一些函数、完善一下内容,差不多就能做出一个作品了

    2023年04月23日
    浏览(33)
  • 【单片机】51单片机,TLC2543,驱动程序,读取adc

    TLC2543 是一款 12 位精密模数转换器 (ADC)。 1~9、11、12——AIN0~AIN10为模拟输入端; 15——CS 为片选端; 17——DIN 为串行数据输入端;(控制字输入端,用于选择转换及输出数据格式) 16——DOUT为A/D转换结果的三态串行输出端;(A/D转换结果的输出端。) 19——EOC为转换结束端

    2024年02月14日
    浏览(32)
  • 单片机】51单片机,TLC2543,驱动程序,读取adc

    TLC2543 是一款 12 位精密模数转换器 (ADC)。 1~9、11、12——AIN0~AIN10为模拟输入端; 15——CS 为片选端; 17——DIN 为串行数据输入端;(控制字输入端,用于选择转换及输出数据格式) 16——DOUT为A/D转换结果的三态串行输出端;(A/D转换结果的输出端。) 19——EOC为转换结束端

    2024年02月14日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包