OLED屏幕的使用
1、I2C总线
IIC同步、半双工,带数据应答的总线,IIC串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL,其时钟信号是由主控器件产生。所有接到IIC总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。对于并联在一条总线上的每个IC都有唯一的地址。
如上图:
所有I2C设备的SCL连在一起,SDA连在一起
设备的SCL和SDA均要配置成开漏输出模式
SCL和SDA各添加一个上拉电阻,阻值一般为4.7KΩ左右
开漏输出和上拉电阻的共同作用实现了“线与”的功能,此设计主要是为了解决多机通信互相干扰的问题
2、传输信号
IIC总线在传输数据的过程中一共有三种类型信号,分别为:开始信号、结束信号和应答信号。
- 起始信号
主控设备将时钟线SCL置为高电平后,将SDA由高电平变为低电平,代表向被控设备发送起始信号。
- 终止信号
主控设备将时钟线SCL置为高电平后,将SDA由低电平变为高电平,代表向被控设备发送起始信号。
- 应答信号
主控设备将时钟线SCL置为高电平后,检测SDA的电平。应答信号为低电平时,规定为有效应答位(ACK,简称应答位),表示接收器已经成功地接收了该字节;应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。
3、主控设备和被控设备通信的过程
3.1、向被控设备发送数据
- 发送起始信号
- 发送一个字节的数据,里面包含了目标设备的地址7位+读/写控制位,共8位
- 检测应答信号(被控设备发出的)
- 发送需要发送的数据(一个字节)
- 检测应答信号(被控设备发出的)
- 发送停止信号
3.2、向被控设备接收数据
- 发送起始信号
- 发送一个字节的数据,里面包含了目标设备的地址7位+读/写控制位,共8位
- 检测应答信号(主控设备发出的)
- 发送需要发送的数据(一个字节)
- 检测应答信号(主控设备发出的)
- 发送停止信号
3.3、向被控设备发送数据的时序图
【注意】
- SCL的高低电平都是由主机控制的
- 每传输一个字节的数据才
- 应答信号的0/1是从机给SDA上写入的
3.4、代码程序
I2C.c文件
#include <REGX52.H>
#include "intrins.h"
sbit SCL = P0^1;//定义单片机的P0.1口位时钟线
sbit SDA = P0^2;//定义单片机的P0.2口位数据线
/*
* 时钟线SCL高电平时:单片机给数据线写入由高电平变为低电平
* 代表发送起始信号。
*/
void I2C_Start()//单片机给从机发送起始信号,ok
{
SCL = 0;
SCL = 1;
SDA = 1;
_nop_();//5us
SDA = 0;
_nop_();//5us
SCL = 0;
}
/*
* 时钟线SCL高电平时:单片机给数据线写入由低电平变为高电平
* 代表发送起始信号。
*/
void I2C_Stop()//单片机给从机发送停止信号,ok
{
SCL = 0;
SCL = 1;
SDA = 0;
_nop_();//5us
SDA = 1;
_nop_();//5us
SDA = 0;
}
/*
* 单片机给从机发送一个数据,从机都会给单片机一个
* 应答信号ACK,如果这个是低电平0表示数据传输成功
* 如果是高电平1表示数据传输失败。(注意:应答信号是从机发出的)
*/
unsigned char ACK(void)
{
unsigned char flag;
SCL = 1;
_nop_();
flag = SDA;
_nop_();
SCL = 0;
return flag;//查看flag的值是多少,
}
/*
* 单片机给从机发送数据,SCL低电平时:单片机给数据线(SDA)上写入数据
* SCL高电平时:单片机不能给数据线(SDA)写入数据(原因:在SCL=1时,单片
* 机给数据线SDA写入数据,代表起始信号或者停止信号)。只能给从机读取数据线
* 上面的数据。
*/
/*
* 每次发送都是发送1位,依次发送8次,即发送一个字节。
* 每发送一个字节,主机都要查看从机是否返回应答
*/
void I2C_SendByte(char Byte) //er
{
unsigned char i;
for(i = 0; i<8; i++)
{
SCL = 0;//给时钟线拉低,准备在数据线上写入数据
SDA = Byte & 0x80;//写入数据,每次写入只能写入1位数据,从最高位开始写
_nop_();
SCL = 1;//拉高,让从机开始读取数据。
_nop_();
SCL =0;//拉低,位下一次写数据做准备
Byte = Byte << 1;//左移移位,让次高位移动到高位
}
}
4、OLED模块的使用
4.1、传输数据的步骤
OLED模块数据传输就是通过I2C总线进行传输的,所以此模块一共有4个引脚,而数据传输也要遵循I2C通信协议。而在使用此模块时,和LCD1602显示屏一样,需要对它发送一些指令进行配置,以便于显示。
如上图所示:
-
单片机先发送一个起始信号S
-
发送一个字节的数据,里面包含了目标设备的地址7位+读/写控制位(R/W),共8位
如图:地址的7位前6位为固定的0111 10,后1位为我们自己设置(0/1),所以一共能连接2个OLED模块。而最后一位为R/W,1为读取数据,0为向模块写入数据。 -
然后检测一个应答信号
-
然后传输一个配置字节
如图:CO被设置为0时表示将开始传输信息了。D/C表示数据/指令控制位,为1是写入数据,为0是写入指令。而后面6位是固定的00 0000 -
然后一个应答信号
-
然后开始传输一个字节的数据/指令
-
然后传输一个配置字节
-
然后开始传输一个字节的数据/指令
-
传输完毕后,发送一个停止信号P
【注意】
每次发送一个字节的数据之前都要发送一个配置字节
4.2、显示的原理
OLED模块的屏幕像素是64x128。1行为128的LED点阵,1列为64的LED点阵。我们将1列的每8个点阵分为1组,所以一共有8组。分别为Page0~Page7。
我们以Page2为例,高电平1点亮,低电平0熄灭。且高位在下,低位在上。
4.3、显示配置
在显示前,需要指定的显示位置,而下图被框的是选址模式的配置和选择显示列的配置,
如图:先发送0x20设置内存然后在发送0x20选择页寻址模式。发送0x03,在发送0x16;选择在100列显示。
- 水平寻址模式
自动向左水平填充, - 垂直寻址模式
- 页寻址模式
【注】
寻址模式不配置,默认是页寻址模式。
配置完寻址模式后,然后选择Page显示。如下图:选择Page的8为二进制数前5位为固定的1011 0(0xB),,后3位为我们自己配置,后3位为000,选择Page0。为001,选择Page1。依次类推
4.4、代码程序
4.4.1、显示字符A
OLED.c文件
#include <REGX52.H>
#include "intrins.h"
#include "I2C.h"
/*
* 使用Oled显示模块时,需要给他一些指令进行配置
* 例如:显示在什么地方。然后在给模块发送数据进行显示
*/
void Oled_Write_Cmd(unsigned char command)//给Oled写命令 ok
{
I2C_Start();//发送起始信号
I2C_SendByte(0x78);//011110 00寻址(OLED模块的地址,每个I2C设备都有地址)
ACK();
I2C_SendByte(0x00);//xx000000,控制命令。01写入数据,00写入指令
ACK();
I2C_SendByte(command);
ACK();
I2C_Stop();
}
void Oled_Write_Data(unsigned char datas)
{
I2C_Start();//发送起始信号
I2C_SendByte(0x78);//011110 00寻址(OLED模块的地址,每个I2C设备都有地址)
ACK();
I2C_SendByte(0x40);//xx00 0000,控制命令。01写入数据,00写入指令
ACK();
I2C_SendByte(datas);
ACK();
I2C_Stop();
}
void Oled_Init()//Oled的初始化
{
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()//清零,每个都写入0
{
unsigned char i,j;
for(i = 0; i<8; i++)
{
Oled_Write_Cmd(0x20);
Oled_Write_Cmd(0x02);
Oled_Write_Cmd(0xB0+i);//选择Page
Oled_Write_Cmd(0x00);
Oled_Write_Cmd(0x10); //每一页都从第1列开始写入
for(j = 0; j<128; j++)
{
Oled_Write_Data(0x00);
}
}
}
主函数mian.c文件
/*****在OLED显示一个字符A****/
#include <REGX52.H>
#include "Oled.h"
void main(void)
{
/*
显示'A' 宽x高=8x16 ,高16,需要2个Page才能显示。所以要Page0和Page1
0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00
0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20
*/
char A1[8] = {0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00};
char A2[8] = {0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20};
unsigned char i;
Oled_Init();
Oled_Clear();
Oled_Write_Cmd(0x20);//设置内存
Oled_Write_Cmd(0x02);//选择页选址模式
Oled_Write_Cmd(0xB0);//选择要显示的(Page0~7)1011 0xxx 选择Page0,第一行开始显示
Oled_Write_Cmd(0x00);//0000 xxxx(1111)低位 列
Oled_Write_Cmd(0x10);//0001 xxxx(0111)高位
//代表位000 0000 ,为1列
for(i = 0; i<8; i++)
{
Oled_Write_Data(A1[i]);
}
Oled_Write_Cmd(0xB1);//选择要显示的(Page0~7)1011 0xxx 选择Page1,第一行开始显示
Oled_Write_Cmd(0x00);//0000 xxxx(1111)低位
Oled_Write_Cmd(0x10);//0001 xxxx(0111)高位
for(i = 0; i<8; i++)
{
Oled_Write_Data(A2[i]);
}
while(1);
}
4.4.2、显示一段话
我们通过取模软件,将“我是你爸爸”这段话的数据取出来。
主函数main.c文件
/*-- 文字: 我 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
//0x20,0x24,0x24,0x24,0xFE,0x23,0x22,0x20,0x20,0xFF,0x20,0x22,0x2C,0xA0,0x20,0x00,
//0x00,0x08,0x48,0x84,0x7F,0x02,0x41,0x40,0x20,0x13,0x0C,0x14,0x22,0x41,0xF8,0x00,
/*-- 文字: 是 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
//0x00,0x00,0x00,0x7F,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x7F,0x00,0x00,0x00,0x00,
//0x81,0x41,0x21,0x1D,0x21,0x41,0x81,0xFF,0x89,0x89,0x89,0x89,0x89,0x81,0x81,0x00,
/*-- 文字: 你 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
//0x00,0x80,0x60,0xF8,0x07,0x40,0x20,0x18,0x0F,0x08,0xC8,0x08,0x08,0x28,0x18,0x00,
//0x01,0x00,0x00,0xFF,0x00,0x10,0x0C,0x03,0x40,0x80,0x7F,0x00,0x01,0x06,0x18,0x00,
/*-- 文字: 爸 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
//0x80,0x80,0x48,0x44,0x26,0x29,0x10,0x10,0x28,0x25,0x42,0x44,0x88,0x80,0x80,0x00,
//0x00,0x00,0x00,0x7F,0x89,0x89,0x89,0x8F,0x89,0x89,0x89,0x9F,0x80,0xE0,0x00,0x00,
/*-- 文字: 爸 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
//0x80,0x80,0x48,0x44,0x26,0x29,0x10,0x10,0x28,0x25,0x42,0x44,0x88,0x80,0x80,0x00,
//0x00,0x00,0x00,0x7F,0x89,0x89,0x89,0x8F,0x89,0x89,0x89,0x9F,0x80,0xE0,0x00,0x00,
//一个字的高度x宽度 = 16X16,一共有5个字,所以一共的高度x宽度 = 16x80。所以一共有2x80个数据。所以需要2个Page用来显示上半部份,和下半部分
#include <REGX52.H>
#include "Oled.h"
void main(void)
{
//上半部分
char wsnbb1[] = { 0x20,0x24,0x24,0x24,0xFE,0x23,0x22,0x20,
/*我*/ 0x20,0xFF,0x20,0x22,0x2C,0xA0,0x20,0x00,
0x00,0x00,0x00,0x7F,0x49,0x49,0x49,0x49,
/*是*/ 0x49,0x49,0x49,0x7F,0x00,0x00,0x00,0x00,
0x00,0x80,0x60,0xF8,0x07,0x40,0x20,0x18,
/*你*/ 0x0F,0x08,0xC8,0x08,0x08,0x28,0x18,0x00,
0x80,0x80,0x48,0x44,0x26,0x29,0x10,0x10,
/*爸*/ 0x28,0x25,0x42,0x44,0x88,0x80,0x80,0x00,
0x80,0x80,0x48,0x44,0x26,0x29,0x10,0x10,
/*爸*/ 0x28,0x25,0x42,0x44,0x88,0x80,0x80,0x00};
//下半部分
code char wsnbb2[] = { 0x00,0x08,0x48,0x84,0x7F,0x02,0x41,0x40,
0x20,0x13,0x0C,0x14,0x22,0x41,0xF8,0x00,
0x81,0x41,0x21,0x1D,0x21,0x41,0x81,0xFF,
0x89,0x89,0x89,0x89,0x89,0x81,0x81,0x00,
0x01,0x00,0x00,0xFF,0x00,0x10,0x0C,0x03,
0x40,0x80,0x7F,0x00,0x01,0x06,0x18,0x00,
0x00,0x00,0x00,0x7F,0x89,0x89,0x89,0x8F,
0x89,0x89,0x89,0x9F,0x80,0xE0,0x00,0x00,
0x00,0x00,0x00,0x7F,0x89,0x89,0x89,0x8F,
0x89,0x89,0x89,0x9F,0x80,0xE0,0x00,0x00,};
unsigned char i;
Oled_Init();
Oled_Clear();
Oled_Write_Cmd(0x20);//设置内存
Oled_Write_Cmd(0x02);//选择页选址模式
/*显示上半部分*/
Oled_Write_Cmd(0xB0);//选择要显示的(Page0~7)1011 0xxx 行
Oled_Write_Cmd(0x00);//0000 xxxx(1111)低位 列
Oled_Write_Cmd(0x10);//0001 xxxx(0111)高位
for(i = 0; i<sizeof(wsnbb1); i++)
{
Oled_Write_Data(wsnbb1[i]);
}
/*显示下半部分*/
Oled_Write_Cmd(0xB1);//选择要显示的(Page0~7)1011 0xxx 行
Oled_Write_Cmd(0x00);//0000 xxxx(1111)低位 列
Oled_Write_Cmd(0x10);//0001 xxxx(0111)高位
for(i = 0; i<sizeof(wsnbb2); i++)
{
Oled_Write_Data(wsnbb2[i]);
}
while(1);
4.4.3、显示图片
显示图片
通过取模软件将数据取出
主函数main.c文件
/*-- 调入了一幅图像:C:\Users\fxb\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,0xC0,0x60,0x20,0x20,0x20,
0xE0,0xE0,0xA0,0x20,0x20,0x60,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFA,0x0F,0x04,0x0C,0x08,0x08,
0x18,0x10,0x10,0x10,0x10,0x10,0x19,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,0x00,0xE0,0x3F,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
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,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,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,0xC0,0x40,0x40,0x40,0x40,0x40,
0xC0,0xFC,0xC0,0xFC,0xC0,0x0C,0xF8,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xE0,0x3C,0xF0,0x1C,0xF0,0x98,0xC0,0x40,
0x40,0x40,0x40,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x40,0x40,0x40,0x40,0x40,0xF8,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,0xF8,0x08,
0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x20,0xF8,0x20,0xF8,0x88,0x88,0xF8,0x88,0xF8,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
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,0x61,0xC0,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0x00,0x03,0x01,0x03,0x02,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0F,0x0C,0x07,0x02,0x03,0x01,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x87,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x10,0x10,0x08,0x04,0x02,0x01,0x02,0x04,0x08,0x10,0x10,0x00,0x10,0x0C,0x07,0x00,
0x00,0x00,0x1F,0x10,0x10,0x0C,0x00,0x12,0x1F,0x01,0x1F,0x10,0x10,0x10,0x10,0x11,
0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,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,0x0C,0x18,
0x70,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0xC0,0x40,0x60,0x20,0x30,
0x10,0x18,0x08,0x0C,0x06,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0x01,0x01,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,
0x02,0x02,0x02,0x03,0x01,0x01,0x01,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,
*/
//高x宽 = 64x128,一共有8x128个数据。所以需要8个Page和所有的列
#include <REGX52.H>
#include "Oled.h"
void main(void)
{
unsigned char i;
unsigned int j;
/*-- 宽度x高度=128x64 ,一共由128*8个数--*/
code char DJB[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,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,0x60,0x20,0x20,0x20,
0xE0,0xE0,0xA0,0x20,0x20,0x60,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFA,0x0F,0x04,0x0C,0x08,0x08,
0x18,0x10,0x10,0x10,0x10,0x10,0x19,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,0x00,0xE0,0x3F,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
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,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,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,0xC0,0x40,0x40,0x40,0x40,0x40,
0xC0,0xFC,0xC0,0xFC,0xC0,0x0C,0xF8,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xE0,0x3C,0xF0,0x1C,0xF0,0x98,0xC0,0x40,
0x40,0x40,0x40,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x40,0x40,0x40,0x40,0x40,0xF8,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,0xF8,0x08,
0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x20,0xF8,0x20,0xF8,0x88,0x88,0xF8,0x88,0xF8,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
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,0x61,0xC0,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0x00,0x03,0x01,0x03,0x02,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0F,0x0C,0x07,0x02,0x03,0x01,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x87,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x10,0x10,0x08,0x04,0x02,0x01,0x02,0x04,0x08,0x10,0x10,0x00,0x10,0x0C,0x07,0x00,
0x00,0x00,0x1F,0x10,0x10,0x0C,0x00,0x12,0x1F,0x01,0x1F,0x10,0x10,0x10,0x10,0x11,
0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,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,0x0C,0x18,
0x70,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0xC0,0x40,0x60,0x20,0x30,
0x10,0x18,0x08,0x0C,0x06,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0x01,0x01,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,
0x02,0x02,0x02,0x03,0x01,0x01,0x01,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
};
Oled_Init();
Oled_Clear();
Oled_Write_Cmd(0x20);//设置内存
Oled_Write_Cmd(0x02);//选择页选址模式
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++)//第一Page显示完后,第二个Page的第一列显示数组的第129个数据。
{
Oled_Write_Data(DJB[j]);
}
}
while(1);
}