/*---------------------------------------------------------------------------------------------------- # # Copyright (c) 2022 Yuankang Liang(XerolySkinner) # # 本软件按原样提供,无任何明示或暗示 # 在任何情况下,作者都不承担任何损害赔偿责任 # # 使用的许可声明: # 1. 不得歪曲本软件的来源,你不能声称你编写了原始软件. # 2. 免费授予以任何目的,前提是版权声明出现在所有副本中. # 并且版权声明和许可声明同时出现. # 3. 你有使用,复制,修改,分发,和销售本软件的许可. # 4. 如果你在产品中使用,产品文档中的声明是赞赏的但不是必须的. # 5. 本通知不得从任何来源删除或更改. # # Yuankang Liang(XerolySkinner) # E-mail:zabbcccbbaz@163.com # QQ:2715099320 # Mobile Phone:13005636215 # # All rights reserved. */ /** * @file bscpp_IIC_STM32_OLED.h * @brief 在STM32下实现OLED通信 * @mainpage 主要信息 * @author Yuankang Liang(XerolySkinner) * @email zabbcccbbaz@163.com * @version V1.0.0 * @date 2022-11-07 13:19 */ #pragma once #ifdef __cplusplus ////////////////////////////////////////////////////////////////////////////////////////////////////// //---------------------------------------------------------------------------------------------------- // 头文件 // #include "varint.h" #include "bscpp_IIC_STM32.h" ////////////////////////////////////////////////////////////////////////////////////////////////////// //---------------------------------------------------------------------------------------------------- // 数据声明 // /** * @brief OLED指令集 */ const u8 OLED_init_cmd[25] = { 0xAE, // 关闭显示 0xD5, // 设置时钟分频因子,震荡频率 0x80, // [3:0],分频因子;[7:4],震荡频率 0xA8, // 设置驱动路数 0X3F, // 默认0X3F(1/64) 0xD3, // 设置显示偏移 0X00, // 默认为0 0x40, // 设置显示开始行 [5:0],行数. 0x8D, // 电荷泵设置 0x14, // bit2,开启/关闭 0x20, // 设置内存地址模式 0x02, // [1:0],00,列地址模式;01,行地址模式;10,页地址模式;默认10; 0xA1, // 段重定义设置,bit0:0,0->0;1,0->127; 0xC8, // 设置COM扫描方向;bit3:0,普通模式;1,重定义模式 COM[N-1]->COM0;N:驱动路数 0xDA, // 设置COM硬件引脚配置 0x12, // [5:4]配置 0x81, // 对比度设置 0xEF, // 1~255;默认0X7F (亮度设置,越大越亮) 0xD9, // 设置预充电周期 0xf1, // [3:0],PHASE 1;[7:4],PHASE 2; 0xDB, // 设置VCOMH 电压倍率 0x30, // [6:4] 000,0.65*vcc;001,0.77*vcc;011,0.83*vcc; 0xA4, // 全局显示开启;bit0:1,开启;0,关闭;(白屏/黑屏) 0xA6, // 设置显示方式;bit0:1,反相显示;0,正常显示 0xAF, // 开启显示 }; ////////////////////////////////////////////////////////////////////////////////////////////////////// /** * @brief 一个OLED设备,基于STM32使用IIC总线 */ class bscpp_STM32_OLED : protected bscpp_IIC_STM32{ public: bscpp_STM32_OLED(bscpp_IIC_STM32 &IICS):bscpp_IIC_STM32( IICS.GPIOx_SCK,IICS.GPIO_Pin_SCK, IICS.GPIOx_SDA,IICS.GPIO_Pin_SDA ){;}; bscpp_STM32_OLED(GPIO_TypeDef *GPIOx_SCK,uint16_t GPIO_Pin_SCK,GPIO_TypeDef *GPIOx_SDA,uint16_t GPIO_Pin_SDA):bscpp_IIC_STM32( GPIOx_SCK,GPIO_Pin_SCK,GPIOx_SDA,GPIO_Pin_SDA ){;}; public: void Init(void); void Column_set(u8 column); void Page_set(u8 page); void Clear(u8 dat); void Picture_display(const u8* ptr_pic); void Picture_ReverseDisplay(const u8* ptr_pic); void Draw_ASCII(u32 H, u32 V, u8 word); public: void Send_dat(u8 dat); void Send_cmd(u8 cmd); void Send_len_dat(u8* dat, u32 len); private: }; ////////////////////////////////////////////////////////////////////////////////////////////////////// //---------------------------------------------------------------------------------------------------- /** * @brief OLED的ASCII字符集 */ const unsigned char OLED_WORD_ASCII[] = { 0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x00,/*"!",0*/ 0x00,0x10,0x0C,0x02,0x10,0x0C,0x02,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*""",1*/ 0x00,0x40,0xC0,0x78,0x40,0xC0,0x78,0x00, 0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x00,/*"#",2*/ 0x00,0x70,0x88,0x88,0xFC,0x08,0x30,0x00, 0x00,0x18,0x20,0x20,0xFF,0x21,0x1E,0x00,/*"$",3*/ 0xF0,0x08,0xF0,0x80,0x60,0x18,0x00,0x00, 0x00,0x31,0x0C,0x03,0x1E,0x21,0x1E,0x00,/*"%",4*/ 0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00, 0x1E,0x21,0x23,0x2C,0x19,0x27,0x21,0x10,/*"&",5*/ 0x00,0x12,0x0E,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"'",6*/ 0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00, 0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,/*"(",7*/ 0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00, 0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,/*")",8*/ 0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00, 0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,/*"*",9*/ 0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00, 0x00,0x01,0x01,0x01,0x0F,0x01,0x01,0x01,/*"+",10*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x90,0x70,0x00,0x00,0x00,0x00,0x00,/*",",11*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,/*"-",12*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,/*".",13*/ 0x00,0x00,0x00,0x00,0xC0,0x38,0x04,0x00, 0x00,0x60,0x18,0x07,0x00,0x00,0x00,0x00,/*"/",14*/ 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00, 0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*"0",15*/ 0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00, 0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,/*"1",16*/ 0x00,0x70,0x08,0x08,0x08,0x08,0xF0,0x00, 0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/*"2",17*/ 0x00,0x30,0x08,0x08,0x08,0x88,0x70,0x00, 0x00,0x18,0x20,0x21,0x21,0x22,0x1C,0x00,/*"3",18*/ 0x00,0x00,0x80,0x40,0x30,0xF8,0x00,0x00, 0x00,0x06,0x05,0x24,0x24,0x3F,0x24,0x24,/*"4",19*/ 0x00,0xF8,0x88,0x88,0x88,0x08,0x08,0x00, 0x00,0x19,0x20,0x20,0x20,0x11,0x0E,0x00,/*"5",20*/ 0x00,0xE0,0x10,0x88,0x88,0x90,0x00,0x00, 0x00,0x0F,0x11,0x20,0x20,0x20,0x1F,0x00,/*"6",21*/ 0x00,0x18,0x08,0x08,0x88,0x68,0x18,0x00, 0x00,0x00,0x00,0x3E,0x01,0x00,0x00,0x00,/*"7",22*/ 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00, 0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,/*"8",23*/ 0x00,0xF0,0x08,0x08,0x08,0x10,0xE0,0x00, 0x00,0x01,0x12,0x22,0x22,0x11,0x0F,0x00,/*"9",24*/ 0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00, 0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,/*":",25*/ 0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,/*";",26*/ 0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00, 0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,/*"<",27*/ 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x00, 0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x00,/*"=",28*/ 0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00, 0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,/*">",29*/ 0x00,0x70,0x48,0x08,0x08,0x88,0x70,0x00, 0x00,0x00,0x00,0x30,0x37,0x00,0x00,0x00,/*"?",30*/ 0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00, 0x07,0x18,0x27,0x28,0x2F,0x28,0x17,0x00,/*"@",31*/ 0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00, 0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,/*"A",32*/ 0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00, 0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,/*"B",33*/ 0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00, 0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,/*"C",34*/ 0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00, 0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,/*"D",35*/ 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00, 0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,/*"E",36*/ 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00, 0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,/*"F",37*/ 0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00, 0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,/*"G",38*/ 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08, 0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,/*"H",39*/ 0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00, 0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"I",40*/ 0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00, 0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,/*"J",41*/ 0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00, 0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,/*"K",42*/ 0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00, 0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,/*"L",43*/ 0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00, 0x20,0x3F,0x01,0x3E,0x01,0x3F,0x20,0x00,/*"M",44*/ 0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08, 0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,/*"N",45*/ 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00, 0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,/*"O",46*/ 0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00, 0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,/*"P",47*/ 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00, 0x0F,0x10,0x28,0x28,0x30,0x50,0x4F,0x00,/*"Q",48*/ 0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00, 0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,/*"R",49*/ 0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00, 0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,/*"S",50*/ 0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00, 0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,/*"T",51*/ 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08, 0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,/*"U",52*/ 0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08, 0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,/*"V",53*/ 0x08,0xF8,0x00,0xF8,0x00,0xF8,0x08,0x00, 0x00,0x03,0x3E,0x01,0x3E,0x03,0x00,0x00,/*"W",54*/ 0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08, 0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,/*"X",55*/ 0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00, 0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,/*"Y",56*/ 0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00, 0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,/*"Z",57*/ 0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00, 0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,/*"[",58*/ 0x00,0x04,0x38,0xC0,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,/*"\",59*/ 0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00, 0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,/*"]",60*/ 0x00,0x00,0x04,0x02,0x02,0x04,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"^",61*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,/*"_",62*/ 0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"`",63*/ 0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00, 0x00,0x19,0x24,0x24,0x12,0x3F,0x20,0x00,/*"a",64*/ 0x10,0xF0,0x00,0x80,0x80,0x00,0x00,0x00, 0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,/*"b",65*/ 0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00, 0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,/*"c",66*/ 0x00,0x00,0x80,0x80,0x80,0x90,0xF0,0x00, 0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,/*"d",67*/ 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00, 0x00,0x1F,0x24,0x24,0x24,0x24,0x17,0x00,/*"e",68*/ 0x00,0x80,0x80,0xE0,0x90,0x90,0x20,0x00, 0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"f",69*/ 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00, 0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,/*"g",70*/ 0x10,0xF0,0x00,0x80,0x80,0x80,0x00,0x00, 0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,/*"h",71*/ 0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00, 0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"i",72*/ 0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00, 0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,/*"j",73*/ 0x10,0xF0,0x00,0x00,0x80,0x80,0x80,0x00, 0x20,0x3F,0x24,0x06,0x29,0x30,0x20,0x00,/*"k",74*/ 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00, 0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"l",75*/ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00, 0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,/*"m",76*/ 0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00, 0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,/*"n",77*/ 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00, 0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,/*"o",78*/ 0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00, 0x80,0xFF,0x91,0x20,0x20,0x11,0x0E,0x00,/*"p",79*/ 0x00,0x00,0x00,0x80,0x80,0x00,0x80,0x00, 0x00,0x0E,0x11,0x20,0x20,0x91,0xFF,0x80,/*"q",80*/ 0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00, 0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,/*"r",81*/ 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00, 0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,/*"s",82*/ 0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00, 0x00,0x00,0x00,0x1F,0x20,0x20,0x10,0x00,/*"t",83*/ 0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00, 0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,/*"u",84*/ 0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00, 0x00,0x03,0x0C,0x30,0x0C,0x03,0x00,0x00,/*"v",85*/ 0x80,0x80,0x00,0x80,0x80,0x00,0x80,0x80, 0x01,0x0E,0x30,0x0C,0x07,0x38,0x06,0x01,/*"w",86*/ 0x00,0x80,0x80,0x80,0x00,0x80,0x80,0x00, 0x00,0x20,0x31,0x0E,0x2E,0x31,0x20,0x00,/*"x",87*/ 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80, 0x00,0x81,0x86,0x78,0x18,0x06,0x01,0x00,/*"y",88*/ 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00, 0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,/*"z",89*/ 0x00,0x00,0x00,0x00,0x00,0xFC,0x02,0x02, 0x00,0x00,0x00,0x00,0x01,0x3E,0x40,0x40,/*"{",90*/ 0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,/*"|",91*/ 0x02,0x02,0xFC,0x00,0x00,0x00,0x00,0x00, 0x40,0x40,0x3E,0x01,0x00,0x00,0x00,0x00,/*"}",92*/ 0x00,0x02,0x01,0x02,0x02,0x04,0x02,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"~",93*/ }; #endif