登录/注册

stm32液晶显示程序

stm32液晶显示程序

更多

以下是一个基于STM32的SPI接口OLED(SSD1306驱动)显示程序的示例代码,使用HAL库开发(通用步骤适用于任何STM32型号):

1. 硬件连接

OLED_SCK   → PA5 (SPI1 CLK)
OLED_MOSI  → PA7 (SPI1 MOSI)
OLED_RES   → PB0 (复位引脚)
OLED_DC    → PB1 (数据/命令选择)
OLED_CS    → PB2 (片选引脚,若未使用可接地)

2. 代码实现

步骤1:添加驱动文件

// oled.h
#ifndef __OLED_H
#define __OLED_H

#include "stm32f1xx_hal.h" // 根据型号修改头文件

void OLED_Init(void);
void OLED_Clear(void);
void OLED_ShowString(uint8_t x, uint8_t y, char *str);

#endif

步骤2:OLED驱动核心代码

// oled.c
#include "oled.h"
#include "font.h" // 包含字库数据(需自行提供)

// 引脚定义
#define OLED_RES_GPIO_Port    GPIOB
#define OLED_RES_Pin          GPIO_PIN_0
#define OLED_DC_GPIO_Port     GPIOB
#define OLED_DC_Pin           GPIO_PIN_1

// SPI句柄引用
extern SPI_HandleTypeDef hspi1;

// 写命令
void OLED_Write_Cmd(uint8_t cmd) {
  HAL_GPIO_WritePin(OLED_DC_GPIO_Port, OLED_DC_Pin, GPIO_PIN_RESET); // DC=0:命令模式
  HAL_SPI_Transmit(&hspi1, &cmd, 1, 10);
}

// 写数据
void OLED_Write_Data(uint8_t dat) {
  HAL_GPIO_WritePin(OLED_DC_GPIO_Port, OLED_DC_Pin, GPIO_PIN_SET); // DC=1:数据模式
  HAL_SPI_Transmit(&hspi1, &dat, 1, 10);
}

// 初始化OLED
void OLED_Init(void) {
  // 复位序列
  HAL_GPIO_WritePin(OLED_RES_GPIO_Port, OLED_RES_Pin, GPIO_PIN_RESET);
  HAL_Delay(100);
  HAL_GPIO_WritePin(OLED_RES_GPIO_Port, OLED_RES_Pin, GPIO_PIN_SET);

  // 初始化命令序列
  OLED_Write_Cmd(0xAE); // 关闭显示
  OLED_Write_Cmd(0xD5); // 设置时钟分频
  OLED_Write_Cmd(0x80);
  OLED_Write_Cmd(0xA8); // 多路复用率
  OLED_Write_Cmd(0x3F);
  OLED_Write_Cmd(0xD3); // 显示偏移
  OLED_Write_Cmd(0x00);
  OLED_Write_Cmd(0x40); // 起始行
  OLED_Write_Cmd(0x8D); // 电荷泵
  OLED_Write_Cmd(0x14);
  OLED_Write_Cmd(0x20); // 内存模式
  OLED_Write_Cmd(0x00);
  OLED_Write_Cmd(0xA1); // 段重定向
  OLED_Write_Cmd(0xC8); // 扫描方向
  OLED_Write_Cmd(0xDA); // COM引脚配置
  OLED_Write_Cmd(0x12);
  OLED_Write_Cmd(0x81); // 对比度
  OLED_Write_Cmd(0xCF);
  OLED_Write_Cmd(0xD9); // 预充电周期
  OLED_Write_Cmd(0xF1);
  OLED_Write_Cmd(0xDB); // VCOMH电压
  OLED_Write_Cmd(0x40);
  OLED_Write_Cmd(0xA4); // 整体显示开启
  OLED_Write_Cmd(0xA6); // 正常显示
  OLED_Write_Cmd(0xAF); // 开启显示
  OLED_Clear();
}

// 清屏
void OLED_Clear(void) {
  for(uint8_t page=0; page<8; page++) {
    OLED_Write_Cmd(0xB0 + page); // 设置页地址
    OLED_Write_Cmd(0x00);        // 列低地址
    OLED_Write_Cmd(0x10);        // 列高地址
    for(uint8_t col=0; col<128; col++) {
      OLED_Write_Data(0x00);     // 填充空白
    }
  }
}

// 显示字符串
void OLED_ShowString(uint8_t x, uint8_t y, char *str) {
  uint8_t j = 0;
  while (str[j] != '\0') {
    // 在字库中查找字符(16x8字体)
    for(uint8_t i=0; i<8; i++) {
      OLED_Write_Cmd(0xB0 + y);              // 页地址
      OLED_Write_Cmd(((x+j*8)&0x0F) | 0x00); // 列低地址
      OLED_Write_Cmd(((x+j*8)>>4) | 0x10);   // 列高地址
      OLED_Write_Data(Font8x16[str[j]-32][i]);// 写入字模数据
      OLED_Write_Data(Font8x16[str[j]-32][i+8]);
    }
    j++;
  }
}

步骤3:主函数调用

// main.c
#include "stm32f1xx_hal.h"
#include "oled.h"

int main(void) {
  HAL_Init();
  SystemClock_Config();
  MX_SPI1_Init(); // SPI初始化(需在CubeMX配置)

  OLED_Init();
  OLED_ShowString(0, 0, "Hello STM32!");
  OLED_ShowString(0, 2, "OLED Display Test");

  while(1) {
    // 主循环
  }
}

3. 关键说明

  1. 字库依赖

    • 需要提供Font8x16二维数组(包含ASCII字符的点阵数据)
    • 可使用PCtoLCD2002等工具生成字模
  2. SPI配置

    • 在CubeMX中配置SPI为全双工主模式
    • 时钟频率建议 ≤ 10MHz
    • 数据大小:8位,MSB先行
  3. 优化方向

    • 添加显示图像函数
    • 实现缓冲机制(减少SPI通信次数)
    • 支持中文字库(需扩展字库数组)

完整工程需要配合:

  1. STM32CubeMX生成的SPI初始化代码
  2. 正确的时钟配置
  3. 字库数据文件(font.h)

这个示例展示了OLED显示的基本操作,实际使用时请根据具体硬件连接修改引脚定义,并确保SPI外设已正确初始化。

液晶显示屏是什么材料做的

液晶显示屏(Liquid Crystal Display,简称LCD)是一种广泛使用的显示技术,它利用液晶材料的光学特性来控制光线的通过,从而实

2024-10-12 10:41:33

液晶显示屏与led显示屏的区别

在现代电子设备中,显示屏是人机交互的重要界面。随着科技的发展,显示屏技术也在不断进步,其中液晶显示屏(LCD)和LED

2024-10-12 10:39:28

液晶显示薄膜恒温恒湿试验箱

1970-01-01 08:00:00 至 1970-01-01 08:00:00

1602液晶显示驱动程序下载

1602液晶显示驱动程序下载

资料下载 岁月流失了真情 2022-01-11 11:13:34

字段式液晶显示驱动芯片VKL076

字段式液晶显示驱动芯片VKL076

资料下载 xiaoxuanzi898 2021-05-29 10:59:21

彩色液晶显示

彩色液晶显示课件免费下载。

资料下载 姚小熊27 2021-04-15 14:43:28

使用单片机实现1602液晶显示的密码锁C语言程序免费下载

使用单片机实现1602液晶显示的密码锁C语言程序免费下载

资料下载 佚名 2021-03-30 09:32:40

LCD1602液晶显示屏的基础驱动程序免费下载

本文档的主要内容详细介绍的是LCD1602液晶显示屏的基础驱动程序免费下载。

资料下载 王艳 2019-08-16 17:32:00

基于单片机的1602液晶显示实验 1602液晶显示模块简介

1602 液晶显示模块是一种通用的工业液晶显示模块,专门用来显示字母、数字、符号等的点阵型

2023-07-27 16:46:08

如何提高液晶显示屏呢?

可以通过改进液晶显示屏的面板技术来提高液晶显示屏的对比度,采用TN面板的显示屏对比度都比较低,可以通过IPS和VA技术,即使用IPS型面板和VA

2023-04-21 12:36:15

LCD液晶显示的配置

终端的,大大的屏幕显示什么都方便,接到产品上面也显得特别高端,当然在考虑成本的情况下OLED和12864这些也是不错的选择。材料STM32F4正点原子探索者开发板原理图TFT_LCD(我这里用的是4.3寸的

2021-08-24 08:04:09

LCD1602液晶显示器的使用要点

LCD1602液晶显示器是最为广泛使用的一种字符型液晶显示模块。

2021-07-11 16:56:20

TFT液晶显示原理是什么?

TFT液晶显示原理是什么?STN液晶显示原理是什么?TN型液晶显示原理是什么?

2021-06-01 06:34:10

液晶显示器的工作原理是什么

液晶显示器的工作原理是什么?在这里小编就和您介绍一下液晶显示器的工作原理,让您液晶显示器了解的更全面。

2020-06-26 16:45:00

液晶显示器的挑选要素盘点

随着科技的不断发展,人们对液晶显示器的要求也越来越高,对于不同用途的液晶显示器所需求的性能也不同,那么如何选择液晶显示器?不同用途的

2020-05-26 15:23:58

7天热门专题 换一换
相关标签