0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

第四讲:单片机STC89C52+RA8889驱动控制彩屏 代码移植范例(包含API接口)

harchy 来源:harchy 作者:harchy 2024-06-06 13:59 次阅读

51单片机驱动控制彩屏系列讲座

第四讲:单片机STC89C52+RA8889驱动控制彩屏 代码移植范例(包含API接口

本次介绍单片机STC89C52+RA8889代码移植范例,该范例已将RA8889的API移植好了,下方提供下载地址。

硬件平台:89C52+RA8889 采用SPI通信方式 (已测试通过)
微信图片_20240606135356.jpg

上一讲已经阐述RA8889移植到51单片机的基本方法,本讲增加了API接口函数的移植,将RA8889_API_51.c添加到工程:
RA8889_API_51.png

API接口将底层代码经过二次封装,API代码为开源,用户可以进函数查看具体的操作。

1. 数据直接写显存

void MPU8_8bpp_Memory_Write (unsigned short x,unsigned short y,unsigned short w ,unsigned short h ,const unsigned char *data_array);
void MPU8_16bpp_Memory_Write (unsigned short x,unsigned short y,unsigned short w ,unsigned short h ,const unsigned char *data_array);
void MPU8_24bpp_Memory_Write (unsigned short x,unsigned short y,unsigned short w ,unsigned short h ,const unsigned char *data_array);
void MPU16_16bpp_Memory_Write (unsigned short x,unsigned short y,unsigned short w ,unsigned short h ,const unsigned short *data_array);
void MPU16_24bpp_Mode1_Memory_Write (unsigned short x,unsigned short y,unsigned short w ,unsigned short h ,const unsigned short *data_array);
void MPU16_24bpp_Mode2_Memory_Write (unsigned short x,unsigned short y,unsigned short w ,unsigned short h ,const unsigned short *data_array);

2. PIP画中画开窗口:可以开2个窗口

void PIP(unsigned char On_Off, unsigned char Select_PIP,unsigned long PAddr,unsigned short XP,unsigned short YP,unsigned long ImageWidth,unsigned short X_Dis,unsigned short Y_Dis,unsigned short X_W,unsigned short Y_H);

3. 显示文字:包含RA8889内建ASCII,外接集通字库的显示

void Print_Internal_Font_Hexvariable(unsigned short x,unsigned short y,unsigned short X_W,unsigned short Y_H,unsigned long FontColor,unsigned long BackGroundColor,  unsigned int tmp2);
void Print_Internal_Font_Decimalvariable(unsigned short x,unsigned short y,unsigned short X_W,unsigned short Y_H,unsigned long FontColor,unsigned long BackGroundColor,unsigned int tmp2);
void Print_Internal_Font_String(unsigned short x,unsigned short y,unsigned short X_W,unsigned short Y_H,unsigned long FontColor,unsigned long BackGroundColor, char tmp2[]);
void Print_BIG5String(unsigned char Clk ,unsigned char BUS,unsigned char SCS,unsigned short x ,unsigned short y ,unsigned short X_W ,unsigned short Y_H,unsigned long FontColor,unsigned long BackGroundColor,char *tmp2);
void Print_GB2312String(unsigned char Clk,unsigned char BUS,unsigned char SCS,unsigned short x,unsigned short y,unsigned short X_W,unsigned short Y_H,unsigned long FontColor,unsigned long BackGroundColor,char *tmp2);
void Print_GB12345String(unsigned char Clk,unsigned char BUS,unsigned char SCS,unsigned short x,unsigned short y,unsigned short X_W,unsigned short Y_H,unsigned long FontColor,unsigned long BackGroundColor,char tmp2[]);
void Print_UnicodeString(unsigned char Clk,unsigned char BUS,unsigned char SCS,unsigned short x,unsigned short y,unsigned short X_W,unsigned short Y_H,unsigned long FontColor,unsigned long BackGroundColor,unsigned short *tmp2);
void Select_Font_Height_WxN_HxN_ChromaKey_Alignment(unsigned char Font_Height,unsigned char XxN,unsigned char YxN,unsigned char ChromaKey,unsigned char Alignment);
void Show_String(char *str);

4. 绘图:各种几何图形(硬件实现,高速)

void Draw_Line(unsigned long LineColor,unsigned short X1,unsigned short Y1,unsigned short X2,unsigned short Y2);
void Draw_Triangle(unsigned long ForegroundColor,unsigned short X1,unsigned short Y1,unsigned short X2,unsigned short Y2,unsigned short X3,unsigned short Y3);
void Draw_Triangle_Fill(unsigned long ForegroundColor,unsigned short X1,unsigned short Y1,unsigned short X2,unsigned short Y2,unsigned short X3,unsigned short Y3);
void Draw_Circle(unsigned long ForegroundColor,unsigned short XCenter,unsigned short YCenter,unsigned short R);
void Draw_Circle_Fill(unsigned long ForegroundColor,unsigned short XCenter,unsigned short YCenter,unsigned short R);
void Draw_Ellipse(unsigned long ForegroundColor,unsigned short XCenter,unsigned short YCenter,unsigned short X_R,unsigned short Y_R);
void Draw_Ellipse_Fill(unsigned long ForegroundColor,unsigned short XCenter,unsigned short YCenter,unsigned short X_R,unsigned short Y_R);
void Draw_Left_Up_Curve(unsigned long ForegroundColor,unsigned short XCenter,unsigned short YCenter,unsigned short X_R,unsigned short Y_R);
void Draw_Left_Up_Curve_Fill(unsigned long ForegroundColor,unsigned short XCenter,unsigned short YCenter,unsigned short X_R,unsigned short Y_R);
void Draw_Right_Down_Curve(unsigned long ForegroundColor,unsigned short XCenter,unsigned short YCenter,unsigned short X_R,unsigned short Y_R);
void Draw_Right_Down_Curve_Fill(unsigned long ForegroundColor,unsigned short XCenter,unsigned short YCenter,unsigned short X_R,unsigned short Y_R);
void Draw_Right_Up_Curve(unsigned long ForegroundColor,unsigned short XCenter,unsigned short YCenter,unsigned short X_R,unsigned short Y_R);
void Draw_Right_Up_Curve_Fill(unsigned long ForegroundColor,unsigned short XCenter,unsigned short YCenter,unsigned short X_R,unsigned short Y_R);
void Draw_Left_Down_Curve(unsigned long ForegroundColor,unsigned short XCenter,unsigned short YCenter,unsigned short X_R,unsigned short Y_R);
void Draw_Left_Down_Curve_Fill(unsigned long ForegroundColor,unsigned short XCenter,unsigned short YCenter,unsigned short X_R,unsigned short Y_R);
void Draw_Square(unsigned long ForegroundColor,unsigned short X1,unsigned short Y1,unsigned short X2,unsigned short Y2);
void Draw_Square_Fill(unsigned long ForegroundColor,unsigned short X1,unsigned short Y1,unsigned short X2,unsigned short Y2);
void Draw_Circle_Square(unsigned long ForegroundColor,unsigned short X1,unsigned short Y1,unsigned short X2,unsigned short Y2,unsigned short R,unsigned short Y_R);
void Draw_Circle_Square_Fill(unsigned long ForegroundColor,unsigned short X1,unsigned short Y1,unsigned short X2,unsigned short Y2,unsigned short R,unsigned short Y_R);

5. 内存操作:复制、运算、剔除底色、单色延展彩色、淡入淡出(硬件实现,快速)

void BTE_Memory_Copy(unsigned long S0_Addr,unsigned short S0_W,unsigned short XS0,unsigned short YS0,unsigned long S1_Addr,unsigned short S1_W,unsigned short XS1,unsigned short YS1,unsigned long Des_Addr,unsigned short Des_W, unsigned short XDes,unsigned short YDes,unsigned int ROP_Code,unsigned short X_W,unsigned short Y_H);
void BTE_Memory_Copy_Chroma_key(unsigned long S0_Addr,unsigned short S0_W,unsigned short XS0,unsigned short YS0,unsigned long Des_Addr,unsigned short Des_W, unsigned short XDes,unsigned short YDes,unsigned long Background_color,unsigned short X_W,unsigned short Y_H);
void BTE_MCU_Write_MCU_8bit(unsigned long S1_Addr,unsigned short S1_W,unsigned short XS1,unsigned short YS1,unsigned long Des_Addr,unsigned short Des_W, unsigned short XDes,unsigned short YDes,unsigned int ROP_Code,unsigned short X_W,unsigned short Y_H,const unsigned char *data_array);
void BTE_MCU_Write_MCU_16bit(unsigned long S1_Addr,unsigned short S1_W,unsigned short XS1,unsigned short YS1,unsigned long Des_Addr,unsigned short Des_W, unsigned short XDes,unsigned short YDes,unsigned int ROP_Code,unsigned short X_W,unsigned short Y_H,const unsigned short *data_array);
void BTE_MCU_Write_Chroma_key_MCU_8bit(unsigned long Des_Addr,unsigned short Des_W, unsigned short XDes,unsigned short YDes,unsigned long Background_color,unsigned short X_W,unsigned short Y_H,const unsigned char *data_array);
void BTE_MCU_Write_Chroma_key_MCU_16bit(unsigned long Des_Addr,unsigned short Des_W, unsigned short XDes,unsigned short YDes,unsigned long Background_color,unsigned short X_W,unsigned short Y_H,const unsigned short *data_array);
void BTE_Memory_Copy_ColorExpansion(unsigned long S0_Addr,unsigned short S0_W,unsigned short XS0,unsigned short YS0,unsigned long Des_Addr,unsigned short Des_W, unsigned short XDes,unsigned short YDes,unsigned short X_W,unsigned short Y_H,unsigned long Foreground_color,unsigned long Background_color);
void BTE_Memory_Copy_ColorExpansion_Chroma_key(unsigned long S0_Addr,unsigned short S0_W,unsigned short XS0,unsigned short YS0,unsigned long Des_Addr,unsigned short Des_W, unsigned short XDes,unsigned short YDes,unsigned short X_W,unsigned short Y_H,unsigned long Foreground_color);
void BTE_MCU_Write_ColorExpansion_MCU_8bit(unsigned long Des_Addr,unsigned short Des_W, unsigned short XDes,unsigned short YDes,unsigned short X_W,unsigned short Y_H,unsigned long Foreground_color,unsigned long Background_color,const unsigned char *data_array);
void BTE_MCU_Write_ColorExpansion_MCU_16bit(unsigned long Des_Addr,unsigned short Des_W, unsigned short XDes,unsigned short YDes,unsigned short X_W,unsigned short Y_H,unsigned long Foreground_color,unsigned long Background_color,const unsigned short *data_array);
void BTE_MCU_Write_ColorExpansion_Chroma_key_MCU_8bit(unsigned long Des_Addr,unsigned short Des_W, unsigned short XDes,unsigned short YDes,unsigned short X_W,unsigned short Y_H,unsigned long Foreground_color,const unsigned char *data_array);
void BTE_MCU_Write_ColorExpansion_Chroma_key_MCU_16bit(unsigned long Des_Addr,unsigned short Des_W, unsigned short XDes,unsigned short YDes,unsigned short X_W,unsigned short Y_H,unsigned long Foreground_color,const unsigned short *data_array);
void BTE_Pattern_Fill(unsigned char P_8x8_or_16x16, unsigned long S0_Addr,unsigned short S0_W,unsigned short XS0,unsigned short YS0,unsigned long S1_Addr,unsigned short S1_W,unsigned short XS1,unsigned short YS1,unsigned long Des_Addr,unsigned short Des_W, unsigned short XDes,unsigned short YDes,unsigned int ROP_Code,unsigned short X_W,unsigned short Y_H);
void BTE_Pattern_Fill_With_Chroma_key(unsigned char P_8x8_or_16x16 ,unsigned long S0_Addr,unsigned short S0_W,unsigned short XS0,unsigned short YS0,unsigned long S1_Addr,unsigned short S1_W,unsigned short XS1,unsigned short YS1,unsigned long Des_Addr,unsigned short Des_W, unsigned short XDes,unsigned short YDes,unsigned int ROP_Code,unsigned long Background_color,unsigned short X_W,unsigned short Y_H);
void BTE_Solid_Fill(unsigned long Des_Addr,unsigned short Des_W, unsigned short XDes,unsigned short YDes,unsigned long Foreground_color,unsigned short X_W,unsigned short Y_H);
void BTE_Alpha_Blending_Picture_Mode(unsigned long S0_Addr,unsigned short S0_W,unsigned short XS0,unsigned short YS0,unsigned long S1_Addr,unsigned short S1_W,unsigned short XS1,unsigned short YS1,unsigned long Des_Addr,unsigned short Des_W, unsigned short XDes,unsigned short YDes,unsigned short X_W,unsigned short Y_H,unsigned char alpha);

6. PWM输出:RA8889内建2个PWM发生器,可用于调整背光亮度等

void PWM0(unsigned char on_off, unsigned char Clock_Divided, unsigned char Prescalar, unsigned short Count_Buffer,unsigned short Compare_Buffer);
void PWM1(unsigned char on_off, unsigned char Clock_Divided, unsigned char Prescalar, unsigned short Count_Buffer,unsigned short Compare_Buffer);

7. DMA功能,快速显示图片(JPG,BMP),播放AVI影片

void DMA_24bit(unsigned char Clk ,unsigned short X1,unsigned short Y1,unsigned short X_W,unsigned short Y_H ,unsigned short P_W ,unsigned long Addr);
void DMA_32bit(unsigned char Clk ,unsigned short X1,unsigned short Y1,unsigned short X_W,unsigned short Y_H ,unsigned short P_W,unsigned long Addr);
void switch_24bits_to_32bits(unsigned char BUS,unsigned char SCS);

void SPI_NOR_Flash_switch_QUAD_MODE(unsigned char BUS,unsigned char SCS,unsigned char flash);
void SPI_NOR_initial_DMA (unsigned char mode,unsigned char BUS,unsigned char SCS,unsigned char flash,unsigned char addr_24b_32b);
void SPI_NOR_initial_JPG_AVI (unsigned char flash,unsigned char addr_24b_32b,unsigned char BUS,unsigned char SCS,unsigned char SCK_Divide);
void SPI_NOR_DMA_png (unsigned long dma_page_addr,unsigned long pic_buffer_Layer,unsigned long Show_pic_Layer,unsigned int picture_Width,unsigned int picture_Height);

void JPG_NOR (unsigned long addr,unsigned long JPGsize,unsigned long IDEC_canvas_width,unsigned short x,unsigned short y);
void AVI_NOR(unsigned long addr,unsigned long videosize,unsigned long shadow_buffer_addr,unsigned long PIP_buffer_addr,unsigned long x,unsigned long y,unsigned long height,unsigned long width,unsigned long PIP_width);

void BTE_alpha_blending_32bit_Pixel_mode(unsigned int picture_Width,unsigned int BTE_X,unsigned int BTE_Y,unsigned long S0X,unsigned long S0Y,unsigned long S0_Start_Addr,unsigned long S0_canvas_width,unsigned long desX,unsigned long desY,unsigned long DES_Start_Addr,unsigned long DES_canvas_width,unsigned long pic_buffer_Layer);
void BTE_alpha_blending_24bit_Pixel_mode(unsigned long S0_Addr,unsigned short S0_W,unsigned short XS0,unsigned short YS0,unsigned long S1_Addr,unsigned short S1_W,unsigned short XS1,unsigned short YS1,unsigned long Des_Addr,unsigned short Des_W, unsigned short XDes,unsigned short YDes,unsigned short X_W,unsigned short Y_H);


void AVI_window(unsigned char ON_OFF);

由于89C52的RAM较小,许多API会占用较多资源,因此可能跑不开,故先演示以下三个常用的功能:

Introduction();                               //文字介绍
Geometry_Demo();                        //几何绘图演示
Show_JPG();                                 //调用FLASH的JPG图片显示

演示视频
演示min.gif

移植参考代码:
*附件:STC89C52_RA8889_SPI4_v1.1.zip

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6023

    文章

    44388

    浏览量

    628952
  • 接口
    +关注

    关注

    33

    文章

    8279

    浏览量

    150050
  • API
    API
    +关注

    关注

    2

    文章

    1461

    浏览量

    61531
  • 驱动控制
    +关注

    关注

    0

    文章

    117

    浏览量

    15713
  • 代码移植
    +关注

    关注

    0

    文章

    6

    浏览量

    6874
收藏 人收藏

    评论

    相关推荐

    第五:51单片机+RA8889驱动控制彩屏 完整源码说明 【 源码v1.2 】

    51单片机驱动控制彩屏系列讲座 硬件:STC89C52 + RA8889开发板 + TFT
    发表于 06-13 17:23

    51单片机STC8H8K64U通过RA8889/RA8876如何控制彩屏(SPI源码下载)

    /RA8876控制芯片刚好可以完美搭配用于工控、医疗等各个领域。我们这样接线就可以了: 二、SPI-4连接电路图: RA8889单片机接口
    发表于 06-26 14:13

    51单片机(STC8051U34K64)_RA8889_SPI4参考代码(v1.3)

    文章导引: (1)51单片机(STC8051U34K64)_RA8889_SPI4参考代码(v1.3) (2)51单片机
    发表于 07-05 10:55

    51单片机(STC8H8K64U/STC8051U34K64)_RA8889_HW_SPI4参考代码(v1.3) 硬件SPI方式驱动大屏显示

    文章导引: (1)51单片机(STC8051U34K64)_RA8889_SPI4参考代码(v1.3) (2)51单片机
    发表于 07-17 11:15

    单片机驱动彩屏最简方案:单片机_RA8889最小开发板驱动控制TFT彩屏介绍(一)

    本文介绍使用单片机+RA8889驱动控制彩屏的最小方案。文章从RA8889的架构功能、硬件电
    发表于 08-22 17:31

    基于STC89C52单片机控制的温度控制系统课程设计

    基于STC89C52单片机控制的温度控制系统
    发表于 01-06 17:00 152次下载

    单片机STC89C52程序

    单片机STC89C52源程序。
    发表于 01-11 18:16 110次下载

    STC89C52单片机介绍

    STC89C52单片机介绍。
    发表于 05-20 13:55 257次下载

    基于STC89C52单片机控制系统设计

    本文主要介绍了基于STC89C52单片机控制系统设计。
    发表于 06-24 08:00 112次下载
    基于<b class='flag-5'>STC89C52</b><b class='flag-5'>单片机</b>的<b class='flag-5'>控制</b>系统设计

    STC89C52单片机内部EEPROM驱动的使用源代码免费下载

    本文档的主要内容详细介绍的是STC89C52单片机内部EEPROM驱动的使用源代码免费下载。
    发表于 09-11 17:23 4次下载
    <b class='flag-5'>STC89C52</b><b class='flag-5'>单片机</b>内部EEPROM<b class='flag-5'>驱动</b>的使用源<b class='flag-5'>代码</b>免费下载

    基于单片机STC89C52控制的智能小车简介

    基于单片机STC89C52控制的智能小车简介(单片机原理图)-该文档为基于单片机STC89C52
    发表于 07-22 14:21 68次下载
    基于<b class='flag-5'>单片机</b><b class='flag-5'>STC89C52</b><b class='flag-5'>控制</b>的智能小车简介

    STC89C52单片机器件手册

    STC89C52系列单片机的内部结构框图如下图所示。STC89C52单片机包含中央处理器(CPU)、程序存储器(Flash)、数据存储器(
    发表于 09-05 10:41 8次下载

    第一单片机STC89C52+RA8889驱动控制彩屏 极简方案(源码公开)

    本章介绍如何使用51单片机驱动控制彩屏控制器彩用瑞佑的RA8889,通信方式采用SPI-4线
    的头像 发表于 06-04 08:45 409次阅读
    第一<b class='flag-5'>讲</b>:<b class='flag-5'>单片机</b><b class='flag-5'>STC89C52+RA8889</b><b class='flag-5'>驱动</b><b class='flag-5'>控制</b><b class='flag-5'>彩屏</b> 极简方案(源码公开)

    第二单片机STC89C52+RA8889驱动控制彩屏 代码移植介绍

    介绍51单片机如何移植RA8889代码进行彩屏驱动控制
    的头像 发表于 06-04 10:36 627次阅读
    第二<b class='flag-5'>讲</b>:<b class='flag-5'>单片机</b><b class='flag-5'>STC89C52+RA8889</b><b class='flag-5'>驱动</b><b class='flag-5'>控制</b><b class='flag-5'>彩屏</b> <b class='flag-5'>代码</b><b class='flag-5'>移植</b>介绍

    第三单片机STC89C52+RA8889驱动控制彩屏 代码的压缩(Keil编译器)

    51单片机驱动控制芯片RA8889,源代码函数冗余较多,移植时可能会碰到输出程序过大,这里介绍压
    的头像 发表于 06-05 11:05 345次阅读
    第三<b class='flag-5'>讲</b>:<b class='flag-5'>单片机</b><b class='flag-5'>STC89C52+RA8889</b><b class='flag-5'>驱动</b><b class='flag-5'>控制</b><b class='flag-5'>彩屏</b> <b class='flag-5'>代码</b>的压缩(Keil编译器)