STM32F103C8T6驱动0.96OLED实现动态图片教学(静态原神和动态坤坤动画)

前言:

        编者第一想法是做一个原神的登陆界面的动态图片,但奈何找不到与之对应的GIF图片(如读者有这张GIF动图请务必联系我),只能做了一张原神标题的静态图片和坤坤的经典动图,这其中更繁琐的是一张一张的取模,制作不易还请大家点赞+收藏+关注后再进行学习。

一、效果图

静态图:原神

动态图:坤坤起舞

df67f16466d85539487e963c3f9f4e04

二、制作过程

1.先去网上找一张自己心仪的GIF图片,时间不宜过长,否则会撑爆你的单片机。编者找的坤坤用软件i_view64把GIF图片提取拆分成逐帧的形式。

然后你就能得到每一帧的坤坤了。

这其中会有一些照片帧率和其他的照片明显不一样,一定要把每一帧的照片都过一遍,把尺寸和大众不同的都给删去,最后保留30张(连一起能完成整套的动作即可)!切记不可多留

2.再打开i_view64软件,把每一张坤坤的彩色照片转格式成为对应OLED尺寸的黑白坤

打开逐帧拆分的坤坤这一文件夹格式要转成BMP的,切记!

迎面走来的正是你帅气的坤哥,然后在左上角处找到文件(F)这一选项,单击打开出现很多选项,点击批量转换/重命名。

按图中步骤进行操作

按图中所示进行勾选,然后点击确定保存自己的选择。

确定好自己的保存地址,不要和动图掺杂一起了。

点击开始即可完成转换,找到对应的文件夹

此时已经得到了极具特征并且有些可爱的黑白坤。

3.打开取模软件

设置成如图所示模样,在软件最上方的工具栏中的模式中选择图形模式,按图示进行设置,一定要把行前缀和行后缀给删掉。

打开我们的黑白坤文件

点击生成字模即可得到如图所示的字模数组,把得到的数组储存到字模的.H文件中即可,重复上述操作得到每一帧坤坤图片对应的数组。这个过程是枯燥且无味的。注意:数组应是所有图片转后的的长度都一样,如有不一样的图片应立即舍去不用,否则会造成程序错误!

三、代码制作

main.c

//	 
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//测试硬件:单片机STM32F103C8T6,晶振72M  单片机工作电压3.3V或5V
//作者:肆伍
//技术交流QQ群:821417708
//群中有完整资料免费开源
//创建日期:2024/1/16
//版本:V1.0
//版权所有,盗版必究。
#include "stm32f10x.h"
#include "delay.h"
#include "oled.h"
#include "smg.h"
//static int msec,num;
extern unsigned char Yuanshen[];
extern unsigned char Yuan[][472];
extern unsigned char kun[][384];
void System_Init(void)//关闭所有外设,也可以拔出跳冒使外设无效
{
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE); //使能GPIOG的时钟
		GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
		//关闭JTAG 释放出PB3,PB4,PA15
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;	//推挽输出
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //高速GPIO
    GPIO_Init(GPIOC,&GPIO_InitStructure);						//初始化PC13
	
		GPIO_InitStructure.GPIO_Pin=GPIO_Pin_15;
		GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//输出
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //高速GPIO
	  GPIO_Init(GPIOA,&GPIO_InitStructure);
	
		GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_12;
	  GPIO_Init(GPIOB,&GPIO_InitStructure);						//初始化PB0、1、12
	
		GPIO_SetBits(GPIOB,GPIO_Pin_1);								//关闭蜂鸣器
		GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_12);			//点亮LED灯
		GPIO_ResetBits(GPIOC,GPIO_Pin_13);								//点亮LED灯
		GPIO_ResetBits(GPIOA,GPIO_Pin_15);								//点亮LED灯
}
int main(void)
{
	delay_init();
	HC595D_Init();
	System_Init();
	OLED_Init();
	OLED_Clear(0);
	while(1)
	{
//		OLED_DrawGIF(35,0,94,7,6,472,Yuan);
		OLED_DrawGIF(32,1,96,7,48,384,kun);
//		OLED_DrawBMP(13,0,115,7,Yuanshen);
	}
}

完整代码和制作过程中的各种工具后续我会打包放在下载链接中,如有需要可自行下载,也可在评论区留言或者直接私信我。

文章若有侵权请及时联系,看到后必会及时处理!

文章编写不易还请各位读者多多点赞收藏和关注,后续我会为大家推出更多的优质项目。

下载链接:https://download.csdn.net/download/weixin_66429380/88762969

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值