LCD12864实现动画播放

结果展示:

lcd12864实现动画播放


Protues仿真实现lcd12864播放动画


仿真电路图:

实现文字显示,先对文字取模,将文字以像素点的形式保存在程序中

字符取模

        使用PCtoLCD2002完美版软件进行字符取模,采用阴码方式,从上到下取模的方法对“德能并进”四个字进行简单取模。取模操作界面:

 字模软件界面

        字符取模点阵格式设置为阴码,取模方式为列行式,每行数据为16×16,取模走向为逆向:

取码方式

双字符图片取模

双字符图片取模方法与单字符取模类似,只需将模式改为图形模式,图片像素大小为32*32大小,:

双字符图片取模

 全屏图片取模

图片取模使用软件Image2Lcd v4.0,使用其批量转换功能将多个图片数据转换为.c文件存储,软件界面:

图片取模软件界面

在取模之前需要将视频分帧,这里不做讲解;将分好的图片存储在一个文件夹中,在取模软件中打开相应文件夹,点击批量转换即可:

图片批量取模

图片取模的格式为数据水平,字节垂直,去点包含图像头数据选项,点击字节内像素数据反序选项,图片宽度设置为128,高度设置为64:

图片取码方式

将批量取模后的.c文件中的数组全部取出,放入主程序中,由于工作量较大,这里不做推荐使用。最终图片将以数组的形式保存在程序中:

取模结果样例

    上图取模结果中,一次将4个字符按4*8的大小存储在程序定义的数组中,例如“德”字在数组中的取模结果,低8个字节可显示左上部分的字体,分别按此规律,可将整个字体显示在LCD上。


控制部分代码共4317行,具体不做讲解,项目我已经打包好了,需要资源的网盘自取。 

链接:https://pan.baidu.com/s/1v_JCLQ_IIDzBnd6jZAbGDQ?pwd=ckm3 
提取码:ckm3 

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
要在STM32上实现LCD动画效果,需要使用LCD模块的图形加速器(GFX)功能。GFX功能可以加速基于像素的操作,例如填充、画线、绘制矩形、圆形和多边形等等。 下面是一个基本的STM32 LCD动画效果实现步骤: 1. 初始化LCD模块和GFX功能。 2. 使用GFX功能绘制动画图形,例如矩形、圆形、文本等等。 3. 使用延时函数或定时器来控制动画的帧率和速度。 4. 更新图形并重绘LCD屏幕。 以下是一个简单的例子,用于在LCD模块上绘制一个翻滚的立方体动画: 1. 初始化LCD模块和GFX功能。 ```c #include "stm32f4xx_hal.h" #include "stm32f4xx_hal_gpio.h" #include "stm32f4xx_hal_rcc.h" #include "stm32f4xx_hal_dcmi.h" #include "ili9341.h" #include "gfx.h" void LCD_Init(void) { /* 初始化SPI接口 */ /* 初始化LCD模块 */ ili9341_init(); /* 初始化GFX功能 */ gfxInit(); } ``` 2. 绘制动画图形。 ```c void DrawCube(int x, int y, int z, int size) { int half = size / 2; /* 绘制立方体的六个面 */ gfxFillRectangle(x-half, y-half-z, size, size, GFX_RED); gfxFillRectangle(x-half, y+half-z, size, size, GFX_GREEN); gfxFillRectangle(x-half, y-half, size, size, GFX_BLUE); gfxFillRectangle(x+half, y-half, size, size, GFX_YELLOW); gfxFillRectangle(x-half-z, y-half, size, size, GFX_MAGENTA); gfxFillRectangle(x+half-z, y-half, size, size, GFX_CYAN); } ``` 3. 控制动画的帧率和速度。 ```c void Delay(int ms) { HAL_Delay(ms); } void AnimationLoop(void) { int x = 0; int y = 0; int z = 0; int size = 50; int speed = 5; /* 控制动画的帧率和速度 */ while(1) { /* 清空屏幕 */ gfxClear(GFX_BLACK); /* 绘制立方体 */ DrawCube(x, y, z, size); /* 更新立方体位置 */ x += speed; y += speed; z += speed; /* 判断是否需要反向移动 */ if(x > (240 - size/2) || x < size/2) { speed = -speed; } if(y > (320 - size/2) || y < size/2) { speed = -speed; } if(z > (size*2) || z < 0) { speed = -speed; } /* 重绘屏幕 */ gfxFlush(); /* 等待一段时间 */ Delay(100); } } ``` 4. 更新图形并重绘LCD屏幕。 ```c int main(void) { /* 初始化LCD模块 */ LCD_Init(); /* 运行动画 */ AnimationLoop(); while (1) { } } ``` 这个例子只是一个简单的例子,您可以根据需要进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值