一.OLED显示器的基本原理在OLED上如何显示内容的呢在OLED的内部有一个内存可以通过I2C总线对内存进行读写而内存里的每一个比特位都代表OLED屏幕上的一个像素0灭1亮二.屏幕的初始化1.初始化I2C选择软硬都行此篇用的软件I2C电路图#include si2c.h//引用软件I2C的头文件 SI2C_TypeDef si2c;//声明一个软I2C的变量 si2c.SCL_GPIOxGPIOB;//指定SCL的位置 si2c.SCL_GPIO_PinGPIO_Pin_6; si2c.SDA_GPIOxGPIOB;//指定SDA的位置 si2c.SDA_GPIO_PinGPIO_Pin_7; My_SI2C_Init(si2c);//初始化 --------------------------------------- void My_SI2C(void) void My_SI2C(void) { //软I2C初始化 si2c.SCL_GPIOxGPIOB; si2c.SCL_GPIO_PinGPIO_Pin_6; si2c.SDA_GPIOxGPIOB; si2c.SDA_GPIO_PinGPIO_Pin_7; My_SI2C_Init(si2c); }2.对OLED屏幕初始化在olrd.h第75行找到屏幕初始化函数3.屏幕初始化接口用法所使用的OLED名称需要声明一个 OLED_TypeDef 变量名 的全局变量OLED的初始化参数结构体只有一个参数是一个函数指针目的就是把结构体中的函数指针初始化首先按回调函数形式写一个函数函数名不重名即可)int i2c_write_bytes(uint8_t addr,const uint8_t *pdata,uint16_t size); //实现函数 int i2c_write_bytes(uint8_t addr,const uint8_t *pdata,uint16_t size) { //使用软I2C发送函数并作为返回值返回给要实现的函数 return My_SI2C_SendBytes(si2c,addr,pdata,size); }把函数名填进去void My_OLEDScreen_Init(void); void My_OLEDScreen_Init(void) { //初始化屏幕函数 OLED_InitTypeDef OLED_InitStruct; OLED_InitStruct.i2c_write_cbi2c_write_bytes; OLED_Init(oled,OLED_InitStruct); }三.基本概念和操作1.画笔和画刷白色画笔划过的地方点亮 黑色画笔划过的地方熄灭透明画笔不做处理 不同粗细的画笔1像素2像素......画刷设置画笔和画刷// // 画笔和画刷 // // 设置画笔 Pen_Color--画笔颜色 Width--画笔粗细 void OLED_SetPen(OLED_TypeDef *OLED, uint8_t Pen_Color, uint8_t Width); // 设置画刷 Brush_Cokor--画刷颜色 void OLED_SetBrush(OLED_TypeDef *OLED, uint8_t Brush_Color);2.屏幕坐标系所用OLED规格为128*64像素想要在OLED作画就要为一个个像素点坐标如何坐标 选取屏幕任意位置建立平面直角坐标系即可如下图选取屏幕左上角为原点原点向右为x正半轴向下为y正半轴3.光标// // 光标 // // 设置光标位置 void OLED_SetCursor(OLED_TypeDef *OLED, int16_t X, int16_t Y); // 设置光标的X坐标 void OLED_SetCursorX(OLED_TypeDef *OLED, int16_t X); // 设置光标的Y坐标 void OLED_SetCursorY(OLED_TypeDef *OLED, int16_t Y); // 移动光标 dx--x轴位移距离 dy--y轴位移距离 void OLED_MoveCursor(OLED_TypeDef *OLED, int16_t dX, int16_t dY); // 沿X轴方向移动光标 void OLED_MoveCursorX(OLED_TypeDef *OLED, int16_t dX); // 沿Y轴方向移动光标 void OLED_MoveCursorY(OLED_TypeDef *OLED, int16_t dY); // 获取光标当前位置 void OLED_GetCursor(OLED_TypeDef *OLED, int16_t *pXOut, int16_t *pYOut); // 获取光标X坐标 int16_t OLED_GetCursorX(OLED_TypeDef *OLED); // 获取光标Y坐标 int16_t OLED_GetCursorY(OLED_TypeDef *OLED);四.文字相关操作1.打印字符串//打印Hello World OLED_SetPen(oled,PEN_COLOR_WHITE,1); OLED_SetBrush(oled,PEN_COLOR_TRANSPARENT); OLED_SetCursor(oled,24,50); OLED_DrawString(oled,Hello World); OLED_SendBuffer(oled);2.设置字体3.格式化打印字符串4.设置文本区域案例五.绘图相关的操作1.画点2.划线3.画矩形和画圆4.绘制位图获取位图数据可以访问https://javl.github.io/image2cpp/选择文件--设置输出纯字节--生成代码#include stm32f10x.h #include si2c.h #include oled.h SI2C_TypeDef si2c; OLED_TypeDef oled; const uint8_t bitmap[]{// 1, 128x64px 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xf8, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x3f, 0xfe, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x7f, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x7f, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x7e, 0x07, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xf0, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xfc, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xfe, 0x1f, 0xff, 0xc7, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xc7, 0xff, 0xcf, 0xff, 0xff, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xf1, 0xff, 0xcf, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xf8, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xfe, 0x3f, 0xcf, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0x8f, 0xcf, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xc7, 0xcf, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xe3, 0xcf, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xf0, 0x1f, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x03, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xf0, 0x3f, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xfe, 0x0f, 0xff, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xe1, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xf8, 0x03, 0xf8, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xe0, 0x0c, 0x7e, 0x3f, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xfe, 0x3f, 0xff, 0xff, 0x80, 0x03, 0x3f, 0x3f, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xfc, 0xff, 0x00, 0x7f, 0x80, 0x01, 0x9f, 0x9f, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xf1, 0xf8, 0x00, 0x1f, 0x00, 0x01, 0x9f, 0x8f, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xf3, 0xf2, 0x00, 0x07, 0x80, 0x03, 0x9f, 0xcc, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xe3, 0xe2, 0x00, 0x07, 0x80, 0x07, 0x3f, 0xc1, 0xff, 0xe0, 0x3f, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xe3, 0xe6, 0x00, 0x03, 0xe0, 0x1c, 0x7f, 0x83, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xe7, 0xe3, 0x00, 0x07, 0xf8, 0x03, 0xff, 0x91, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xe3, 0xf3, 0xc0, 0x07, 0xff, 0x1f, 0xff, 0x3c, 0x1f, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xf3, 0xf8, 0xff, 0x8f, 0x3e, 0x3f, 0xfe, 0x3f, 0x9f, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xf1, 0xfe, 0x00, 0x1f, 0x00, 0x7f, 0xf8, 0xff, 0x9f, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xf8, 0xff, 0xff, 0xc0, 0x3f, 0xff, 0xf1, 0xff, 0x9f, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xfc, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x87, 0xff, 0x8f, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xfe, 0x1f, 0xfe, 0x07, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xc1, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xf0, 0x40, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xfe, 0x3f, 0xff, 0xf8, 0x1f, 0xff, 0xfc, 0x07, 0xff, 0x83, 0x1e, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x87, 0xff, 0xff, 0x80, 0x00, 0x00, 0xff, 0xf8, 0x1e, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xa3, 0xff, 0xff, 0x81, 0xf8, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x1f, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xc0, 0x7f, 0xff, 0xff, 0xf0, 0x03, 0xfc, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0x8c, 0x00, 0x03, 0xff, 0xf0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0x00, 0xff, 0xff, 0xe0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0xfc, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; void My_OnBoardLED_Init(void); void My_OLEDScreen_Init(void); void My_SI2C(void); int i2c_write_bytes(uint8_t addr,const uint8_t *pdata,uint16_t size); int main(void) { My_SI2C(); My_OnBoardLED_Init(); My_OLEDScreen_Init(); OLED_SetCursor(oled,0,0); OLED_DrawBitmap(oled,128,64,bitmap); OLED_SendBuffer(oled); uint8_t rcvd; My_SI2C_ReceiveBytes(si2c,0x78,rcvd,1); if((rcvd(0x016))0) { GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_RESET); } else { GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_SET); } while(1) { } } void My_SI2C(void) { //软I2C初始化 si2c.SCL_GPIOxGPIOB; si2c.SCL_GPIO_PinGPIO_Pin_6; si2c.SDA_GPIOxGPIOB; si2c.SDA_GPIO_PinGPIO_Pin_7; My_SI2C_Init(si2c); } void My_OLEDScreen_Init(void) { //初始化屏幕函数 OLED_InitTypeDef OLED_InitStruct; OLED_InitStruct.i2c_write_cbi2c_write_bytes; OLED_Init(oled,OLED_InitStruct); } //实现函数 int i2c_write_bytes(uint8_t addr,const uint8_t *pdata,uint16_t size) { //使用软I2C发送函数并作为返回值返回给要实现的函数 return My_SI2C_SendBytes(si2c,addr,pdata,size); } void My_OnBoardLED_Init(void) { //初始化板载LED RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); GPIO_InitTypeDef GPIO_GPIOC; GPIO_GPIOC.GPIO_PinGPIO_Pin_13; GPIO_GPIOC.GPIO_ModeGPIO_Mode_Out_OD;//通用输出开漏模式 GPIO_GPIOC.GPIO_SpeedGPIO_Speed_2MHz; GPIO_Init(GPIOC,GPIO_GPIOC); GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_SET); }