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实现动图显示——篮球少年相关推荐

  1. Android Studio App开发之利用图像解码器ImageDecoder播放GIF动图、Webp、HEIF图片(附源码 简单实用)

    需要源码和图片集请点赞关注收藏后评论区留言~~~ 一.图像解码器ImageDecoder 早期的Android只支持3种图像格式,分别是JPEG,PNG,GIF 虽然这三类图片都能在ImageView ...

  2. 利用51单片机+0.96寸iic接口oled显示图片或动图

    利用51单片机+0.96寸iic接口oled显示图片或动图 前言:之前讲过如何使用oled显示数字以及字符,但并未讲述如何显示BMP格式的图片, 这篇将在之前的基础上加以封装一些函数用来显示图片 硬件 ...

  3. OLED上播放动图的一种笨方法

    声明:本文章纯属学习研究,之所以使用这个素材,一是觉着好玩,二是在这个动图中,人物的动作比较大,这样子效果比较好.没有冒犯他人之意. 再者,文章若有侵权请联系本人进行删除. 工具:硬件:STC8A8K ...

  4. R语言gganimate包创建可视化gif动图、可视化动图:、gganimate包创建动态线型图动画基于transition_time函数、使用geom_point函数显示动画移动的数据点

    R语言gganimate包创建可视化gif动图.可视化动图:.gganimate包创建动态线型图动画基于transition_time函数.使用geom_point函数显示动画移动的数据点 目录

  5. R语言gganimate包创建可视化gif动图:gganimate包创建动态线型图动画基于transition_time函数、使用geom_point函数显示动画移动的数据点、并保留线图中的全部数据点

    R语言gganimate包创建可视化gif动图:gganimate包创建动态线型图动画基于transition_time函数.使用geom_point函数显示动画移动的数据点.并保留线图中的全部数据点 ...

  6. Arduino应用开发——LCD显示GIF动图

    Arduino应用开发--LCD显示GIF动图 目录 Arduino应用开发--LCD显示GIF动图 前言 1 硬件介绍 1.1 硬件配置 1.2 硬件连接 2 开发环境搭建 2.1 安装开发板 2. ...

  7. php多张图片切换效果,怎么把多张图片制作成gif动图 可设置图片切换效果及显示时间...

    小编在微信上跟朋友斗图的时候发现,有些表情包是用很多张图片不断切换制作成的,这种动图是怎么制作出来的呢?要是学会了,可以将自己或者朋友的照片制作成gif动图,想想就很有意思呀!那么在此小编给大家推荐一 ...

  8. Qt实现 QLabel显示文本与图片、动图

    QLabel概念: 在Qt中,QLabel类用于文本或图片(包括动图gif).视频的显示,并不提供用户交互功能, 如果需要交互,比如响应鼠标事件,根据面向对象的里氏替换原则,子类必须能够替换它们的父类 ...

  9. 【Arduino】TFT LCD显示屏显示gif小电视太空人动图(基于Arduino框架ESP8266/ESP32、TFT_eSPI库、使用python脚本GIF转十六进制文件)

    前言 ​ 之前使用ESP32 来控制TFT屏幕显示动图时,找到现有的工具,需要先将动图gif格式一帧帧转为jpg格式,再将一帧帧的jgp转为hex十六进制格式,整个过程好麻烦.现用python写了脚本 ...

最新文章

  1. Openresty最佳案例 | 第9篇:Openresty实现的网关权限控制
  2. JQuery全选/反选设置
  3. sigaction 函数,sigemptyset()函数,fcntl()函数,isatty()函数
  4. 如何编程实现一个基本的微分器
  5. oracle 12c安装psu,Oracle 12C数据库PSU补丁安装方式的变化---新增datapatch
  6. webstorm创建代码模板
  7. SAMSUNG的CMOS 图像传感器技术发展路线
  8. devexpress 创建窗口句柄时出错_MATLAB函数句柄
  9. matlab保存数据用什么指令_Matlab数据处理——数据的保存和读取方法操作
  10. short_open_tag 惹的问题
  11. [2018.07.10 T2]不回文
  12. 单播、组播(目标广播、多播)、广播、泛洪、洪泛介绍与比较
  13. 时钟晶振电路EMC设计标准电路详解
  14. 如何将bmp转化为jpg,bmp转jpg方法
  15. 未能找到路径中的某个部分_未能找到路径“..”的一部分
  16. 经典神经网络论文超详细解读(八)——ResNeXt学习笔记(翻译+精读+代码复现)
  17. Kubernetes-调度、节点亲和反亲和、pod亲和反亲和、Taints污点的处理
  18. 电脑桌面加html格式壁纸,巧妙使用IDM获取精美电脑桌面壁纸
  19. android 浏览器控件
  20. MinIO关闭公开桶的列表展示

热门文章

  1. 十分钟读懂Beam Search(1/2)
  2. 建筑设计中,如何快速获得场地的等高线图?
  3. kaggle 在无网络的环境下安装packages的方法
  4. Thinkphp基本使用知识
  5. 那个,在你颓唐不安的时候一直陪在你身边的我。
  6. 微信开发之移动手机WEB页面(HTML5)Javascript实现一键拨号及短信发送功能
  7. linux 重置系统时间
  8. linux 扩展根目录
  9. CSDN设置插入代码的背景色为黑色 csdn更改背景色、主题
  10. 易用性测试流程和方法