12.IIC协议之OLED使用

IIC协议

概述

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

特点

  1. 简单性和有效性。

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

  1. 多主控(multimastering)

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

构成

IIC串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL,其时钟信号是由主控器件产生。所有接到IIC总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。对于并联在一条总线上的每个IC都有唯一的地址。

在这里插入图片描述

内容

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

起始位,停止位,数据位,速度。
这些信号中,起始信号是必需的,结束信号和应答信号。

起始信号 终止信号

在这里插入图片描述

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

应答信号

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

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

应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。

在这里插入图片描述

char IIC_Ack()
{
	char flag;
	
	scl = 0;
	sda = 1;
	
	scl = 1;
	
	_nop()_;
	
	flag = sda;
	
	_nop()_;
	
	scl = 0;
	
	_nop()_;
	
	return flag;
}

数据发送的时序

在这里插入图片描述

void void IIC_Send_Byte(char send_data)
{
	int i = 0;
	
	for(i = 0;i<8;i++)
	{
		scl = 0;//scl拉低,让sda做好数据准备
				
		sda = send_data & 0x80;//1000 0000获得dataSend的最高位,给sda

		_nop()_;//发送数据建立时间
		
		scl = 1;//scl拉高开始发送
		
		_nop()_;//数据发送时间
		
		scl = 0;//发送完毕拉低
		
		_nop()_;
		
		send_data = send_data << 1;
	}
}

OLED的寻址模式

有三种,分别位页地址模式,水平地址模式和垂直地址模式,可以通过一下表格进行配置内存管理。

在这里插入图片描述

在这里插入图片描述

页地址模式

在这里插入图片描述

水平地址模式

在这里插入图片描述

垂直地址模式

在这里插入图片描述

列地址选择

在这里插入图片描述

如果写入0x08(b00001000)会显示什么呢?
一个字节负责一个Page的一列显示。

在这里插入图片描述

写指令

void Oled_Write_Cmd(char cmd)
{
	//1. start
	IIC_start();
	
	//2. 写从机地址 b0111 1000 0x78
	IIC_sendByte(0x78);
	
	//3. ACK
	IIC_ack();
	
	//4. cotrol byte: (0)(0)000000 写入命令 (0)(1)000000写入数据
	IIC_sendByte(0x00);
	
	//5. ACK
	IIC_ack();
	
	//6. 写入指令/数据
	IIC_sendByte(cmd);
	
	//7. ACK
	IIC_ack();
	
	//8. STOP
	IIC_stop();
}

写数据

void Oled_Write_Data(char data1)
{
	IIC_start();
	
	IIC_sendByte(0x78);
	
	IIC_ack();
	
	//4. cotrol byte: (0)(0)00 0000 写入命令 (0)(1)00 0000写入数据
	IIC_sendByte(0x40);
	
	IIC_ack();
	
	IIC_sendByte(data1);
	
	IIC_ack();
	
	IIC_stop();
}

清屏

void Oled_Clear_Screen()
{
	int i = 0;
	int j = 0;
	
	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);
		}
	}
}

OLED显示“惠州博罗县陈晨”

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

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

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

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

char IIC_ack()
{
	char flag;
	
	scl = 0;
	sda = 1;
	
	scl = 1;
	_nop_();
	
	flag = sda;
	_nop_();
	scl = 0;
	_nop_();
	
	
	return flag;
}

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

void Oled_Write_Cmd(char cmd)
{
	IIC_start();
	
	IIC_sendByte(0x78);
	
	IIC_ack();
	
	IIC_sendByte(0x00);
	
	IIC_ack();
	
	IIC_sendByte(cmd);
	
	IIC_ack();
	
	IIC_stop();
}

void Oled_Write_Data(char data1)
{
	IIC_start();
	
	IIC_sendByte(0x78);
	
	IIC_ack();
	
	IIC_sendByte(0x40);
	
	IIC_ack();
	
	IIC_sendByte(data1);
	
	IIC_ack();
	
	IIC_stop();
}

void Oled_Clear_Screen()
{
	int i = 0;
	int j = 0;
	
	for(i = 0; i < 8 ;i++)
	{
		Oled_Write_Cmd(0xb0 + i);
		Oled_Write_Cmd(0x10);
		for(j = 0;j <128;j++)
		{
			Oled_Write_Data(0);
		}
	}
}

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 i = 0;
	int j = 0;
	
/*--  ??:  ?  --*/
/*--  ??12;  ??????????:?x?=16x16   --*/
code char h1[] = {0x00,0x04,0xF4,0x54,0x54,0x54,0x54,0xFF,0x54,0x54,0x54,0x54,0xF4,0x04,0x00,0x00};
code char h2[] = {0x04,0x44,0x35,0x05,0x75,0x85,0x85,0x8F,0xB5,0x85,0xE5,0x05,0x15,0x66,0x0C,0x00};

/*--  ??:  ?  --*/
/*--  ??12;  ??????????:?x?=16x16   --*/
code char z1[] = {0x00,0xE0,0x00,0xFF,0x00,0x20,0xC0,0x00,0xFE,0x00,0x20,0xC0,0x00,0xFF,0x00,0x00};
code char z2[] = {0x81,0x40,0x30,0x0F,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0xFF,0x00,0x00};

/*--  ??:  ?  --*/
/*--  ??12;  ??????????:?x?=16x16   --*/
code char b1[] = {0x20,0x20,0xFF,0x20,0x24,0xF4,0x54,0x54,0x54,0xFF,0x54,0x55,0x56,0xF4,0x04,0x00};
code char b2[] = {0x00,0x00,0xFF,0x00,0x08,0x0B,0x19,0x69,0x09,0x0B,0x49,0x89,0x7D,0x0B,0x08,0x00};

/*--  ??:  ?  --*/
/*--  ??12;  ??????????:?x?=16x16   --*/
code char l1[] = {0x00,0x00,0x3E,0x22,0x22,0xBE,0x62,0x22,0x22,0x3E,0x22,0x22,0x3E,0x00,0x00,0x00};
code char l2[] = {0x80,0x84,0x84,0x42,0x45,0x49,0x31,0x21,0x11,0x09,0x05,0x03,0x00,0x00,0x00,0x00};

/*--  ??:  ?  --*/
/*--  ??12;  ??????????:?x?=16x16   --*/
code char x1[] = {0x00,0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,0x00};
code char x2[] = {0x04,0x04,0x44,0xE7,0x54,0x4C,0x44,0x44,0x44,0x44,0x54,0x67,0xC4,0x04,0x04,0x00};

/*--  ??:  ?  --*/
/*--  ??12;  ??????????:?x?=16x16   --*/
code char c1[] = {0x00,0xFE,0x22,0x5A,0x86,0x08,0x88,0x68,0x18,0x0F,0xE8,0x08,0x08,0x08,0x08,0x00};
code char c2[] = {0x00,0xFF,0x04,0x08,0x07,0x20,0x11,0x0D,0x41,0x81,0x7F,0x01,0x05,0x09,0x30,0x00};

/*--  ??:  ?  --*/
/*--  ??12;  ??????????:?x?=16x16   --*/
code char cc1[] = {0x00,0x00,0xC0,0x5F,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x5F,0x40,0x40,0x00,0x00};
code char cc2[] = {0x80,0x60,0x1F,0x04,0xFD,0x85,0x45,0x0D,0x15,0x25,0x25,0x55,0x4D,0x84,0x84,0x00};
	
	Oled_Init(); //1. OLED初始化
	Oled_Clear_Screen();//2. 清屏
	
	//2. 选择一个位置
	//2.1 确认页寻址模式
	Oled_Write_Cmd(0x20);
	Oled_Write_Cmd(0x02);
	
	//2.2 选择PAGE0 1011 0000
	// 0xB0
	Oled_Write_Cmd(0xb0); //1011 0000
	Oled_Write_Cmd(0x00);
	Oled_Write_Cmd(0x10);//页寻址模式
	
	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]);
	}
	for(i = 0; i < 16; i++)
	{
		Oled_Write_Data(l1[i]);
	}
	for(i = 0; i < 16; i++)
	{
		Oled_Write_Data(x1[i]);
	}
	for(i = 0; i < 16; i++)
	{
		Oled_Write_Data(c1[i]);
	}
	for(i = 0; i < 16; i++)
	{
		Oled_Write_Data(cc1[i]);
	}
	
	Oled_Write_Cmd(0xb1); //1011 0001
	Oled_Write_Cmd(0x00);
	Oled_Write_Cmd(0x10);
	
	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]);
	}
	for(i = 0; i < 16; i++)
	{
		Oled_Write_Data(l2[i]);
	}
	for(i = 0; i < 16; i++)
	{
		Oled_Write_Data(x2[i]);
	}
	for(i = 0; i < 16; i++)
	{
		Oled_Write_Data(c2[i]);
	}
	for(i = 0; i < 16; i++)
	{
		Oled_Write_Data(cc2[i]);
	}
																				
	while(1);
}

在这里插入图片描述

以图片OLED显示“皮卡丘”

Oled_Show_Image()

void Oled_Show_Image()
{
	int i = 0;
	int j = 0;
	
	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++)
		{
			Oled_Write_Data(Image[j]);
		}
	}
}

完整程序

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

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

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

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

char IIC_ack()
{
	char flag;
	
	scl = 0;
	sda = 1;
	
	scl = 1;
	_nop_();
	
	flag = sda;
	_nop_();
	scl = 0;
	_nop_();
	
	
	return flag;
}

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

void Oled_Write_Cmd(char cmd)
{
	IIC_start();
	
	IIC_sendByte(0x78);
	
	IIC_ack();
	
	IIC_sendByte(0x00);
	
	IIC_ack();
	
	IIC_sendByte(cmd);
	
	IIC_ack();
	
	IIC_stop();
}

void Oled_Write_Data(char data1)
{
	IIC_start();
	
	IIC_sendByte(0x78);
	
	IIC_ack();
	
	IIC_sendByte(0x40);
	
	IIC_ack();
	
	IIC_sendByte(data1);
	
	IIC_ack();
	
	IIC_stop();
}

void Oled_Clear_Screen()
{
	int i = 0;
	int j = 0;
	
	for(i = 0; i < 8 ;i++)
	{
		Oled_Write_Cmd(0xb0 + i);
		Oled_Write_Cmd(0x10);
		for(j = 0;j <128;j++)
		{
			Oled_Write_Data(0);
		}
	}
}

code unsigned char Image[] = {/*--  ???????:C:\Users\asus\Desktop\???.bmp  --*/
/*--  ??x??=128x64  --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x08,0x08,0x08,
0x08,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0x08,0x08,0xC8,0x78,0x18,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0xC0,0x40,0xC0,0x60,0x20,0x30,0x10,0x10,0x18,0x08,0x0C,0x04,0x04,0x06,0x02,
0x02,0x03,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,0xC0,0x7E,0x03,0x00,0x00,0x00,
0x00,0x80,0x80,0x80,0x80,0xFF,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,
0x40,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,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,0xFF,0x00,0x00,0x00,0x00,0x00,
0x00,0x02,0x06,0x8C,0xD8,0xF0,0x98,0x06,0x03,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,0xFF,0x10,0x30,0x20,0x20,0x20,0x60,0x40,0xC0,0x80,0x80,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,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,0x1F,0x00,0x00,0x00,0x00,0x18,
0x0C,0x06,0x03,0x01,0x00,0x00,0x01,0x03,0x06,0x0C,0x18,0x10,0x30,0x20,0x60,0x40,
0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x08,
0x08,0x08,0x08,0x0F,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x0F,0x08,0x08,0x08,
0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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_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_Show_Image()
{
	int i = 0;
	int j = 0;
	
	for(i = 0; i < 8 ;i++)
	{
		Oled_Write_Cmd(0xb0 + i);
		Oled_Write_Cmd(0x10);
		for(j = 128 * i;j < 128 * (i+1);j++)
		{
			Oled_Write_Data(Image[j]);
		}
	}
}

void main()
{
	int i = 0;
	int j = 0;
	
	Oled_Init();
	Oled_Clear_Screen();
	Oled_Write_Cmd(0x20);
	Oled_Write_Cmd(0x02);
	
	Oled_Write_Cmd(0xb0); //1011 0000
	Oled_Write_Cmd(0x00);
	Oled_Write_Cmd(0x10);
	
	Oled_Show_Image();
																				
	while(1);
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值