STM32驱动0.96寸OLED液晶屏

一、OLED简述

1.OLED模块简介

OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(Organic Electroluminesence Display, OELD)。OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。

LCD都需要背光,而OLED不需要,因为它是自发光的。这样同样的显示,OLED效果要来得好一些。OLED的尺寸难以大型化,但是分辨率确可以做到很高。
在这里插入图片描述
在这里插入图片描述

2.SSD1306控制芯片驱动

我们以STM32单片机为例,使用5个GPIO模拟SPI总线与SSD1306总线进行通讯。因为STM32与OLED屏的通讯只是单向数据传输,即只存在STM32向OLED屏发送数据,不涉及到读取返回数据,所以我们要实现显示功能之前,需要根据SPI写操作时序图,先实现一个向SSD1306写入一个字节的函数实现。
SSD1306使用4Wire SPI写操作的时序图

封装一个向SSD1306写入一个字节的函数,
函数原型为:

void OLED_WR_Byte(uint8_t dat,uint8_t cmd);

其中:
dat为待写入的数据或者命令;
cmd为数据或命令标志,0表示命令;1表示数据。

由上面SPI操作的时序图可知,IO引脚的时序如下所示:
①首选看发送的字节是命令还是数据,如果是命令,OLED_DC(D/C)引脚置0,即低电平;如果是数据,OLED_DC(D/C)引脚置1,即高电平。

if(cmd)    
OLED_DC_Set();
else    
 OLED_DC_Clr();    

②片选OLED_CS(CS)引脚置0,即拉低(硬件电路中CS引脚也可以直接与GND相连,这样就不用操作CS引脚了)。

OLED_CS_Clr();

③1个字节的数据有8位,将8位数据由高到低的顺序发出,数据要在OLED_SCLK(D0)引脚的上升沿之前设置好,所以要先将OLED_SCLK(D0)置低,然后将一位数据送至OLED_SDIN(D1)引脚,然后将OLED_SCLK(D0)置高,这样一位数据就发送出去了,如此循环8次,一个字节的数据就发送出去了。

for(i=0;i<8;i++)
{
                                
OLED_SCLK_Clr();   
 if(dat&0x80)      
    OLED_SDIN_Set();   
  else     
     OLED_SDIN_Clr();
     OLED_SCLK_Set();  
      dat<<=1;  
 }

④8位数据发送完毕之后,将OLED_CS(CS)引脚拉高,即置1,恢复至初始状态。

OLED_CS_Set();
OLED_CS_Set();
OLED_DC_Set();

3.如何显示字符

在初始化OLED之后,如何在屏幕上显示字符呢?
在这之前,先了解一下SSD1306内部的RAM;SSD1306内部有个SRAM称为GDDRAM(Graphic Display Data RAM),大小是128 × 64 bits,被分为8个 PAGE,用于单色128×64点阵显示,当我们往这个RAM写入数据,就会显示特定内容,如图:
在这里插入图片描述

上面’COL’的含义是GDDRAM列(column)

在页寻址模式下,每当对RAM进行读写操作之后,列地址指针会自动+1,直到列地址指针指向列结束地址后,会重新指向列开始地址;而且在该模式下,一定要设置新的页面和列地址才能访问下一个页面的内容,所以设置显示字符之前一般都会调用下面几句语句来确定显示位置:

OLED_WR_Byte (0xb0+i,OLED_CMD);    //设置页地址(0~7)OLED_WR_Byte (0x00,OLED_CMD);      //设置显示位置—列低地址OLED_WR_Byte (0x10,OLED_CMD);      //设置显示位置—列高地址封装设置

显示位置的函数如下:

void OLED_Set_Pos(unsigned char x, unsigned char y) 
{
           
 OLED_WR_Byte(0xb0+y,OLED_CMD);        
 OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);        OLED_WR_Byte((x&0x0f)|0x01,OLED_CMD); 
 }

例如如果页地址设为B2h,低列地址为03h,而高列地址为00h,

  • 2
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您好,要驱动.96OLED屏幕,需要使用STM32的GPIO口和SPI接口来控制。具体的驱动方式可以参考OLED屏幕的数据手册和STM32的开发文档,根据具体的型号和接口进行编程。一般来说,需要设置SPI的时钟频率、数据传输模式、数据位数等参数,然后通过GPIO口控制OLED屏幕的DC、CS、RST等引脚,发送数据到屏幕上显示。 ### 回答2: 首先,要使用STM32驱动0.96OLED屏幕,我们需要明确一些硬件参数和接口要求。 首先,我们需要选择一个对应的STM32开发板,如STM32F103C8T6等,以及一个0.96OLED屏幕模块,这里以SSD1306为例。然后需要连接相应的引脚和电源。 根据具体的芯片型号和OLED屏幕模块,我们需要对接口对应进行初始化和驱动。如SSD1306模块的接口包括:SCL时钟线、SDA数据线、RST复位线、DC数据/命令选择线、CS芯片选择线等。 接下来,我们需要在STM32的开发环境中进行代码编写。具体步骤如下: 1、引入相应的库文件,如STM32的StdPeriph_Lib,并进行配置和初始化。 2、进行GPIO口初始化,将对应的引脚配置为输入或输出状态。 3、编写SSD1306驱动程序,包括初始化和设置模式、写入数据等操作。 4、编写OLED屏幕显示程序,实现特定内容的显示。 其中,SSD1306驱动程序的编写比较关键,需要正确地设置工作模式、内部寄存器和数据,在实际操作中需要根据具体的芯片型号和接口规范进行处理。 OLED屏幕显示程序的编写主要涉及显示内容和显示效果的设计,比如显示文本、图像、滚动、反转等操作。在实际操作中需要根据具体的需求进行定制化开发。 总之,在STM32驱动0.96OLED屏幕的过程中,需要掌握一定的硬件知识和编程技能,熟悉相应的芯片类型和接口规范,以实现高效、准确和优化的驱动效果。 ### 回答3: 首先,我们需要准备好以下材料: 1. STM32开发板。 2. 0.96OLED屏幕。 3. 杜邦线。 步骤1:连接电路 将OLED屏幕与STM32开发板通过杜邦线连接,将SCL、SDA、VCC、GND等引脚连接对应的STM32引脚即可。 步骤2:下载并安装SSD1306库 在网上下载SSD1306库,并将其解压到ArduinoIDE的libraries文件夹中。然后在ArduinoIDE > Sketch > Includes Library > Add .ZIP Library中导入该库。 步骤3:编写代码 利用ArduinoIDE编写以下代码: #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); void setup() { Serial.begin(9600); if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); for(;;); } display.display(); delay(2000); display.clearDisplay(); display.setTextColor(WHITE); display.setTextSize(1); display.setCursor(10, 10); display.println("Hello, world!"); display.display(); } void loop() { } 步骤4:上传代码 将STM32开发板通过USB连接至电脑,选择对应的STM32开发板并上传以上代码。 步骤5:检查OLED屏幕是否正常工作 现在,已经成功地将STM32OLED屏幕连接起来,并在屏幕上显示了“Hello, world!”的信息。确保OLED屏幕正常工作,即可开始设计自己的项目。 在这个过程中,我们使用了SSD1306库来实现OLED屏幕的驱动,该库已经封装了通信协议、底层驱动等功能,使得开发者可以更加专注于业务逻辑的开发。如果想要实现其他功能,只需要将代码写入循环中即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值