STM32 OLED屏(I2C接口)显示
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接口)显示相关推荐
- STM32+OLED屏显应用实例
文章目录 一.SPI介绍 1.SPI的定义 2.SPI的连接方式 3.SPI的通讯过程 二.OLED介绍 三.显示自己的学号和姓名 3.1 文字取模 3.2 编写代码 3.3 实验结果 四.显示AHT ...
- OLED显示屏I2C接口
简介 本文将介绍两种不同尺寸的OLED显示屏:0.96寸和0.91寸.他们都是4引脚I2C接口的,如下图所示: 注:经过项目测试发现,本文介绍的驱动方式和代码也完全适用于 1.54寸SSD1309主控 ...
- linux驱动系列学习之OLED(i2c接口)(八)
一.OLED简介 本次使用的开发板正点原子Linux阿波罗.屏幕是i2c接口的四针.分辨率为128×64的oled液晶屏.通信接口为i2c.具体的i2c框架使用请参考前面的文章.oled的详细简介请参 ...
- 【STM32+OLED屏显应用实例】
一,相关技术 .1.1关于SPI协议 SPI 协议是由摩托罗拉公司提出的通讯协议 (Serial Peripheral Interface) ,即串行外围设 备接口,是一种高速全双工的通信总线.它被广 ...
- Arduino 和LCD1602液晶屏 I2C接口 万年历时钟可调
引脚说明 GND ------ 地线 VCC ------ 电源(5V or 3.3v 电源不同显示效果有点差别) SDA ------ I2C 数据线 SCL ------ I2C 时钟线 接线方法 ...
- 【嵌入式】STM32基于SPI通信协议OLED屏显示
STM32基于SPI通信协议OLED屏显示 一.SPI协议和OLED介绍 1.SPI协议介绍 物理层 协议层 2.OLED显示屏介绍 二.显示个人学号姓名实验 1.题目要求 2.代码部分 1.完整代码 ...
- STM32实现OLED屏显示字符串
目录 一.题目要求 二.关于SPI 三.关于OLED 四.OLED显示姓名学号 1.显示汉字取模 2.程序代码分析如下 3.实验效果展示 五.总结 六.参考链接 一.题目要求 理解OLED屏显和汉字点 ...
- STM32通过SPI协议驱动OLED屏
坚持就是胜利 一.SPI协议介绍 01 简介 02 SPI物理层 03 SPI基本通讯过程 二.OLED显示器介绍 01 简介 02 接口定义 03 与STM32接线图 三.汉字取模软件介绍 01 下 ...
- OLED屏显示和汉字点阵编码原理
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.认识I2C协议 二.基于IIC协议在OLED屏上实现显示相关信息 1.显示自己的学号和姓名 2.显示AHT20的温 ...
最新文章
- java将输出结果写入csv文件_如何在Java中将数据写入.csv文件?
- DCMTK:将显示曲线导出到文本文件
- 【图文详解】JAVA中的转义字符
- json python无效语法_在python中打开无效的json文件
- Linux命令之ifconfig
- matlab数字仿真实验,DVR+备用电源自动投入的MATLAB数字仿真实验仿真实验
- JS动态插入HTML后不能执行后续JQUERY操作
- HDFS-文件读写过程
- 深入理解Golang之context
- axios请求失败重新发起请求_axios请求超时,设置重新请求的完美解决方法
- 杂(三)-The type java.lang.Object cannot be resolved It is indirectly referenced ...
- 风变编程课后习题答案
- mysql auto_increment 重置_如何重置MySQL中的AUTO_INCREMENT?
- TSN(时间敏感网络)纯干货分享
- 【人工智能项目】- 深度学习实现猫狗大战
- 解决json string转object,value值存在英语双引号,无法解析问题
- chrome新版不支持旺旺 支付宝 插件的解决方法
- 查看文件的使用的大小
- AnnotatedBeanDefinitionReader
- 日历android实训报告,EAD万年历实训报告及Verilog HDL源码
热门文章
- 文字竖排工具 By 崔鹏飞 没有混淆,可以用reflector看代码
- js replace 如何替换字符串中的最后一个匹配项
- 从零开始的AI绘画:MidJourney带你掌握AI绘画的基础和高级技巧
- kali安装图文教程
- 2021.11.09 - 144.祖玛游戏
- MVC和MVVC的一些区别
- 2012-2013年度总结——思想篇
- win10系统出现“服务主机:本地服务(无网络)(6)”占用大量内存和CPU情况的解决方案
- 如何把一个TXT文本文件按行数分割成多个文本文件
- centos7安装VMware Tools