51单片机——OLED

在这里插入图片描述

51单片机——OLED在这里插入图片描述

1.IIC协议概述

IIC全称Inter-Integrated Circuit (集成电路总线)
是由PHILIPS公司在80年代开发的两线式串行总线,用于连接微控制器及其外围设备。IIC属于半双工同步通信方式

特点

简单性和有效性。

由于接口直接在组件之上,因此IIC总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件

多主控(multimastering)

其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。

构成

IIC串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL,其时钟信号是由主控器件产生。所有接到IIC总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。对于并联在一条总线上的每个IC都有唯一的地址。外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

IIC协议

IIC总线在传输数据的过程中一共有三种类型信号,分别为:开始信号、结束信号和应答信号。

//起始位,停止位,数据位,速度

这些信号中,起始信号是必需的,结束信号和应答信号外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

应答信号

发送器每发送一个字节(8个bit),就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。

应答信号为低电平时,规定为有效应答位(ACK,简称应答位),表示接收器已经成功地接收了该字

节;

应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.IIC协议基本函数封装

#include "reg52.h"
#include "intrins.h"

sbit scl = P0^1;
sbit sda = P0^3;

void IIC_Start()
{
    
    
	sda = 1;
	scl = 1;
	_nop_();
	sda = 0;
	_nop_();
}

void IIC_Stop()
{
    
    
	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 main()
{
    
    
		int a = 10;
	
		IIC_Start();

}

3.OLED写数据写命令函数封装

#include "reg52.h"
#include "intrins.h"

sbit scl = P0^1;
sbit sda = P0^3;

void IIC_Start()
{
    
    
	sda = 1;
	scl = 1;
	_nop_();
	sda = 0;
	_nop_();
}

void IIC_Stop()
{
    
    
	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 0x78
	IIC_Send_Byte(0x78);
	//	3. ACK
	IIC_ACK();
	//	4. cotrol byte: (0)(0)000000 写入命令   (0)(1)000000写入数据
	IIC_Send_Byte(0x00);
	//	5. ACK
	IIC_ACK();
	//6. 写入指令/数据
	IIC_Send_Byte(dataCmd);
	//7. ACK
	IIC_ACK();
	//8. STOP
	IIC_Stop();
}

void Oled_Write_Data(char dataData)
{
    
    
	//	1. start()
	IIC_Start();
	//		
	//	2. 写入从机地址  b0111 1000 0x78
	IIC_Send_Byte(0x78);
	//	3. ACK
	IIC_ACK();
	//	4. cotrol byte: (0)(0)000000 写入命令   (0)(1)000000写入数据
	IIC_Send_Byte(0x00);
	//	5. ACK
	IIC_ACK();
	///6. 写入指令/数据
	IIC_Send_Byte(dataData);
	//7. ACK
	IIC_ACK();
	//8. STOP
	IIC_Stop();
}


void main()
{
    
    
		int a = 10;
	
		IIC_Start();

}

4.OLED显示一个点

#include "reg52.h"
#include "intrins.h"

sbit scl = P0^1;
sbit sda = P0^3;

void IIC_Start()
{
    
    
	sda = 1;
	scl = 1;
	_nop_();
	sda = 0;
	_nop_();
}

void IIC_Stop()
{
    
    
	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 0x78
	IIC_Send_Byte(0x78);
	//	3. ACK
	IIC_ACK();
	//	4. cotrol byte: (0)(0)000000 写入命令   (0)(1)000000写入数据
	IIC_Send_Byte(0x00);
	//	5. ACK
	IIC_ACK();
	//6. 写入指令/数据
	IIC_Send_Byte(dataCmd);
	//7. ACK
	IIC_ACK();
	//8. STOP
	IIC_Stop();
}

void Oled_Write_Data(char dataData)
{
    
    
	//	1. start()
	IIC_Start();
	//		
	//	2. 写入从机地址  b0111 1000 0x78
	IIC_Send_Byte(0x78);
	//	3. ACK
	IIC_ACK();
	//	4. cotrol byte: (0)(0)000000 写入命令   (0)(1)000000写入数据
	IIC_Send_Byte(0x40);
	//	5. ACK
	IIC_ACK();
	///6. 写入指令/数据
	IIC_Send_Byte(dataData);
	//7. ACK
	IIC_ACK();
	//8. STOP
	IIC_Stop();
}


void Oled_Init(void){
    
    
	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 main()
{
    
    
		int a = 10;
		//1. OLED初始化
		Oled_Init();
		//2. 选择一个位置
		//2.1 确认页寻址模式
		Oled_Write_Cmd(0x20);
		Oled_Write_Cmd(0x02);
		//2.2 选择PAGE0   1011 0000
		//								0xB0
		Oled_Write_Cmd(0xB0);
	  //3. 显示一个点
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
	
		while(1);
}

5.OLED选择列地址显示

#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 0x78
	IIC_Send_Byte(0x78);
	//	3. ACK
	IIC_ACK();
	//	4. cotrol byte: (0)(0)000000 写入命令   (0)(1)000000写入数据
	IIC_Send_Byte(0x00);
	//	5. ACK
	IIC_ACK();
	//6. 写入指令/数据
	IIC_Send_Byte(dataCmd);
	//7. ACK
	IIC_ACK();
	//8. STOP
	IIC_Stop();
}

void Oled_Write_Data(char dataData)
{
    
    
	//	1. start()
	IIC_Start();
	//		
	//	2. 写入从机地址  b0111 1000 0x78
	IIC_Send_Byte(0x78);
	//	3. ACK
	IIC_ACK();
	//	4. cotrol byte: (0)(0)000000 写入命令   (0)(1)000000写入数据
	IIC_Send_Byte(0x40);
	//	5. ACK
	IIC_ACK();
	///6. 写入指令/数据
	IIC_Send_Byte(dataData);
	//7. ACK
	IIC_ACK();
	//8. STOP
	IIC_Stop();
}


void Oled_Init(void){
    
    
	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 Oled_Screen_Clear(void){
    
    
	char i,n;
	Oled_Write_Cmd (0x20);                    //set memory addressing mode
	Oled_Write_Cmd (0x02);                    //page addressing mode

	for(i=0;i<8;i++){
    
    
		Oled_Write_Cmd(0xb0+i);               //ÉèÖÃÒ³µØÖ·£¨0~7£©
		Oled_Write_Cmd(0x00);                 //ÉèÖÃÏÔʾλÖáªÁе͵ØÖ·
		Oled_Write_Cmd(0x10);                 //ÉèÖÃÏÔʾλÖáªÁиߵØÖ·   
		for(n=0;n<128;n++)Oled_Write_Data(0x00); 			
	}	
}

void main()
{
    
    
		int a = 10;
		//1. OLED初始化
		Oled_Init();
		//2. 选择一个位置
		//2.1 确认页寻址模式
		Oled_Write_Cmd(0x20);
		Oled_Write_Cmd(0x02);
		//2.2 选择PAGE0   1011 0000
		//								0xB0
		Oled_Write_Cmd(0xB0);
		Oled_Write_Cmd(0x00);
		Oled_Write_Cmd(0x10);
	  //3. 显示一个点
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
	
		Oled_Write_Cmd(0xB5);
		Oled_Write_Cmd(0x00);
		Oled_Write_Cmd(0x10);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		
		Oled_Write_Cmd(0xB6);
		Oled_Write_Cmd(0x00);
		Oled_Write_Cmd(0x10);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		
		Oled_Write_Cmd(0x0f);
		Oled_Write_Cmd(0x17);
		Oled_Write_Data(0x08);
	
		while(1);
}

6.OLED添加清屏函数

#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 0x78
	IIC_Send_Byte(0x78);
	//	3. ACK
	IIC_ACK();
	//	4. cotrol byte: (0)(0)000000 写入命令   (0)(1)000000写入数据
	IIC_Send_Byte(0x00);
	//	5. ACK
	IIC_ACK();
	//6. 写入指令/数据
	IIC_Send_Byte(dataCmd);
	//7. ACK
	IIC_ACK();
	//8. STOP
	IIC_Stop();
}

void Oled_Write_Data(char dataData)
{
    
    
	//	1. start()
	IIC_Start();
	//		
	//	2. 写入从机地址  b0111 1000 0x78
	IIC_Send_Byte(0x78);
	//	3. ACK
	IIC_ACK();
	//	4. cotrol byte: (0)(0)000000 写入命令   (0)(1)000000写入数据
	IIC_Send_Byte(0x40);
	//	5. ACK
	IIC_ACK();
	///6. 写入指令/数据
	IIC_Send_Byte(dataData);
	//7. ACK
	IIC_ACK();
	//8. STOP
	IIC_Stop();
}


void Oled_Init(void){
    
    
	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 Oled_Clear()
{
    
    
	unsigned char i,j; //-128 --- 127
	
	for(i=0;i<8;i++){
    
    
		Oled_Write_Cmd(0xB0 + i);//page0--page7
		//每个page从0列
		Oled_Write_Cmd(0x00);
		Oled_Write_Cmd(0x10);
		//0到127列,依次写入0,每写入数据,列地址自动偏移
		for(j = 0;j<128;j++){
    
    
			Oled_Write_Data(0);
		}
	}
}


void main()
{
    
    
		int a = 10;
		//1. OLED初始化
		Oled_Init();
		//2. 选择一个位置
		//2.1 确认页寻址模式
		Oled_Write_Cmd(0x20);
		Oled_Write_Cmd(0x02);
		Oled_Clear();
		//2.2 选择PAGE0   1011 0000
		//								0xB0
		Oled_Write_Cmd(0xB0);
		Oled_Write_Cmd(0x00);
		Oled_Write_Cmd(0x10);
	  //3. 显示一个点
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
	
		Oled_Write_Cmd(0xB5);
		Oled_Write_Cmd(0x00);
		Oled_Write_Cmd(0x10);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		
		Oled_Write_Cmd(0xB6);
		Oled_Write_Cmd(0x00);
		Oled_Write_Cmd(0x10);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		Oled_Write_Data(0x08);
		
		Oled_Write_Cmd(0x0f);
		Oled_Write_Cmd(0x17);
		Oled_Write_Data(0x08);
	
		while(1);
}

7.OLED显示字符A

#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 0x78
	IIC_Send_Byte(0x78);
	//	3. ACK
	IIC_ACK();
	//	4. cotrol byte: (0)(0)000000 写入命令   (0)(1)000000写入数据
	IIC_Send_Byte(0x00);
	//	5. ACK
	IIC_ACK();
	//6. 写入指令/数据
	IIC_Send_Byte(dataCmd);
	//7. ACK
	IIC_ACK();
	//8. STOP
	IIC_Stop();
}

void Oled_Write_Data(char dataData)
{
    
    
	//	1. start()
	IIC_Start();
	//		
	//	2. 写入从机地址  b0111 1000 0x78
	IIC_Send_Byte(0x78);
	//	3. ACK
	IIC_ACK();
	//	4. cotrol byte: (0)(0)000000 写入命令   (0)(1)000000写入数据
	IIC_Send_Byte(0x40);
	//	5. ACK
	IIC_ACK();
	///6. 写入指令/数据
	IIC_Send_Byte(dataData);
	//7. ACK
	IIC_ACK();
	//8. STOP
	IIC_Stop();
}


void Oled_Init(void){
    
    
	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 Oled_Clear()
{
    
    
	unsigned char i,j; //-128 --- 127
	
	for(i=0;i<8;i++){
    
    
		Oled_Write_Cmd(0xB0 + i);//page0--page7
		//每个page从0列
		Oled_Write_Cmd(0x00);
		Oled_Write_Cmd(0x10);
		//0到127列,依次写入0,每写入数据,列地址自动偏移
		for(j = 0;j<128;j++){
    
    
			Oled_Write_Data(0);
		}
	}
}


/*--  文字:  A  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
char A1[8] = {
    
    0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00};
char A2[8] = {
    
    0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20};


void main()
{
    
    
		int i;
		//1. OLED初始化
		Oled_Init();
		//2. 选择一个位置
		//2.1 确认页寻址模式
		Oled_Write_Cmd(0x20);
		Oled_Write_Cmd(0x02);
		Oled_Clear();
		//2.2 选择PAGE0   1011 0000
		//								0xB0
		Oled_Write_Cmd(0xB0);
		Oled_Write_Cmd(0x00);
		Oled_Write_Cmd(0x10);
		for(i=0;i<8;i++){
    
    
				Oled_Write_Data(A1[i]);
		}
		
		Oled_Write_Cmd(0xB1);
		Oled_Write_Cmd(0x00);
		Oled_Write_Cmd(0x10);
		for(i=0;i<8;i++){
    
    
				Oled_Write_Data(A2[i]);
		}
		
	
		while(1);
}

8.OLED显示文字

#include "reg52.h"
#include "intrins.h"

sbit sda=P0^3;
sbit scl=P0^1;

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;
     _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; //获得dataSend的最高位
         _nop_();  //延时一段时间
         scl=1;   //开始发送
         _nop_(); 
         scl=0;   //发送完毕
         _nop_();
         dataSend=dataSend<<1;
     }         
}  


void Oled_write_Cmd(char cmd)
{
    
    
    //1. start()
      IIC_Start();
   // 2. 写入 b0111 1000 0x78
      IIC_Send_Byte(0x78);
   // 3. ACK
      IIC_Ack();
    //4. cotrol byte: (0)(0)000000 写入命令 (0)(1)000000写入数据
      IIC_Send_Byte(0x00);   
    //5. ACK
      IIC_Ack();
    //6. 写入指令/数据
      IIC_Send_Byte(cmd);
   // 7. ACK
      IIC_Ack();
   // 8. STOP
      IIC_Stop();
}

void Oled_Write_Data(char dataData)
{
    
    
     //1. start()
      IIC_Start();
   // 2. 写入 b0111 1000 0x78
      IIC_Send_Byte(0x78);
   // 3. ACK
      IIC_Ack();
    //4. cotrol byte: (0)(0)000000 写入命令 (0)(1)000000写入数据
      IIC_Send_Byte(0x40);   
    //5. ACK
      IIC_Ack();
    //6. 写入指令/数据
      IIC_Send_Byte(dataData);
   // 7. ACK
      IIC_Ack();
   // 8. STOP
      IIC_Stop();

}

void Oled_Init()
{
    
    
    Oled_write_Cmd(0xAE);
    Oled_write_Cmd(0x00);
    Oled_write_Cmd(0x10);
    Oled_write_Cmd(0x40);
    Oled_write_Cmd(0xB0);
    Oled_write_Cmd(0x81);
    Oled_write_Cmd(0xFF);
    Oled_write_Cmd(0xA1);
    Oled_write_Cmd(0xA6);
    Oled_write_Cmd(0xA8);
    Oled_write_Cmd(0x3F);
    Oled_write_Cmd(0xC8);
    Oled_write_Cmd(0xD3);
    Oled_write_Cmd(0x00);
    Oled_write_Cmd(0xD5);
    Oled_write_Cmd(0x80);
    Oled_write_Cmd(0xD8);
    Oled_write_Cmd(0x05);
    Oled_write_Cmd(0xD9);
    Oled_write_Cmd(0xF1);
    Oled_write_Cmd(0xDA);
    Oled_write_Cmd(0x12);
    Oled_write_Cmd(0xDB);
    Oled_write_Cmd(0x30);
    Oled_write_Cmd(0x8D);
    Oled_write_Cmd(0x14);
    Oled_write_Cmd(0xAF);
}

void  Oled_Clear()
{
    
    
   unsigned char i,j;
   
   for(i=0;i<8;i++)
   {
    
    
        Oled_write_Cmd(0xB0+i);//page0到page7
        //每个page从0开始
        Oled_write_Cmd(0x00);
        Oled_write_Cmd(0x10);
         //0到127列,依次写入数据0,自动偏移
        for(j=0;j<128;j++)
        {
    
    
             Oled_Write_Data(0);
        }             
   }    
    
}

/*--  文字:  卧  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
code char W1[]={
    
    0x00,0xFE,0x22,0x22,0x3E,0x22,0x22,0xE2,0x02,0x00,0xFF,0x20,0x40,0x80,0x00,0x00};
code char W2[]={
    
    0x00,0x3F,0x22,0x22,0x3E,0x22,0x22,0x23,0x20,0x00,0xFF,0x00,0x00,0x00,0x03,0x00};

/*--  文字:  槽  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
code char A1[]={
    
    0x10,0x10,0xD0,0xFF,0x90,0x04,0xF4,0x54,0xFF,0x54,0x54,0xFF,0x54,0xF4,0x04,0x00};
code char A2[]={
    
    0x04,0x03,0x00,0xFF,0x00,0x01,0x01,0xFD,0x55,0x55,0x55,0x55,0xFD,0x01,0x00,0x00};

/*--  文字:  ,  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
code char D1[]={
    
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
code char D2[]={
    
    0x00,0x90,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

/*--  文字:  谢  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
code char X1[]={
    
    0x40,0x42,0xCC,0x00,0x00,0xFC,0x56,0x55,0xFC,0x80,0x10,0x10,0xFF,0x10,0x10,0x00};
code char X2[]={
    
    0x00,0x00,0x3F,0x10,0x2A,0x13,0x4A,0x86,0x7F,0x00,0x43,0x80,0x7F,0x00,0x00,0x00};

/*--  文字:  文  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
code char E1[]={
    
    0x08,0x08,0x08,0x38,0xC8,0x08,0x09,0x0E,0x08,0x08,0xC8,0x38,0x08,0x08,0x08,0x00};
code char E2[]={
    
    0x80,0x80,0x40,0x40,0x20,0x11,0x0A,0x04,0x0A,0x11,0x20,0x40,0x40,0x80,0x80,0x00};

/*--  文字:  辉  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
code char H1[]={
    
    0x44,0x58,0xC0,0x7F,0xD0,0x48,0x26,0x22,0xE2,0x3A,0xA2,0x22,0x22,0x2A,0x06,0x00};
code char H2[]={
    
    0x80,0x60,0x1F,0x00,0x7F,0x20,0x10,0x13,0x12,0x12,0xFF,0x12,0x12,0x12,0x10,0x00};

/*--  文字:  真  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
code char Z1[]={
    
    0x00,0x04,0x04,0xF4,0x54,0x54,0x54,0x5F,0x54,0x54,0x54,0xF4,0x04,0x04,0x00,0x00};
code char Z2[]={
    
    0x10,0x10,0x90,0x5F,0x35,0x15,0x15,0x15,0x15,0x15,0x35,0x5F,0x90,0x10,0x10,0x00};

/*--  文字:  的  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
code char B1[]={
    
    0x00,0xF8,0x0C,0x0B,0x08,0x08,0xF8,0x40,0x30,0x8F,0x08,0x08,0x08,0xF8,0x00,0x00};
code char B2[]={
    
    0x00,0x7F,0x21,0x21,0x21,0x21,0x7F,0x00,0x00,0x00,0x43,0x80,0x40,0x3F,0x00,0x00};

/*--  文字:  帅  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
code char S1[]={
    
    0x00,0xFC,0x00,0x00,0xFF,0x00,0x00,0xF0,0x10,0x10,0xFF,0x10,0x10,0xF0,0x00,0x00};
code char S2[]={
    
    0x00,0x87,0x40,0x30,0x0F,0x00,0x00,0x1F,0x00,0x00,0xFF,0x08,0x10,0x0F,0x00,0x00};

int i;
void Oled_Show_Up()
{
    
    
     for(i=0;i<16;i++)
     {
    
    
          Oled_Write_Data(W1[i]);
     }    
     for(i=0;i<16;i++)
     {
    
    
          Oled_Write_Data(A1[i]);
     }    
     for(i=0;i<16;i++)
     {
    
    
          Oled_Write_Data(D1[i]);
     }
     for(i=0;i<16;i++)
     {
    
    
          Oled_Write_Data(X1[i]);
     }
     for(i=0;i<16;i++)
     {
    
    
          Oled_Write_Data(E1[i]);
     }
     for(i=0;i<16;i++)
     {
    
    
          Oled_Write_Data(H1[i]);
     } 
     for(i=0;i<16;i++)
     {
    
    
          Oled_Write_Data(Z1[i]);
     }
     for(i=0;i<16;i++)
     {
    
    
          Oled_Write_Data(B1[i]);
     }
   
}

void Oled_Show_Down()
{
    
    
     for(i=0;i<16;i++)
     {
    
    
          Oled_Write_Data(W2[i]);
     }    
     for(i=0;i<16;i++)
     {
    
    
          Oled_Write_Data(A2[i]);
     }    
     for(i=0;i<16;i++)
     {
    
    
          Oled_Write_Data(D2[i]);
     }
     for(i=0;i<16;i++)
     {
    
    
          Oled_Write_Data(X2[i]);
     }
     for(i=0;i<16;i++)
     {
    
    
          Oled_Write_Data(E2[i]);
     }
     for(i=0;i<16;i++)
     {
    
    
          Oled_Write_Data(H2[i]);
     } 
     for(i=0;i<16;i++)
     {
    
    
          Oled_Write_Data(Z2[i]);
     }
     for(i=0;i<16;i++)
     {
    
    
          Oled_Write_Data(B2[i]);
     }

}

void main()
{
    
    
     
     //1.oled初始化
     Oled_Init();
     //2.选择一个位置
     //2.1确认页寻址模式
     Oled_write_Cmd(0x20);
     Oled_write_Cmd(0x02);
     Oled_Clear(); 
     //2.2选择page0
     Oled_write_Cmd(0xB0);
     Oled_write_Cmd(0x00);
     Oled_write_Cmd(0x10); 
     Oled_Show_Up();
    
     Oled_write_Cmd(0xB1);
     Oled_write_Cmd(0x00);
     Oled_write_Cmd(0x10); 
     Oled_Show_Down();
    
     Oled_write_Cmd(0xB2);
     Oled_write_Cmd(0x00);
     Oled_write_Cmd(0x10);
     for(i=0;i<16;i++)
     {
    
    
         Oled_Write_Data(S1[i]);
     }    
     
     Oled_write_Cmd(0xB3);
     Oled_write_Cmd(0x00);
     Oled_write_Cmd(0x10);
     for(i=0;i<16;i++)
     {
    
    
         Oled_Write_Data(S2[i]);
     }   
     
     while(1);    
} 

9.OLED显示图片

#include "reg52.h"
#include "intrins.h"

sbit sda=P0^3;
sbit scl=P0^1;

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;
     _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; //获得dataSend的最高位
         _nop_();  //延时一段时间
         scl=1;   //开始发送
         _nop_(); 
         scl=0;   //发送完毕
         _nop_();
         dataSend=dataSend<<1;
     }         
}  


void Oled_write_Cmd(char cmd)
{
    
    
    //1. start()
      IIC_Start();
   // 2. 写入 b0111 1000 0x78
      IIC_Send_Byte(0x78);
   // 3. ACK
      IIC_Ack();
    //4. cotrol byte: (0)(0)000000 写入命令 (0)(1)000000写入数据
      IIC_Send_Byte(0x00);   
    //5. ACK
      IIC_Ack();
    //6. 写入指令/数据
      IIC_Send_Byte(cmd);
   // 7. ACK
      IIC_Ack();
   // 8. STOP
      IIC_Stop();
}

void Oled_Write_Data(char dataData)
{
    
    
     //1. start()
      IIC_Start();
   // 2. 写入 b0111 1000 0x78
      IIC_Send_Byte(0x78);
   // 3. ACK
      IIC_Ack();
    //4. cotrol byte: (0)(0)000000 写入命令 (0)(1)000000写入数据
      IIC_Send_Byte(0x40);   
    //5. ACK
      IIC_Ack();
    //6. 写入指令/数据
      IIC_Send_Byte(dataData);
   // 7. ACK
      IIC_Ack();
   // 8. STOP
      IIC_Stop();

}

void Oled_Init()
{
    
    
    Oled_write_Cmd(0xAE);
    Oled_write_Cmd(0x00);
    Oled_write_Cmd(0x10);
    Oled_write_Cmd(0x40);
    Oled_write_Cmd(0xB0);
    Oled_write_Cmd(0x81);
    Oled_write_Cmd(0xFF);
    Oled_write_Cmd(0xA1);
    Oled_write_Cmd(0xA6);
    Oled_write_Cmd(0xA8);
    Oled_write_Cmd(0x3F);
    Oled_write_Cmd(0xC8);
    Oled_write_Cmd(0xD3);
    Oled_write_Cmd(0x00);
    Oled_write_Cmd(0xD5);
    Oled_write_Cmd(0x80);
    Oled_write_Cmd(0xD8);
    Oled_write_Cmd(0x05);
    Oled_write_Cmd(0xD9);
    Oled_write_Cmd(0xF1);
    Oled_write_Cmd(0xDA);
    Oled_write_Cmd(0x12);
    Oled_write_Cmd(0xDB);
    Oled_write_Cmd(0x30);
    Oled_write_Cmd(0x8D);
    Oled_write_Cmd(0x14);
    Oled_write_Cmd(0xAF);
}

void  Oled_Clear()
{
    
    
   unsigned char i,j;
   
   for(i=0;i<8;i++)
   {
    
    
        Oled_write_Cmd(0xB0+i);//page0到page7
        //每个page从0开始
        Oled_write_Cmd(0x00);
        Oled_write_Cmd(0x10);
         //0到127列,依次写入数据0,自动偏移
        for(j=0;j<128;j++)
        {
    
    
             Oled_Write_Data(0);
        }             
   }    
    
}

code unsigned  char bmpImager[]={
    
    
    /*--  调入了一幅图像:D:\无标题.bmp  --*/
/*--  宽度x高度=128x64  --128x8x8*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0xF0,0x08,0x0C,0x04,0x06,0x06,0x0C,0x04,0x0C,0xFC,0x1C,0x74,0xFC,0xF8,
0xF0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0x07,0x04,0x88,0xF8,0x08,0x08,0x0C,0x06,0x01,0x00,0x00,0x01,0x1F,
0x7F,0xFF,0xDC,0xF8,0xE0,0xC0,0x40,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x10,0x18,0x08,0x0C,
0x04,0x04,0x06,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x60,0xC0,0x80,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x03,0x06,0x1C,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0xFC,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x88,0xE8,0x38,0x0E,0x09,0x08,
0x08,0x88,0xE8,0x18,0x08,0x08,0x08,0x00,0x00,0xFF,0x89,0x89,0x89,0xFF,0x00,0xFF,
0x89,0x89,0x89,0x89,0xFF,0x00,0x00,0x04,0x04,0x84,0x74,0x6F,0xA4,0x24,0x24,0x24,
0x24,0xA4,0x64,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0xF0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x7F,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x08,0x09,0x09,0x06,0x06,
0x06,0x05,0x08,0x08,0x10,0x10,0x00,0x00,0x0C,0x03,0x10,0x10,0x10,0x1F,0x18,0x07,
0x00,0x00,0x10,0x10,0x1F,0x00,0x10,0x08,0x06,0x11,0x10,0x08,0x09,0x0A,0x06,0x06,
0x0B,0x08,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,
0x1E,0x03,0x00,0x00,0xC0,0x60,0x30,0x0C,0x04,0x06,0x02,0x01,0x01,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,
0x1E,0x60,0x78,0x0F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

};

void  Oled_Show_Imager(unsigned char *image)
{
    
    
   unsigned char i;
   unsigned int j;
    
   for(i=0;i<8;i++)
   {
    
    
        Oled_write_Cmd(0xB0+i);//page0到page7
        //每个page从0开始
        Oled_write_Cmd(0x00);
        Oled_write_Cmd(0x10);
         //0到127列,依次写入数据0,自动偏移
        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_Imager(bmpImager);
    
     while(1);    
} 

00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,
0x1E,0x60,0x78,0x0F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

};

void Oled_Show_Imager(unsigned char *image)
{
unsigned char i;
unsigned int j;

for(i=0;i<8;i++)
{
Oled_write_Cmd(0xB0+i);//page0到page7
//每个page从0开始
Oled_write_Cmd(0x00);
Oled_write_Cmd(0x10);
//0到127列,依次写入数据0,自动偏移
for(j=128i;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_Imager(bmpImager);

 while(1);    

}


猜你喜欢

转载自blog.csdn.net/qq_47944751/article/details/135901939