51+OLED之IIC手撕爱坤 (128*64自绘坤图 开源)

恍惚间仿佛听到了先生当年的成名美曲,不禁感叹,至此撸码一篇,以表怀念!

成品效果:

开始:伸手摸到角落里的SSD1306_OLED,鬼脑一开  start:

1.因SSD1306_OLED模块支持IIC协议,想要完成坤坤显示则需要据IIC时序封装函数,方便调用;

//封装这些函数作用:根据时序图,通过单片机控制sda scl高低电平以及持续时间,
//让模块判断到各种信号;进行:开始/结束/应答/数据发送 等操作
sbit sda=P3^0;
sbit scl=P3^1;

void IICstart()
{
	scl = 0; //先让为低电平避免读取杂乱数据,导致花屏;开始看可以忽略这一句;
	scl = 1;
	sda = 1;
	_nop_();//115200mhz 空函数需要大概5us;
	sda = 0;
	_nop_();
}

void IICend()
{
	scl = 0;//先让为低电平避免读取杂乱数据,导致花屏;开始看可以忽略这一句;
	scl = 1;
	sda = 0;
	_nop_();
	sda = 1;
	_nop_();
}

char ACKcheck () //应答位判断
{
	char flag;
	sda = 1;
	_nop_();
	scl = 1;
	_nop_();
	flag = sda;
	_nop_();
	scl = 0;
	_nop_();
	return flag;	
}

//发送1字节
void IIC_Send_Byte(char sendByte)
{
	int i;
	for(i=0;i<8;i++){
		scl = 0;
		sda = sendByte & 0x80;
		_nop_();		
		scl = 1;
		_nop_();
		scl = 0;
		_nop_();
		
		sendByte <<= 1;
	}	
}

2.显示分辨率为128*64,真爱粉自绘;通过字模提取软件,获取点阵;


code unsigned char bmp_kunkun[] = 
{
	/*--  调入了一幅图像:\ikun666.bmp  --*/
	/*--  宽度x高度=128x64  --*/
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x3F,0x3F,0x1F,0x1F,
	0x0F,0x0F,0x1F,0x1F,0x1F,0x3F,0x3F,0x3F,0x1F,0x1F,0x07,0x07,0x07,0x07,0x07,0x07,
	0x0F,0x0F,0x1F,0x3F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0x7F,0x3F,0x3F,0x1F,0x07,0x07,0x07,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0F,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x9F,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE1,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0x7F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
	0x80,0x80,0x80,0x00,0x30,0x37,0x2F,0xDF,0x3F,0xFF,0x3F,0xCF,0xEF,0xF7,0x36,0x30,
	0x20,0xC0,0x20,0xE0,0x80,0x00,0x00,0x00,0x80,0x80,0xF3,0xFF,0xFF,0xFF,0xFF,0x07,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0xE1,0xFC,0xFF,0xFF,0x7F,0xBF,0x9F,0xDF,0xEF,
	0xF7,0xFB,0xFC,0xFE,0xFF,0xDF,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x83,0x83,0x7F,
	0xFF,0xFF,0xFF,0x0F,0xE7,0xF3,0xFB,0xE7,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,
	0x7F,0xFF,0xFE,0xFE,0xF8,0xF0,0x80,0x38,0xFF,0xFF,0xFF,0x9C,0x6C,0xF4,0xF6,0xF6,
	0x69,0x9B,0xF7,0x16,0x66,0x76,0x72,0x79,0x7A,0x7B,0x7A,0x79,0x73,0x77,0x66,0x56,
	0x1A,0x69,0xF6,0xF7,0x67,0x0F,0xC0,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFD,0xFC,0xF9,0xF3,0xF7,0xEF,0xCF,
	0xDF,0xBF,0x3F,0x1F,0xFF,0xFF,0xF8,0x87,0x3F,0x1F,0xCF,0xF3,0xFC,0xFF,0xFF,0x80,
	0x3F,0x3F,0xFF,0xE0,0xC7,0xFF,0xFF,0xFF,0xFF,0xF0,0x07,0x7F,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0x3F,0xDF,0xE7,0xFB,0xFB,0xFD,0xF8,0xF6,0xEE,0xDF,0xDF,0xBF,0xBF,0xBF,0x7F,
	0x7F,0x7E,0x7E,0xFE,0xFD,0xFB,0xFB,0x37,0x06,0x01,0x03,0x0F,0x0F,0x0E,0x0E,0x06,
	0x07,0x07,0x07,0x06,0x05,0x0B,0x0B,0x17,0x17,0x17,0x17,0x17,0x1B,0x1B,0x3D,0x3E,
	0x1F,0x0F,0x26,0x32,0x78,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0xC7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0x80,0x7D,0xFD,0xFD,0xFD,0xFD,0x7D,0x7D,0x7B,0xFB,0xFB,0xF7,0xF7,0xF7,0xEF,0xEF,
	0xDF,0xDF,0xDF,0xBE,0xBE,0x3E,0x00,0x00,0x00,0x20,0xC0,0xC0,0x80,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,
	0xC0,0xE0,0x70,0x30,0x20,0x07,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFE,0xF9,0xF5,0xEE,0xEE,0xDF,0xBF,0xBF,0xBE,0x7E,0x7D,0x7B,0x7B,0x77,0x6F,
	0x6F,0x9F,0xBF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x07,0x3F,0xF1,0x03,
	0x03,0x02,0x02,0x02,0xC2,0xC6,0xFE,0xC6,0xC2,0x02,0x02,0x02,0x01,0xF1,0xFF,0x1F,
	0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
};

3.分析SSD1306_OLED模块手册,通过51完成需求;

完整代码:

#include "reg52.h"
#include <intrins.h>  //解决_nop_ 报错问题;

sbit sda=P3^0;
sbit scl=P3^1;



void IICstart()
{
	scl = 0; //先让为低电平避免读取杂乱数据,导致花屏;
	scl = 1;
	sda = 1;
	_nop_();//115200mhz 空函数需要大概5us;
	sda = 0;
	_nop_();
}

void IICend()
{
	scl = 0;//先让为低电平避免读取杂乱数据,导致花屏;
	scl = 1;
	sda = 0;
	_nop_();
	sda = 1;
	_nop_();

}

char ACKcheck () //应答位判断
{
	char flag;
	sda = 1;
	_nop_();
	scl = 1;
	_nop_();
	flag = sda;
	_nop_();
	scl = 0;
	_nop_();

	return flag;	
}

void IIC_Send_Byte(char sendByte)
{
	int i;
	for(i=0;i<8;i++){
		scl = 0;
		sda = sendByte & 0x80;
		_nop_();		
		scl = 1;
		_nop_();
		scl = 0;
		_nop_();
		
		sendByte <<= 1;
	}	
}

void Oled_Write_Cmd(char datacmd)
{		
	//1. start()
	IICstart();
	//2. 写入从机地址 b0111 100(0)最后一位表示写入模式  /   0x78 
	IIC_Send_Byte(0x78);
	//3. ACK
	ACKcheck();
	//4. cotrol byte: (0)(0)000000 写入命令  /  (0)(1)000000 写入数据
	IIC_Send_Byte(0x00); //写入命令
	//5. ACK
	ACKcheck();
	//6. 写入指令/数据
	IIC_Send_Byte(datacmd);
	//7. ACK
	ACKcheck();
	//8. STOP
	IICend();
}

void write_data(char dataData)
{		
	//1. start()
	IICstart();
	//2. 写入从机地址 b0111 100(0)最后一位表示写入模式  /   0x78 
	IIC_Send_Byte(0x78);
	//3. ACK
	ACKcheck();
	//4. cotrol byte: (0)(1)000000 写入数据
	IIC_Send_Byte(0x40); //写入数据
	//5. ACK
	ACKcheck();
	//6. 写入数据
	IIC_Send_Byte(dataData);
	//7. ACK
	ACKcheck();
	//8. STOP
	IICend();
}

void initOled()
{
	Oled_Write_Cmd(0xAE);//--display off
	Oled_Write_Cmd(0x00);//---set low column address
	Oled_Write_Cmd(0x10);//---set high column address
	Oled_Write_Cmd(0x40);//--set start line address
	Oled_Write_Cmd(0xB0);//--set page address
	Oled_Write_Cmd(0x81); // contract control
	Oled_Write_Cmd(0xFF);//--128
	Oled_Write_Cmd(0xA1);//set segment remap
	Oled_Write_Cmd(0xA6);//--normal / reverse
	Oled_Write_Cmd(0xA8);//--set multiplex ratio(1 to 64)
	Oled_Write_Cmd(0x3F);//--1/32 duty
	Oled_Write_Cmd(0xC8);//Com scan direction
	Oled_Write_Cmd(0xD3);//-set display offset
	Oled_Write_Cmd(0x00);//
	Oled_Write_Cmd(0xD5);//set osc division
	Oled_Write_Cmd(0x80);//
	Oled_Write_Cmd(0xD8);//set area color mode off
	Oled_Write_Cmd(0x05);//
	Oled_Write_Cmd(0xD9);//Set Pre-Charge Period
	Oled_Write_Cmd(0xF1);//
	Oled_Write_Cmd(0xDA);//set com pin configuartion
	Oled_Write_Cmd(0x12);//
	Oled_Write_Cmd(0xDB);//set Vcomh
	Oled_Write_Cmd(0x30);//
	Oled_Write_Cmd(0x8D);//set charge pump enable
	Oled_Write_Cmd(0x14);//
	Oled_Write_Cmd(0xAF);//--turn on oled panel
}

void clearOled()
{
	unsigned char i,j;
	for(i=0;i<8;i++){
		Oled_Write_Cmd(0xB0+i);
		Oled_Write_Cmd(0x00);
		Oled_Write_Cmd(0x10);
		for(j=0;j<128;j++){
			write_data(0);
		}		
	}

}

code unsigned char bmp_kunkun[] = 
{
	/*--ikun666.bmp  --*/
	/*--  宽度x高度=128x64  --*/
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x3F,0x3F,0x1F,0x1F,
	0x0F,0x0F,0x1F,0x1F,0x1F,0x3F,0x3F,0x3F,0x1F,0x1F,0x07,0x07,0x07,0x07,0x07,0x07,
	0x0F,0x0F,0x1F,0x3F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0x7F,0x3F,0x3F,0x1F,0x07,0x07,0x07,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0F,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x9F,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE1,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0x7F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
	0x80,0x80,0x80,0x00,0x30,0x37,0x2F,0xDF,0x3F,0xFF,0x3F,0xCF,0xEF,0xF7,0x36,0x30,
	0x20,0xC0,0x20,0xE0,0x80,0x00,0x00,0x00,0x80,0x80,0xF3,0xFF,0xFF,0xFF,0xFF,0x07,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0xE1,0xFC,0xFF,0xFF,0x7F,0xBF,0x9F,0xDF,0xEF,
	0xF7,0xFB,0xFC,0xFE,0xFF,0xDF,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x83,0x83,0x7F,
	0xFF,0xFF,0xFF,0x0F,0xE7,0xF3,0xFB,0xE7,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,
	0x7F,0xFF,0xFE,0xFE,0xF8,0xF0,0x80,0x38,0xFF,0xFF,0xFF,0x9C,0x6C,0xF4,0xF6,0xF6,
	0x69,0x9B,0xF7,0x16,0x66,0x76,0x72,0x79,0x7A,0x7B,0x7A,0x79,0x73,0x77,0x66,0x56,
	0x1A,0x69,0xF6,0xF7,0x67,0x0F,0xC0,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFD,0xFC,0xF9,0xF3,0xF7,0xEF,0xCF,
	0xDF,0xBF,0x3F,0x1F,0xFF,0xFF,0xF8,0x87,0x3F,0x1F,0xCF,0xF3,0xFC,0xFF,0xFF,0x80,
	0x3F,0x3F,0xFF,0xE0,0xC7,0xFF,0xFF,0xFF,0xFF,0xF0,0x07,0x7F,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0x3F,0xDF,0xE7,0xFB,0xFB,0xFD,0xF8,0xF6,0xEE,0xDF,0xDF,0xBF,0xBF,0xBF,0x7F,
	0x7F,0x7E,0x7E,0xFE,0xFD,0xFB,0xFB,0x37,0x06,0x01,0x03,0x0F,0x0F,0x0E,0x0E,0x06,
	0x07,0x07,0x07,0x06,0x05,0x0B,0x0B,0x17,0x17,0x17,0x17,0x17,0x1B,0x1B,0x3D,0x3E,
	0x1F,0x0F,0x26,0x32,0x78,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0xC7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0x80,0x7D,0xFD,0xFD,0xFD,0xFD,0x7D,0x7D,0x7B,0xFB,0xFB,0xF7,0xF7,0xF7,0xEF,0xEF,
	0xDF,0xDF,0xDF,0xBE,0xBE,0x3E,0x00,0x00,0x00,0x20,0xC0,0xC0,0x80,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,
	0xC0,0xE0,0x70,0x30,0x20,0x07,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFE,0xF9,0xF5,0xEE,0xEE,0xDF,0xBF,0xBF,0xBE,0x7E,0x7D,0x7B,0x7B,0x77,0x6F,
	0x6F,0x9F,0xBF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x07,0x3F,0xF1,0x03,
	0x03,0x02,0x02,0x02,0xC2,0xC6,0xFE,0xC6,0xC2,0x02,0x02,0x02,0x01,0xF1,0xFF,0x1F,
	0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
	0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
};


//遍历屏幕,写入坤坤;
void catkunkun(unsigned char *bmp_kunkun)
{
	unsigned char i;
	unsigned int j;
	for(i=0;i<8;i++){
		Oled_Write_Cmd(0xB0+i);
		Oled_Write_Cmd(0x00);
		Oled_Write_Cmd(0x10);
		for(j=128*i;j<(128*(i+1));j++){
			write_data(bmp_kunkun[j]);
		}		
	}

}

void main()
{
	//初始化oled;
	initOled();

	//设置页寻址模式
	Oled_Write_Cmd(0x20);
	Oled_Write_Cmd(0x02);

	//清空屏幕
	clearOled();
	catkunkun(bmp_kunkun);

	while(1);
}

多谢观看,另:手画坤坤的感觉真的不错!(诸位记着反色)

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 要在128*64 OLED屏上实现动画效果,可以采用以下步骤: 1. 将动画分解成一系列静态图像,将每一帧图像转换为适合OLED屏幕的位图格式。 2. 使用Arduino或其他微控制器将这些位图逐帧显示在OLED屏幕上。可以使用Adafruit GFX库或其他类似库来编写代码。 3. 控制每一帧之间的时间间隔,以便动画看起来流畅。可以使用延迟函数或定时器来实现。 4. 可以使用按钮或其他传感器来控制动画的开始和停止,或者在动画中添加交互元素。 总之,在OLED屏幕上实现动画效果需要将动画分解成静态图像,并用代码控制逐帧显示。 ### 回答2: 将动画效果实现在128*64 OLED屏上可以通过逐帧刷新实现。首先,我们需要确定动画的帧数和每一帧的内容。然后,我们需要将每一帧的内容转化为OLED屏能够显示的格式。 在128*64 OLED屏上,每个像素的状态可以用一个bit来表示。因此,屏幕可以被分为8*128个像素块,每个像素块占用8个连续的bit。要在屏幕上显示动画,我们可以按照每一帧的内容将bit数据写入到屏幕的对应位置。 假设动画有10帧,每一帧是一个128*64像素的图像。我们可以使用一个数组来表示每一帧的像素数据。对于每一帧的像素数据,我们可以将其分为8行,每行占用128个字节。然后,我们可以使用循环将每一行的字节数据写入到OLED屏的对应位置。 要实现动画的播放效果,我们可以使用一个定时器来控制帧的刷新速率。每当定时器触发时,我们将显示下一帧的像素数据,从而实现连续的动画效果。当动画播放完最后一帧时,可以设置标志位或者重新播放第一帧,以实现动画的循环播放。 总结起来,要在128*64 OLED屏上实现动画效果,我们需要将每一帧的像素数据转换为OLED屏的bit格式,然后根据帧率刷新屏幕显示。这样就可以在有限的屏幕空间内实现动画效果。 ### 回答3: 在128*64 OLED屏上实现动画效果,可以通过逐帧播放的方式来实现。首先,我们需要将整个动画划分为多个连续的帧图像,每一帧都是128*64像素大小的图像。然后,将这些帧图像存储在屏幕的内存中,以便能够随时访问。 接下来,我们可以使用控制屏幕的驱动程序或编程库来逐帧显示这些图像。具体的方法可以是每秒显示多少帧,然后按照这个速率依次显示每一帧。可以使用定时器来控制帧的显示速率,确保动画能够以流畅的方式播放。 此外,为了实现动画的连续性和平滑性,可以使用双缓冲技术。双缓冲技术的基本原理是使用两个缓冲区,一个用于显示当前帧图像,而另一个被用来绘制下一帧图像。然后,在每一帧显示到屏幕上之前,两个缓冲区会进行交换。这样可以确保在切换帧时不会出现闪烁或画面撕裂的问题。 为了提高动画效果的质量,还可以通过在每一帧之间添加一些适当的延迟来调整动画的速度。这样可以创建出更加平滑的动画效果,使其看起来更加自然。 总的来说,在128*64 OLED屏上实现动画效果需要划分帧图像、控制帧的播放速率和使用双缓冲技术,以及调整动画速度。这样可以在有限的屏幕空间中展示出流畅、连续和高质量的动画效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值