鱿鱼丝 发表于 2023-3-27 10:27

基于STM32的OLED显示屏显示数据

一、SPI简介
1、什么是SPI

SPI是串行外设接口(Serial Peripheral Interface)的缩写,是由 Motorola 公司提出的一种高速的,全双工,同步的通信总线,被广泛地使用在 ADC、LCD 等设备与 MCU 间要求通讯速率较高的场合。SPI总线系统可直接与各个厂家生产的多种标准外围器件连接,该接口一般使用4条线:串行时钟线(SCK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOST和低电平有效的从机选择线C/S(有的SPI接口芯片带有中断信号线INT或INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)。

鱿鱼丝 发表于 2023-3-27 10:27

2、SPI优缺点

优点:

支持全双工通信
通信简单
数据传输速率块

缺点:

没有指定的流控制,没有应答机制确认是否接收到数据,所以跟IIC总线协议比较在数据
可靠性上有一定的缺陷。

鱿鱼丝 发表于 2023-3-27 10:27

二、OLED显示数据
1、取字模

利用取字模网站:

点阵生成软件|字模提取(支持中文) - LED、OLED、LCD、单片机在线取模、中文点阵取模软件、在线显示屏取模 - Arduino|STM32|STM8 - 文字或图片点阵生成软件


鱿鱼丝 发表于 2023-3-27 10:28

取得字模

"雷",0x00, 0x00, 0x3f, 0xf8, 0x01, 0x00, 0x7f, 0xfe, 0x41, 0x02, 0x9d, 0x74, 0x01, 0x00, 0x1d, 0x70, 0x00, 0x00, 0x3f, 0xf8, 0x21, 0x08, 0x21, 0x08, 0x3f, 0xf8, 0x21, 0x08, 0x21, 0x08, 0x3f, 0xf8,
"岩",0x01, 0x00, 0x21, 0x08, 0x21, 0x08, 0x21, 0x08, 0x3f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfc, 0x04, 0x00, 0x04, 0x00, 0x0f, 0xf8, 0x18, 0x08, 0x28, 0x08, 0xc8, 0x08, 0x0f, 0xf8, 0x08, 0x08

鱿鱼丝 发表于 2023-3-27 10:28

将字模放在oledfont.h,结构体typFNT_GB16中

鱿鱼丝 发表于 2023-3-27 10:28

二、修改代码

显示代码
void TEST_MainPage(void)
{       
        GUI_ShowCHinese(28,20,16,"雷岩",1);
        GUI_ShowString(4,48,"632007090128",16,1);
        delay_ms(1500);               
        delay_ms(1500);
}

鱿鱼丝 发表于 2023-3-27 10:28

main函数
int main(void)
{       
        delay_init();                       //延时函数初始化          
        OLED_Init();                                 //初始化OLED
        OLED_Clear(0);             //清屏(全黑)
        while(1)
        {       
                TEST_MainPage();         //界面显示
        }
}

鱿鱼丝 发表于 2023-3-27 10:29

三、OLED实现滑动显示数据
1、添加滑动命令

水平滑动
OLED_WR_Byte(0x2E,OLED_CMD);      //关闭滚动
OLED_WR_Byte(0x26,OLED_CMD);      //水平向左或者右滚动 26/27
OLED_WR_Byte(0x00,OLED_CMD);      //虚拟字节
OLED_WR_Byte(0x00,OLED_CMD);      //起始页 0
OLED_WR_Byte(0x07,OLED_CMD);      //滚动时间间隔
OLED_WR_Byte(0x07,OLED_CMD);      //终止页 7
OLED_WR_Byte(0x00,OLED_CMD);      //虚拟字节
OLED_WR_Byte(0xFF,OLED_CMD);      //虚拟字节
OLED_WR_Byte(0x2F,OLED_CMD);      //开启滚动

鱿鱼丝 发表于 2023-3-27 10:29

2、main函数
#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "gui.h"
#include "test.h"
int main(void)
{       
        delay_init();                       //延时函数初始化          
        NVIC_Configuration();            //设置NVIC中断分组2:2位抢占优先级,2位响应优先级        
        OLED_Init();                                 //初始化OLED
        OLED_Clear(0);             //清屏(全黑)
        OLED_WR_Byte(0x2E,OLED_CMD);      //关闭滚动
    OLED_WR_Byte(0x27,OLED_CMD);      //水平向左或者右滚动 26/27
    OLED_WR_Byte(0x00,OLED_CMD);      //虚拟字节
        OLED_WR_Byte(0x00,OLED_CMD);      //起始页 0
        OLED_WR_Byte(0x07,OLED_CMD);      //滚动时间间隔
        OLED_WR_Byte(0x07,OLED_CMD);      //终止页 7
        OLED_WR_Byte(0x00,OLED_CMD);      //虚拟字节
        OLED_WR_Byte(0xFF,OLED_CMD);      //虚拟字节
        TEST_MainPage();
        OLED_WR_Byte(0x2F,OLED_CMD);      //开启滚动
}

鱿鱼丝 发表于 2023-3-27 10:29

3、总显示函数
void TEST_MainPage(void)
{       
       
        //GUI_ShowCHinese(28,20,16,"",1);
        GUI_ShowString(0,0,"Do not go gentle into that good night.",16,1);
       
        //GUI_ShowString(40,48,"Rage, rage against the dying of the light.",16,1);
       
        //GUI_ShowString(4,48,"www.lcdwiki.com",16,1);
        delay_ms(1500);               
        delay_ms(1500);
}

51xlf 发表于 2023-5-10 21:50

stm32oled光标移动怎么实现

wilhelmina2 发表于 2023-5-10 22:07

在STM32中,可以使用HAL库或者第三方库函数(如u8glib、Adafruit_SSD1306等)来控制OLED屏幕的显示。

tifmill 发表于 2023-5-11 16:08

stm32怎样才能同时驱动OLED和LCD两个屏

sesefadou 发表于 2023-5-11 18:31

怎么用stm32cubemx配置oled显示的参数

bartonalfred 发表于 2023-5-11 19:02


stm32调试OLED液晶,显示不稳定,需要多次复位才可以

tifmill 发表于 2023-5-11 20:08

在开发过程中需要关注OLED屏幕的分辨率、颜色深度、驱动芯片型号等参数,以确保程序与硬件的匹配和兼容。

loutin 发表于 2023-5-11 21:02


如何在oled屏上实时显示湿度

pixhw 发表于 2023-5-11 21:58

将OLED屏幕的引脚与STM32芯片的GPIO引脚相连,包括VCC(电源正极)、GND(电源负极)、SCL(时钟信号线)、SDA(数据信号线)等引脚。

jonas222 发表于 2023-5-11 22:14

OLED显示屏,怎么显示字符串变量?

Jacquetry 发表于 2023-5-11 22:52

要显示汉字的话必须要给所有字取模吗?
页: [1] 2
查看完整版本: 基于STM32的OLED显示屏显示数据