Oled实现动图显示——篮球少年
Oled实现动图显示——篮球少年
Oled显示模块,用char定义清除界面会导致画面屏雪花;如果用char i,j;有符号,表示从-128——127,会导致某些数被吞掉,用int或者unsigned char(表示无符号)
设备:51开发板和0.96寸4针Oled 显示模块。
动图显示说白了就是把GIF图分离成一帧一帧的图片显示一张图片和显示一张图片差不多。
第一步:提取分离图片推荐用Gifsplitter
第二步:降低画质,图片改为是bmp格式,大小调成128×64(可以在软件内部调也可以用Windows画图应用调)具体如下:
第三步:对图片取模(最繁琐的一步,哪里有一键取模软件迫切希望告知)我这里用的是CopyLeft Bu Horse2000,建议使用PCtolCD
取模完成把数组添加到其中具体代码如下:
#include "reg52.h"
#include "intrins.h"sbit scl = P0^1;
sbit sda = P0^3;void IIC_Start()
{scl = 0;sda = 1;scl = 1;_nop_();sda = 0;_nop_();
}void IIC_Stop()
{scl = 0;sda = 0;scl = 1;_nop_();sda = 1;_nop_();
}char IIC_ACK()
{char flag;sda = 1;//就在时钟脉冲9期间释放数据线_nop_();scl = 1;_nop_();flag = sda;_nop_();scl = 0;_nop_();return flag;
}void IIC_Send_Byte(char dataSend)
{int i;for(i = 0; i<8; i++) {scl = 0;//scl拉低,让sda做好数据准备sda = dataSend & 0x80;//1000 0000获得dataSend的最高位,给sda_nop_();//发送数据建立时间scl = 1;//scl拉高开始发送_nop_();//数据发送时间scl = 0;//发送完毕拉低_nop_();//dataSend = dataSend << 1;}
}void Oled_Write_Cmd(char dataCmd)
{// 1. start()IIC_Start();//// 2. 写入从机地址 b0111 1000 0x78IIC_Send_Byte(0x78);// 3. ACKIIC_ACK();// 4. cotrol byte: (0)(0)000000 写入命令 (0)(1)000000写入数据IIC_Send_Byte(0x00);// 5. ACKIIC_ACK();//6. 写入指令/数据IIC_Send_Byte(dataCmd);//7. ACKIIC_ACK();//8. STOPIIC_Stop();
}void Oled_Write_Data(char dataData)
{// 1. start()IIC_Start();//// 2. 写入从机地址 b0111 1000 0x78IIC_Send_Byte(0x78);// 3. ACKIIC_ACK();// 4. cotrol byte: (0)(0)000000 写入命令 (0)(1)000000写入数据IIC_Send_Byte(0x40);// 5. ACKIIC_ACK();///6. 写入指令/数据IIC_Send_Byte(dataData);//7. ACKIIC_ACK();//8. STOPIIC_Stop();
}void Oled_Init(void) {Oled_Write_Cmd(0xAE);//--display offOled_Write_Cmd(0x00);//---set low column addressOled_Write_Cmd(0x10);//---set high column addressOled_Write_Cmd(0x40);//--set start line addressOled_Write_Cmd(0xB0);//--set page addressOled_Write_Cmd(0x81); // contract controlOled_Write_Cmd(0xFF);//--128Oled_Write_Cmd(0xA1);//set segment remapOled_Write_Cmd(0xA6);//--normal / reverseOled_Write_Cmd(0xA8);//--set multiplex ratio(1 to 64)Oled_Write_Cmd(0x3F);//--1/32 dutyOled_Write_Cmd(0xC8);//Com scan directionOled_Write_Cmd(0xD3);//-set display offsetOled_Write_Cmd(0x00);//Oled_Write_Cmd(0xD5);//set osc divisionOled_Write_Cmd(0x80);//Oled_Write_Cmd(0xD8);//set area color mode offOled_Write_Cmd(0x05);//Oled_Write_Cmd(0xD9);//Set Pre-Charge PeriodOled_Write_Cmd(0xF1);//Oled_Write_Cmd(0xDA);//set com pin configuartionOled_Write_Cmd(0x12);//Oled_Write_Cmd(0xDB);//set VcomhOled_Write_Cmd(0x30);//Oled_Write_Cmd(0x8D);//set charge pump enableOled_Write_Cmd(0x14);//Oled_Write_Cmd(0xAF);//--turn on oled panel
}void Oled_Clear(void) {int i,j;Oled_Write_Cmd (0x20); //set memory addressing modeOled_Write_Cmd (0x02); //page addressing modefor(i=0; i<8; i++) {Oled_Write_Cmd(0xB0+i); //ÉèÖÃÒ³µØÖ·£¨0~7£©Oled_Write_Cmd(0x00); //ÉèÖÃÏÔʾλÖáªÁе͵ØÖ·Oled_Write_Cmd(0x10); //ÉèÖÃÏÔʾλÖáªÁиߵØÖ·for(j=0; j<128; j++) {Oled_Write_Data(0);}}
}void Oled_Show_Image(unsigned char *image) {unsigned char i;unsigned int j;for(i=0; i<8; i++) {Oled_Write_Cmd(0xB0+i); //page0 ——page7Oled_Write_Cmd(0x00); //每个page从第0列开始Oled_Write_Cmd(0x10);for(j=128*i; j<128*(i+1); j++) {Oled_Write_Data(image[j]);}}
}
void main()
{//1. OLED初始化Oled_Init();//2. 选择一个位置//2.1 确认页寻址模式Oled_Write_Cmd(0x20);Oled_Write_Cmd(0x02);Oled_Clear();//Oled_Show_Image(bmpImager);while(1) {//取模代码太多就不写出来了Oled_Show_Image(bmpImager41);_nop_();Oled_Show_Image(bmpImager42);_nop_();Oled_Show_Image(bmpImager43);_nop_();Oled_Show_Image(bmpImager44);_nop_();Oled_Show_Image(bmpImager45);_nop_();Oled_Show_Image(bmpImager46);_nop_();}}
这个代码会使Oled显示帧率有点问题,应该是延时函数过多,代码冗余或是其他问题,欢迎交流解决。
效果演示
学习
Oled实现动图显示——篮球少年相关推荐
- Android Studio App开发之利用图像解码器ImageDecoder播放GIF动图、Webp、HEIF图片(附源码 简单实用)
需要源码和图片集请点赞关注收藏后评论区留言~~~ 一.图像解码器ImageDecoder 早期的Android只支持3种图像格式,分别是JPEG,PNG,GIF 虽然这三类图片都能在ImageView ...
- 利用51单片机+0.96寸iic接口oled显示图片或动图
利用51单片机+0.96寸iic接口oled显示图片或动图 前言:之前讲过如何使用oled显示数字以及字符,但并未讲述如何显示BMP格式的图片, 这篇将在之前的基础上加以封装一些函数用来显示图片 硬件 ...
- OLED上播放动图的一种笨方法
声明:本文章纯属学习研究,之所以使用这个素材,一是觉着好玩,二是在这个动图中,人物的动作比较大,这样子效果比较好.没有冒犯他人之意. 再者,文章若有侵权请联系本人进行删除. 工具:硬件:STC8A8K ...
- R语言gganimate包创建可视化gif动图、可视化动图:、gganimate包创建动态线型图动画基于transition_time函数、使用geom_point函数显示动画移动的数据点
R语言gganimate包创建可视化gif动图.可视化动图:.gganimate包创建动态线型图动画基于transition_time函数.使用geom_point函数显示动画移动的数据点 目录
- R语言gganimate包创建可视化gif动图:gganimate包创建动态线型图动画基于transition_time函数、使用geom_point函数显示动画移动的数据点、并保留线图中的全部数据点
R语言gganimate包创建可视化gif动图:gganimate包创建动态线型图动画基于transition_time函数.使用geom_point函数显示动画移动的数据点.并保留线图中的全部数据点 ...
- Arduino应用开发——LCD显示GIF动图
Arduino应用开发--LCD显示GIF动图 目录 Arduino应用开发--LCD显示GIF动图 前言 1 硬件介绍 1.1 硬件配置 1.2 硬件连接 2 开发环境搭建 2.1 安装开发板 2. ...
- php多张图片切换效果,怎么把多张图片制作成gif动图 可设置图片切换效果及显示时间...
小编在微信上跟朋友斗图的时候发现,有些表情包是用很多张图片不断切换制作成的,这种动图是怎么制作出来的呢?要是学会了,可以将自己或者朋友的照片制作成gif动图,想想就很有意思呀!那么在此小编给大家推荐一 ...
- Qt实现 QLabel显示文本与图片、动图
QLabel概念: 在Qt中,QLabel类用于文本或图片(包括动图gif).视频的显示,并不提供用户交互功能, 如果需要交互,比如响应鼠标事件,根据面向对象的里氏替换原则,子类必须能够替换它们的父类 ...
- 【Arduino】TFT LCD显示屏显示gif小电视太空人动图(基于Arduino框架ESP8266/ESP32、TFT_eSPI库、使用python脚本GIF转十六进制文件)
前言 之前使用ESP32 来控制TFT屏幕显示动图时,找到现有的工具,需要先将动图gif格式一帧帧转为jpg格式,再将一帧帧的jgp转为hex十六进制格式,整个过程好麻烦.现用python写了脚本 ...
最新文章
- Openresty最佳案例 | 第9篇:Openresty实现的网关权限控制
- JQuery全选/反选设置
- sigaction 函数,sigemptyset()函数,fcntl()函数,isatty()函数
- 如何编程实现一个基本的微分器
- oracle 12c安装psu,Oracle 12C数据库PSU补丁安装方式的变化---新增datapatch
- webstorm创建代码模板
- SAMSUNG的CMOS 图像传感器技术发展路线
- devexpress 创建窗口句柄时出错_MATLAB函数句柄
- matlab保存数据用什么指令_Matlab数据处理——数据的保存和读取方法操作
- short_open_tag 惹的问题
- [2018.07.10 T2]不回文
- 单播、组播(目标广播、多播)、广播、泛洪、洪泛介绍与比较
- 时钟晶振电路EMC设计标准电路详解
- 如何将bmp转化为jpg,bmp转jpg方法
- 未能找到路径中的某个部分_未能找到路径“..”的一部分
- 经典神经网络论文超详细解读(八)——ResNeXt学习笔记(翻译+精读+代码复现)
- Kubernetes-调度、节点亲和反亲和、pod亲和反亲和、Taints污点的处理
- 电脑桌面加html格式壁纸,巧妙使用IDM获取精美电脑桌面壁纸
- android 浏览器控件
- MinIO关闭公开桶的列表展示