SSD1306

  • OLED特性
  • 手册说明
    • GDDRAM寻址模式(0x20)
    • I2C地址与时序
  • 软件配置
    • I2C的配置
    • OLED初始化过程
    • 显示中文
    • 显示英文
    • 显示图片

OLED特性

型号:SSD1306
SSD1306是一款单芯片CMOS OLED/PLED驱动器,带有用于有机/聚合物发光二极管点阵式图形显示系统的控制器。它由128个段和64个公共区组成。该集成电路是为普通阴极型OLED面板设计的。

SSD1306内置对比度控制、显示RAM和振荡器,减少了外部元件的数量和功耗。它有256步亮度控制。数据/命令通过硬件可选的6800/8000系列兼容并行接口、I2C接口或串行外围接口从通用MCU发送。

它适用于许多小型便携式应用,如手机子显示器、MP3播放器和计算器等。

实物图

手册说明

GDDRAM是存放显示数据的,其大小为128x64bits.RAM划分为8个页,从PAGE0~PAGE7.
每页内1个SEG对于一个Byte数据,一页有128Byte组成。一帧显示数据为1024Byte

从下图中可以看到SEG与COM的关系
整个画面有8个页面,每个页面有8个COM,128个SEG

涉及到一些配置寄存器,这就要查看手册,手册中有好几组寄存器

一、基本命令

命令 含义 使用说明
81 设置对比度 0x00~0xff 双字节命令,1-256对比等级,值增大,对比度增加
A4/A5 全显示开关 A4 x0=0b 重新显示RAM内容;A5 X0=1b 全部显示开
A6/A7 设置正常/翻转显示 A6,X[0]=0b,正常显示;A7,X[0]=1b:翻转显示
AE/AF 设置显示开/关 AE,X[0]=0b,关(睡眠模式);AF,X[0]=01b ON

二、地址设置命令

命令 含义 使用说明
00-0F 页地址模式下,设置低列起始地址 起始行寄存器显示在重置后设置0000b
10-1F 页地址模式下,设置高列起始地址 起始行寄存器显示在重置后设置0000b
20 设置寄存器地址模式 A[1:0]=00b水平地址模式,01b 垂直地址模式,10页地址模式,11b无效
21 设置列地址 设置列起始结束地址,A[6:0],start ;B[6:0] end
22 设置页地址 A[2:0]:起始地址范围07d,B[2:0]页结束地址范围07d(复位:7d)
B0~B7 在页地址模式下,设置页起始地址 (PAGE0~PAGE7) for Page Addressing Modeusing X[2:0]

三、硬件配置命令

命令 含义 使用说明
40~7F 设置显示起始行
A0/A1 设置SEG重映射 A0h,X[0]=0b:列地址0,映射到SEG0(复位);A1h,x[0]=1b:列地址127映射到SEG0
A8 设置多路复用
C0/C8 设置COM输出扫描模式 C0h,X[3]=0b:z=正常模式扫描 COM0COM[N-1];C8xX[3]=1b:重映射模式,扫描COM[N-1]COM[0]
D3 设置显示偏移 设置垂直偏移
DA 设置COM引脚硬件配置

四、滚动命令

命令 含义 使用说明
26/27 垂直水平滚动 26h x[0]=0 ,水平向右滚动;27 x[0]=1 水平向左滚动
29/2A 垂直滚动 29,向右+(上下);2A向左+(上下)

在测试时,26,27命令没有效果,29,2A可以实现左右,左右+上下滚动的效果
开启命令码后,设置以下A,B,C,D,E参数,参数如下:
滚动实例,在初始化时调用,26/27没有实验成功,29/2A可以实现滚动

void roll()
{WriteCmd(0x2e);//OFFWriteCmd(0x2A);//29,2aWriteCmd(0x00);//A:Dummy byteWriteCmd(0x00);//B:设置页起始地址WriteCmd(0x02);//C:滚动速度 000b-5frames 100b-3framesWriteCmd(0x01);//D:设置页结束地址WriteCmd(0x00);//E:垂直滚动偏移WriteCmd(0x2f);//START ROLL
}

GDDRAM寻址模式(0x20)

有三种模式设置,例如:

 OLED_WriteC(0X20);  // 设置模式OLED_WriteC(0X00);   // 设置值(水平寻址模式 )

页寻址、A[1:0]=10

水平寻址、A[1:0]=00

垂直寻址 A[1:0]=01

I2C地址与时序


这段话的意思是,SA0 提供可扩展的从机地址,通过SA0(D/C#)脚的上拉和下拉来设置从机地址,拉高则为1,即 0111101;拉低则为0,即0111100
最后一个是读写R/W

I2C地址为0x78

I2C收发数据开始和结束时序

IIC写入时序如下所示:

  • 主机先发起开始(START)信号(SDA从高到底,SCL从底到高),

  • 然后发送1byte首字节,包括从机地址(7位)和读写数据位(1位,最低位,0为写模式),

  • 驱动器识别从机地址为本机地址之后,将会发出 应答信号(ACK)

  • 主机收到从机的应答信号之后,随后传输命令或者数据。一个控制字节主要由CO 和 D/C# 位后面再加上六个0组成的。

  • 接受每一个控制字节或者数据字节都要产生ACK信号

  • 传输完毕之后主机发出结束(STOP)信号,SDA 从低到高 SCL保持高

软件配置

  • I2C配置,配置SCL、SDL的GPIO
    SCL <—>PB6
    SDA <—>PB7
  • 根据手册配置OLED

I2C的配置

#define OLED_I2C                          I2C1
#define OLED_I2C_CLK                      RCC_APB1Periph_I2C1
#define OLED_I2C_CLK_INIT                                 RCC_APB1PeriphClockCmd#define OLED_I2C_SCL_PIN                  GPIO_Pin_6
#define OLED_I2C_SCL_GPIO_PORT            GPIOB
#define OLED_I2C_SCL_GPIO_CLK             RCC_APB2Periph_GPIOB
#define OLED_I2C_SCL_SOURCE               GPIO_PinSource6
#define OLED_I2C_SCL_AF                   GPIO_AF_I2C1#define OLED_I2C_SDA_PIN                  GPIO_Pin_7
#define OLED_I2C_SDA_GPIO_PORT            GPIOB
#define OLED_I2C_SDA_GPIO_CLK             RCC_APB2Periph_GPIOB
#define OLED_I2C_SDA_SOURCE               GPIO_PinSource7
#define OLED_I2C_SDA_AF                   GPIO_AF_I2C1void I2C_Configuration(void)
{I2C_InitTypeDef  I2C_InitStructure;GPIO_InitTypeDef  GPIO_InitStructure; //外设I2C时钟使能OLED_I2C_CLK_INIT(OLED_I2C_CLK,ENABLE);//外设GPIO时钟使能RCC_APB2PeriphClockCmd(OLED_I2C_SCL_GPIO_CLK | OLED_I2C_SDA_GPIO_CLK,ENABLE);/* I2C_SCL、I2C_SDA*/GPIO_InitStructure.GPIO_Pin = OLED_I2C_SCL_PIN;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; GPIO_Init(OLED_I2C_SCL_GPIO_PORT, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = OLED_I2C_SDA_PIN;GPIO_Init(OLED_I2C_SDA_GPIO_PORT, &GPIO_InitStructure);  /* I2C */I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;    I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;I2C_InitStructure.I2C_OwnAddress1 =OLED_ADDRESS;    //I2C地址I2C_InitStructure.I2C_Ack = I2C_Ack_Enable ;    I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;  //寻址方式I2C_InitStructure.I2C_ClockSpeed = I2C_Speed;//速度I2C_Init(OLED_I2C, &I2C_InitStructure);  //使能初始化I2C_Cmd(OLED_I2C, ENABLE); //使能I2C
}

通过I2C写数据

//硬件I2C时序配置
void I2C_WriteByte(uint8_t addr,uint8_t data)
{//Checks whether the specified I2C flag is set or not.while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));I2C_GenerateSTART(I2C1, ENABLE);//产生I2C起始信号while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));/*EV5,,主模式*/I2C_Send7bitAddress(I2C1, OLED_ADDRESS, I2C_Direction_Transmitter);//器件I2C地址0x78while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));I2C_SendData(I2C1, addr);//寄存器地址while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));I2C_SendData(I2C1, data);//数据while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));I2C_GenerateSTOP(I2C1, ENABLE);//关闭I2C
}//写命令
void WriteCmd(unsigned char I2C_Command)
{I2C_WriteByte(0x00, I2C_Command);
}
//写数据
void WriteDat(unsigned char I2C_Data)
{I2C_WriteByte(0x40, I2C_Data);
}

OLED初始化过程

  • 关闭显示(AEH)
  • 128x64 显示模式
  • 恢复到默认的SEG和COM映射关系(A0H,D3H-00H)
  • 清除串行接口中移位寄存器内的数据
  • 显示开始行设为0
  • 列地址计数器重置为0
  • COM输出的默认扫描方向(C0H)
  • 对比度寄存器初始化为7FH
  • 正常显示模式(A4H)
//手册中提供的初始化函数
void OLED_Init(void)
{Delay_s(1);        // 1s,WriteCmd(0xAE); //屏幕关WriteCmd(0x20);  //设置寻址模式WriteCmd(0x10); //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page    Addressing Mode (RESET);11,InvalidWriteCmd(0xb0);    //Set Page Start Address for Page Addressing Mode,0-7WriteCmd(0xc8);    //COM扫描反向WriteCmd(0x00); //起始列地址低位WriteCmd(0x10); //起始列地址高位WriteCmd(0x40); //--set start line addressWriteCmd(0x81); //设置对比度WriteCmd(0xff); //亮度调节 范围0x00~0xffWriteCmd(0xa1); //set segment re-map 0 to 127WriteCmd(0xa6); //正常显示WriteCmd(0xa8); //设置MUX数(1 to 64)WriteCmd(0x3F); //MUX=63 显示63行WriteCmd(0xa4); //0xa4,输出 RAM 内容;0xa5,忽略 RAM 内容WriteCmd(0xd3); // 设置显示偏移WriteCmd(0x00); //没有偏移WriteCmd(0xd5); //设置显示时钟分频数、振荡器频率WriteCmd(0xf0); //--set divide ratioWriteCmd(0xd9); //设置预充电周期WriteCmd(0x22); //WriteCmd(0xda); //COM引脚配置WriteCmd(0x12);//启用左右反置WriteCmd(0xdb); //设置 vcomh 输出WriteCmd(0x20); //0x20,0.77xVccWriteCmd(0x8d); //--set DC-DC enableWriteCmd(0x14); //WriteCmd(0xaf); //--turn on oled panel
}//OLED_ON 从休眠中唤醒
void OLED_ON(void)
{WriteCmd(0X8D);  //WriteCmd(0X14);  //WriteCmd(0XAF);  //
}
// OLED_OFF 休眠
void OLED_OFF(void)
{WriteCmd(0X8D);  //WriteCmd(0X10);  //WriteCmd(0XAE);  //
}//设置读写坐标
void OLED_SetPos(unsigned char x, unsigned char y) //设置起始坐标
{ WriteCmd(0xb0+y);//y取值 0 -7  (B0h~B7h)WriteCmd(((x&0xf0)>>4)|0x10);//取高位WriteCmd((x&0x0f)|0x01);//取低位
}
void OLED_Fill(unsigned char fill_Data)
{unsigned char m,n;for(m=0;m<8;m++){//Set Page Start Address for Page Addressing Mode (B0h~B7h)WriteCmd(0xb0+m);     //page0-page1WriteCmd(0x00);        //low column start addressWriteCmd(0x10);       //high column start addressfor(n=0;n<128;n++){WriteDat(fill_Data);}}
}
void OLED_CLS(void)
{OLED_Fill(0x00);
}

显示中文

字位图(bmp)提取软件 pctolcd2002

所需要的配置

生成的汉字bmp数据
//16*16点阵,维护世界和平

unsigned char F16x16[]=
{0x20,0x30,0xAC,0x63,0x20,0x58,0x20,0xF8,0x4F,0x48,0x49,0xFA,0x48,0x48,0x08,0x00,0x22,0x67,0x22,0x12,0x12,0x12,0x00,0xFF,0x22,0x22,0x22,0x3F,0x22,0x22,0x20,0x00,//维0x10,0x10,0x10,0xFF,0x10,0x90,0x00,0xF8,0x88,0x89,0x8E,0x88,0x88,0x88,0xF8,0x00,0x04,0x44,0x82,0x7F,0x81,0x40,0x30,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,//护0x20,0x20,0x20,0xFE,0x20,0x20,0xFF,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x47,0x44,0x44,0x44,0x47,0x40,0x40,0x40,0x00,0x00,//世0x00,0x00,0x00,0xFE,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,0x00,0x08,0x08,0x04,0x84,0x62,0x1E,0x01,0x00,0x01,0xFE,0x02,0x04,0x04,0x08,0x08,0x00,//界0x20,0x24,0x24,0xA4,0xFE,0x23,0x22,0x20,0x00,0xF8,0x08,0x08,0x08,0xF8,0x00,0x00,0x10,0x08,0x06,0x01,0xFF,0x01,0x06,0x00,0x00,0x3F,0x10,0x10,0x10,0x3F,0x00,0x00,//和0x00,0x02,0x02,0x12,0x62,0x02,0x02,0xFE,0x02,0x02,0x42,0x32,0x02,0x02,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,//平
};//显示中文函数
void OLED_ShowCN(unsigned char x, unsigned char y, unsigned char N)
{unsigned char wm=0;unsigned int  adder=32*N;OLED_SetPos(x , y);for(wm = 0;wm < 16;wm++){WriteDat(F16x16[adder]);adder += 1;}OLED_SetPos(x,y + 1);for(wm = 0;wm < 16;wm++){WriteDat(F16x16[adder]);adder += 1;}
}//主函数调用
for(i=0;i<6;i++)//6 代表有6个字
{OLED_ShowCN(22+i*16,0,i); //测试显示中文
}

显示英文

//6*8点阵
const unsigned char F6x8[][6] =
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// sp0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,// !0x00, 0x00, 0x07, 0x00, 0x07, 0x00,// "0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14,// #0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12,// $0x00, 0x62, 0x64, 0x08, 0x13, 0x23,// %0x00, 0x36, 0x49, 0x55, 0x22, 0x50,// &0x00, 0x00, 0x05, 0x03, 0x00, 0x00,// '0x00, 0x00, 0x1c, 0x22, 0x41, 0x00,// (0x00, 0x00, 0x41, 0x22, 0x1c, 0x00,// )0x00, 0x14, 0x08, 0x3E, 0x08, 0x14,// *0x00, 0x08, 0x08, 0x3E, 0x08, 0x08,// +0x00, 0x00, 0x00, 0xA0, 0x60, 0x00,// ,0x00, 0x08, 0x08, 0x08, 0x08, 0x08,// -0x00, 0x00, 0x60, 0x60, 0x00, 0x00,// .0x00, 0x20, 0x10, 0x08, 0x04, 0x02,// /0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E,// 00x00, 0x00, 0x42, 0x7F, 0x40, 0x00,// 10x00, 0x42, 0x61, 0x51, 0x49, 0x46,// 20x00, 0x21, 0x41, 0x45, 0x4B, 0x31,// 30x00, 0x18, 0x14, 0x12, 0x7F, 0x10,// 40x00, 0x27, 0x45, 0x45, 0x45, 0x39,// 50x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,// 60x00, 0x01, 0x71, 0x09, 0x05, 0x03,// 70x00, 0x36, 0x49, 0x49, 0x49, 0x36,// 80x00, 0x06, 0x49, 0x49, 0x29, 0x1E,// 90x00, 0x00, 0x36, 0x36, 0x00, 0x00,// :0x00, 0x00, 0x56, 0x36, 0x00, 0x00,// ;0x00, 0x08, 0x14, 0x22, 0x41, 0x00,// <0x00, 0x14, 0x14, 0x14, 0x14, 0x14,// =0x00, 0x00, 0x41, 0x22, 0x14, 0x08,// >0x00, 0x02, 0x01, 0x51, 0x09, 0x06,// ?0x00, 0x32, 0x49, 0x59, 0x51, 0x3E,// @0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C,// A0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,// B0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,// C0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,// D0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,// E0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,// F0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,// G0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,// H0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,// I0x00, 0x20, 0x40, 0x41, 0x3F, 0x01,// J0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,// K0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,// L0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F,// M0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F,// N0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,// O0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,// P0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q0x00, 0x7F, 0x09, 0x19, 0x29, 0x46,// R0x00, 0x46, 0x49, 0x49, 0x49, 0x31,// S0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,// T0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,// U0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,// V0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F,// W0x00, 0x63, 0x14, 0x08, 0x14, 0x63,// X0x00, 0x07, 0x08, 0x70, 0x08, 0x07,// Y0x00, 0x61, 0x51, 0x49, 0x45, 0x43,// Z0x00, 0x00, 0x7F, 0x41, 0x41, 0x00,// [0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55,// 550x00, 0x00, 0x41, 0x41, 0x7F, 0x00,// ]0x00, 0x04, 0x02, 0x01, 0x02, 0x04,// ^0x00, 0x40, 0x40, 0x40, 0x40, 0x40,// _0x00, 0x00, 0x01, 0x02, 0x04, 0x00,// '0x00, 0x20, 0x54, 0x54, 0x54, 0x78,// a0x00, 0x7F, 0x48, 0x44, 0x44, 0x38,// b0x00, 0x38, 0x44, 0x44, 0x44, 0x20,// c0x00, 0x38, 0x44, 0x44, 0x48, 0x7F,// d0x00, 0x38, 0x54, 0x54, 0x54, 0x18,// e0x00, 0x08, 0x7E, 0x09, 0x01, 0x02,// f0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,// g0x00, 0x7F, 0x08, 0x04, 0x04, 0x78,// h0x00, 0x00, 0x44, 0x7D, 0x40, 0x00,// i0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,// j0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,// k0x00, 0x00, 0x41, 0x7F, 0x40, 0x00,// l0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,// m0x00, 0x7C, 0x08, 0x04, 0x04, 0x78,// n0x00, 0x38, 0x44, 0x44, 0x44, 0x38,// o0x00, 0xFC, 0x24, 0x24, 0x24, 0x18,// p0x00, 0x18, 0x24, 0x24, 0x18, 0xFC,// q0x00, 0x7C, 0x08, 0x04, 0x04, 0x08,// r0x00, 0x48, 0x54, 0x54, 0x54, 0x20,// s0x00, 0x04, 0x3F, 0x44, 0x40, 0x20,// t0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C,// u0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,// v0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C,// w0x00, 0x44, 0x28, 0x10, 0x28, 0x44,// x0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C,// y0x00, 0x44, 0x64, 0x54, 0x4C, 0x44,// z0x14, 0x14, 0x14, 0x14, 0x14, 0x14,// horiz lines
};
void OLED_ShowStr(unsigned char x, unsigned char y, unsigned char ch[], unsigned char TextSize)
{unsigned char c = 0,i = 0,j = 0;switch(TextSize){case 1:{while(ch[j] != '\0'){c = ch[j] - 32;if(x > 126){x = 0;y++;}OLED_SetPos(x,y);for(i=0;i<6;i++)WriteDat(F6x8[c][i]);x += 6;j++;}}break;}
}//主函数调用
OLED_ShowStr(0,3,(unsigned char*)"pace world",1);

显示效果如下:

备注:视频转gif文件 ffmpeg -ss 00:00:03 -t 3 -i input.mov -s 360x360 -r 15 output.gif

显示图片

BMP数据有windows 画图软件生成 分辨率128*64

unsigned char BMP2[] =
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xC0,0xC0,0xC0,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,0xF0,0xF0,0xF0,0xF0,
0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,
0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x3F,0x3F,0x3F,0xFF,0xFF,0xFF,0xFF,
0xFC,0xFC,0xFC,0xFC,0xF0,0xF0,0xF0,0xF0,0xC0,0xC0,0xC0,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,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x03,0x03,0x03,0x03,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x3F,0x3F,0x3F,0x3F,
0xFC,0xFC,0xFC,0xFC,0xF0,0xF0,0xF0,0xF0,0xC0,0xC0,0xC0,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,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,
0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,
0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xF0,0xF0,0xF0,0xF0,0xFC,0xFC,0xFC,0xFC,
0xFF,0xFF,0xFF,0xFF,0x3F,0x3F,0x3F,0x3F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,
0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0xF0,0xF0,0xF0,0xFC,0xFC,0xFC,0xFC,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x0F,0x0F,0x0F,0x0F,0x03,0x03,0x03,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,0x00,0x00,0x00,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x03,0x03,0x03,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//E:\67.bmp0
/* (128 X 64 )*/
};void OLED_DrawBMP(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char BMP[])
{unsigned int j=0;unsigned char x,y;if(y1%8==0)y = y1/8;elsey = y1/8 + 1;for(y=y0;y<y1;y++){OLED_SetPos(x0,y);for(x=x0;x<x1;x++){WriteDat(BMP[j++]);}}
}OLED_DrawBMP(0,0,128,8,(unsigned char *)BMP1);//主函数调用

参考手册
《SSD1306-Revision 1.1 (Charge Pump).pdf》

STM32 OLED屏(I2C接口)显示相关推荐

  1. STM32+OLED屏显应用实例

    文章目录 一.SPI介绍 1.SPI的定义 2.SPI的连接方式 3.SPI的通讯过程 二.OLED介绍 三.显示自己的学号和姓名 3.1 文字取模 3.2 编写代码 3.3 实验结果 四.显示AHT ...

  2. OLED显示屏I2C接口

    简介 本文将介绍两种不同尺寸的OLED显示屏:0.96寸和0.91寸.他们都是4引脚I2C接口的,如下图所示: 注:经过项目测试发现,本文介绍的驱动方式和代码也完全适用于 1.54寸SSD1309主控 ...

  3. linux驱动系列学习之OLED(i2c接口)(八)

    一.OLED简介 本次使用的开发板正点原子Linux阿波罗.屏幕是i2c接口的四针.分辨率为128×64的oled液晶屏.通信接口为i2c.具体的i2c框架使用请参考前面的文章.oled的详细简介请参 ...

  4. 【STM32+OLED屏显应用实例】

    一,相关技术 .1.1关于SPI协议 SPI 协议是由摩托罗拉公司提出的通讯协议 (Serial Peripheral Interface) ,即串行外围设 备接口,是一种高速全双工的通信总线.它被广 ...

  5. Arduino 和LCD1602液晶屏 I2C接口 万年历时钟可调

    引脚说明 GND ------ 地线 VCC ------ 电源(5V or 3.3v 电源不同显示效果有点差别) SDA ------ I2C 数据线 SCL ------ I2C 时钟线 接线方法 ...

  6. 【嵌入式】STM32基于SPI通信协议OLED屏显示

    STM32基于SPI通信协议OLED屏显示 一.SPI协议和OLED介绍 1.SPI协议介绍 物理层 协议层 2.OLED显示屏介绍 二.显示个人学号姓名实验 1.题目要求 2.代码部分 1.完整代码 ...

  7. STM32实现OLED屏显示字符串

    目录 一.题目要求 二.关于SPI 三.关于OLED 四.OLED显示姓名学号 1.显示汉字取模 2.程序代码分析如下 3.实验效果展示 五.总结 六.参考链接 一.题目要求 理解OLED屏显和汉字点 ...

  8. STM32通过SPI协议驱动OLED屏

    坚持就是胜利 一.SPI协议介绍 01 简介 02 SPI物理层 03 SPI基本通讯过程 二.OLED显示器介绍 01 简介 02 接口定义 03 与STM32接线图 三.汉字取模软件介绍 01 下 ...

  9. OLED屏显示和汉字点阵编码原理

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.认识I2C协议 二.基于IIC协议在OLED屏上实现显示相关信息 1.显示自己的学号和姓名 2.显示AHT20的温 ...

最新文章

  1. java将输出结果写入csv文件_如何在Java中将数据写入.csv文件?
  2. DCMTK:将显示曲线导出到文本文件
  3. 【图文详解】JAVA中的转义字符
  4. json python无效语法_在python中打开无效的json文件
  5. Linux命令之ifconfig
  6. matlab数字仿真实验,DVR+备用电源自动投入的MATLAB数字仿真实验仿真实验
  7. JS动态插入HTML后不能执行后续JQUERY操作
  8. HDFS-文件读写过程
  9. 深入理解Golang之context
  10. axios请求失败重新发起请求_axios请求超时,设置重新请求的完美解决方法
  11. 杂(三)-The type java.lang.Object cannot be resolved It is indirectly referenced ...
  12. 风变编程课后习题答案
  13. mysql auto_increment 重置_如何重置MySQL中的AUTO_INCREMENT?
  14. TSN(时间敏感网络)纯干货分享
  15. 【人工智能项目】- 深度学习实现猫狗大战
  16. 解决json string转object,value值存在英语双引号,无法解析问题
  17. chrome新版不支持旺旺 支付宝 插件的解决方法
  18. 查看文件的使用的大小
  19. AnnotatedBeanDefinitionReader
  20. 日历android实训报告,EAD万年历实训报告及Verilog HDL源码

热门文章

  1. 文字竖排工具 By 崔鹏飞 没有混淆,可以用reflector看代码
  2. js replace 如何替换字符串中的最后一个匹配项
  3. 从零开始的AI绘画:MidJourney带你掌握AI绘画的基础和高级技巧
  4. kali安装图文教程
  5. 2021.11.09 - 144.祖玛游戏
  6. MVC和MVVC的一些区别
  7. 2012-2013年度总结——思想篇
  8. win10系统出现“服务主机:本地服务(无网络)(6)”占用大量内存和CPU情况的解决方案
  9. 如何把一个TXT文本文件按行数分割成多个文本文件
  10. centos7安装VMware Tools