
最近在开发一个智能光伏逆变器的产品,其上用到了OLED,用于显示相应电池电压、电流、输出的交流电压、电流、工作温度、逆变效率等参数。 一、OLED模块: 1、 控制芯片为:SSD1306 2、分辨率:128X64 3、颜色:单色(白色或兰色)或双色(黄色(16X128)+兰色(48X128),固定) 4、通信方式:4线SPI 二、字体 字体主要有2种,12点阵和16点阵。其中: 1、 ASCII: 1> 12点阵:高12点,宽6点 2> 16点阵:高16点,宽8点 2、汉字: 1> 12点阵:高12点,宽12点 2> 16点阵:高16点,宽16点 三、软件要点 1、屏幕显示点阵缓冲区 开辟1K字节缓冲区,用于存放屏幕显示映像。以2维数组的形式组织,垂直方向8个点,用一个字节表示,垂直方向8个点,水平方向128个点的阵列,用128字节表示。2维数组定义为: char m_Gram[8][128]; 2、点阵缓冲区数据刷新到OLED 为了减少通信数据量,在程序中,用了一个8位的变量,其中的每1位,用于管理1行。当某1位为1时,表示在下一次刷新时,该行内容需要刷新到OLED中(该行内容已经有变化)。变量定义为: char m_Flash; 3、字库 采用的是点阵字库。排列方式为垂直方式,从上到下,从左到右。 举例来说,12点阵的ASCII,第1个字节为第1列的上8个点,第2字节的高4位为第1列的下4个点,第3个字节为第2列的上8个点,依此类推,共12字节。 ASCII字库从0x20(就是空格符)开始,到0x7F结束。全部的12点阵(95x12)和16点阵(95x16)的ASCII点阵字库直接编译中程序FLASH中,共增加2660字节的程序FLASH存储器。 全部的汉字字库太大,MCU的FLASH很难放得下(可以外部加FLASH 存储器或SD卡),因此采用小汉字库,只把需要的汉字的点阵放进来。有一个软件,可以帮助大家如何生成小汉字库。 由于上述小汉字库生成软件和C++的原因,定义了如下结构,用于存放小汉字库: typedef struct _HZ12 { char m_Lib[24]; char m_Code[3]; }HZ12; typedef struct _HZ16 { char m_Lib[32]; char m_Code[3]; }HZ16; 4、OLED的C++驱动程序的实现 1> 在基类中,实现显示的基本功能,包括: 初始化OLED、 画点、画字符、画字符串、刷新点阵缓冲区内容到OLED等等。 2> 在派生类中,实现与硬件操作相关的功能。在基类中,只定义相应虚函数。这些与硬件相关的操作有: 初始化(引脚、寄存器、中断、DMA等)、发送单个数据或命令、发送多个数据或命令。 5、C++类的使用 1> 实例化一个OLED的派生类; 2> 调用派生类的初始化函数; 3> 调用基类的绘制功能(画点、画字符、画字符串等),把要显示的内容绘制到缓冲区中; 4> 定时或非定时,把缓冲区内存刷新到OLED中,以便更新屏幕显示。 附件: ![]() |
MCSDK FOC应用详解
STM32F10xxx 正交编码器接口应用笔记 及源代码
基于STM32定时器ETR信号的应用示例
《无刷直流电机控制应用 基于STM8S系列单片机》
STM32定时器触发SPI逐字收发之应用示例
【银杏科技ARM+FPGA双核心应用】STM32H7系列10——ADC
【银杏科技ARM+FPGA双核心应用】STM32H7系列57——MDK_FLM
无刷直流电机控制应用+基于STM8S系列单片机---电子书
STM32 USB的程序,包含固件、驱动和测试用的应用程序
工业以太网总线ETHERCAT驱动程序设计及应用(扫描版)
RE:【Nucleo板开发日志】+以OLED驱动程序为例,说明如何使用C++开发STM32的应用程序
不过可以上张图,大家同乐
回复:【Nucleo板开发日志】+以OLED驱动程序为例,说明如何使用C++开发STM32的应用程序
RE:【Nucleo板开发日志】+以OLED驱动程序为例,说明如何使用C++开发STM32的应用程序