你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【Nucleo板开发日志】+以OLED驱动程序为例,说明如何使用C++开发STM32的应用程序

[复制链接]
wuzhujian 发布时间:2014-9-8 00:06
最近在开发一个智能光伏逆变器的产品,其上用到了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中,以便更新屏幕显示。
附件: OLED.rar (7.46 KB, 下载次数: 128)
收藏 1 评论6 发布时间:2014-9-8 00:06

举报

6个回答
霹雳之火 回答时间:2014-9-8 21:57:09

RE:【Nucleo板开发日志】+以OLED驱动程序为例,说明如何使用C++开发STM32的应用程序

中秋发帖不易,而且是关于OLED,是这方面的第一篇,也是关于显示屏的第一篇,只能说赞赞
不过可以上张图,大家同乐
congcong40 回答时间:2014-9-8 22:39:25

回复:【Nucleo板开发日志】+以OLED驱动程序为例,说明如何使用C++开发STM32的应用程序

支持支持!!!
wuzhujian 回答时间:2014-9-10 10:05:52

RE:【Nucleo板开发日志】+以OLED驱动程序为例,说明如何使用C++开发STM32的应用程序

写这个,主要是为了交差。
wkei007 回答时间:2015-4-14 17:29:03
不错,正在学习C++
anny 回答时间:2015-4-15 08:06:02
xjcent-18650 回答时间:2016-7-7 11:04:07
,C++开发赞一个
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版