土木本科生的STM32探索之旅:从零点亮 SSD1306OLED 屏幕,驱动显示实战
一、前言
作为土木专业的本科生,在 STM32 的探索路上,我们已经完成了串口控制 LED、触摸按键点灯、按键交互等基础实战。这次我们将更进一步,解锁SSD1306 驱动 OLED 屏幕的核心技能 —— 这是嵌入式开发中最常用的显示方案,也是后续做数据可视化、人机交互的基础。
由于是非专业出身,我会尽量从硬件原理、代码实现到效果调试,全程手把手带你从零点亮 128×64 分辨率的 SSD1306 OLED 屏幕,哪怕是零基础也能跟着完成。
我担心我讲的不好,或者原理性的理解有问题,为了大家方便,特此在下方提供了其他专业博主的视频链接,若是有问题或者疑问的地方,也可以查看哦。链接如下:
keysking:【STM32入门教程-2025】第14集 如何在OLED屏幕上挥毫_哔哩哔哩_bilibili
高博士:[10-03]OLED屏工作原理简介_哔哩哔哩_bilibili
对上述两个视频链接中原理的讲解,我听的有点云里雾里的,哈哈,oled屏幕点亮是可以点亮的,毕竟有大佬做好了基础,我们把模块化的东西搬过来组合成我们自己的东西就好。
二、核心原理:SSD1306 OLED 屏幕是什么?
1. 核心参数与特性
-
驱动芯片:SSD1306(OLED 屏幕的 “大脑”,负责控制每一个像素的亮灭)
-
分辨率:主流为 128×64(128 列、64 行像素,总像素数 8192 个)

图片来自keysking的视频
-
通信接口:支持I2C、SPI、并行,其中I2C 接口是最常用的方案(仅需 2 根信号线,接线简单)
-
供电:3.3V(部分模块支持 5V,STM32 开发板直接用 3.3V 供电即可)
-
优势:自发光、对比度高、视角广、功耗低,适合嵌入式低功耗场景
2. 工作原理
SSD1306 芯片内部自带显存(GRAM),我们只需要通过 I2C/SPI 向芯片发送指令和数据,芯片就会自动将显存内容刷新到屏幕上。
-
指令:用于配置屏幕(初始化、开关显示、设置显示区域、对比度等)
-
数据:对应屏幕上的像素点(1 个字节控制 8 个垂直像素,1 点亮,0 熄灭)
对于原理性的内容,可能有一些枯燥,甚至是不是很理解,大家只要知道到这个屏幕是由一个个点组成,那要实现屏幕出现我们想要的文字,是不是只要一些点组成文字就好了?那要怎么实现这些点亮起,组成这个文字的全部坐标,如下图蓝色的字母A,就是由一个个点组成。

图片来自高博士的视频
说了这么多,原理可能还是不理解,没有基础的确是有点难理解,哈哈,没关系,我在下面的实战中,会带领大家把大佬们已做好的驱动程序代码拿来拼装,不要害怕。
三、直接动手实战(硬核高能内容)
我们使用 STM32CubeIDE + HAL 库开发,全程用 HAL 库函数实现,避免了寄存器操作,降低上手难度。

1、打开STM32CubeIDE软件,选择stm32f103vet6芯片,新建项目:OLED_TEST


2、为防止f103芯片被锁芯片,修改sys的debug模式,如下图所示

3、通信方式选择i2c,为了可能数据量大,反应能够快一些,更改了速度为高速模式


4、rcc选择外部晶振的时钟,时钟树那里设置为72mhz,并单独生成i2c相应的.h和.c文件,如下图所示



5、点击菜单栏的齿轮,生成代码

生成代码以后的情况
6、利用大佬们已经编写好的驱动代码,将其移至到我们的项目中(重点)
可利用的驱动资源有两个,一个是keysking,另外一个是高博士的代码仓库。链接和截图如下:
keysking:波特律动LED字模生成器



高博士:3 例程_hal库_cubeide/1001I2C_OLED.zip · gaoyanzeng/drg_st_2_f103vet6 - 码云 - 开源中国


有挑战意愿或者兴趣的同学,可以尝试一些利用keysking的资料包,试一试看能不能让屏幕亮起来。我这里为了节约时间,我后续的操作采用了高博士的资料。
下载高博士的oled程序,将其中的三个文件导入或者复制粘贴到我们的项目文件中去。





在这里大家根据截图中的路径,看一下怎么找到这个三个驱动文件。
打开以后的oled_i2c.c代码如下:
/*
* oled_i2c.c
*
* Created on: May 16, 2024
* Author: QH
*/
/***
************************************************************************************************
* 下面这一部分是注释代码是高博士的广告内容,大家复制使用的时候可以省略
* @description
* 实验平台:DRG GD-1 GD32F103C8T6
* Q群:366182133,Q群答疑团队随时为您提供技术支持
* B站:https://space.bilibili.com/486637340
* 开发板购买:https://genbotter.taobao.com
* 微信公众号:GenBotter
************************************************************************************************
***/
//从下面这里开始复制,复制以下的全部内容👇
#include "oled_i2c.h"
#include "oled_font.h"
I2C_HandleTypeDef *oled_i2c_handle = NULL; // oled的i2c句柄
/**
* 初始化oled i2c句柄的函数
*/
void oled_set_i2c_handle(I2C_HandleTypeDef *hi2c_handle) {
oled_i2c_handle = hi2c_handle;
}
/**
* @brief i2c写指令
* @unsigned char i2c_command 要写的指令内容
*/
void oled_write_command(unsigned char i2c_command) {
if (oled_i2c_handle == NULL) {
return;
}
uint8_t *pData;
pData = &i2c_command;
HAL_I2C_Mem_Write(oled_i2c_handle, OLED_I2C_ADDR, 0x00, I2C_MEMADD_SIZE_8BIT,
pData, 1, 100);
}
/**
* @brief i2c写数据
* @unsigned char i2c_data 要写的数据内容
*/
void oled_write_data(unsigned char i2c_data) {
if (oled_i2c_handle == NULL) {
return;
}
uint8_t *pData;
pData = &i2c_data;
HAL_I2C_Mem_Write(oled_i2c_handle, OLED_I2C_ADDR, 0x40, I2C_MEMADD_SIZE_8BIT,
pData, 1, 100);
}
/**
* 功能:
* 输入:无
**/
void oled_init(void){
oled_write_command(0xAE);// 0xAE:关显示,0xAF:开显示
oled_write_command(0x00);// 设置开始地址的低字节
oled_write_command(0x10);// 设置开始地址的高字节
oled_write_command(0xd5);// 命令头,设置显示时钟分频比/振荡器频率
oled_write_command(0x80);// 设置分割比率,设置时钟为100帧/秒
oled_write_command(0xa8);// 命令头,设置多路复用率(1 to 64)
oled_write_command(0x3f);// --1/64 duty
oled_write_command(0xd3);// 命令头,设置显示偏移移位映射RAM计数器(0x00~0x3F)
oled_write_command(0x00);// 不偏移
oled_write_command(0x00);// 写入页位置(0xB0~7)
oled_write_command(0x40);// 显示开始线
oled_write_command(0x8d);// VCC电源
oled_write_command(0x14);// --set(0x10) disable
oled_write_command(0xa1);// 设置段重新映射
oled_write_command(0xc8);// 设置Y轴扫描方向,0xc0上下反置 ,0xc8正常(上边为0行)
oled_write_command(0xda);// 命令头,--set com pins hardware configuration
oled_write_command(0x12);
oled_write_command(0x81);// 对比度,指令:0x81,数据:0~255(255最高)
oled_write_command(0xff);
oled_write_command(0xd9);// 命令头,--set pre-charge period
oled_write_command(0xf1);// Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
oled_write_command(0xdb);// 命令头,--set vcomh
oled_write_command(0x30);// Set VCOM Deselect Level
oled_write_command(0x20);// 水平寻址设置
oled_write_command(0x00);
oled_write_command(0xa4);// 0xa4:正常显示,0xa5:整体点亮
oled_write_command(0xa6);// 0xa6:正常显示,0xa7:反色显示
oled_write_command(0xAF);// 0xAE:关显示,0xAF:开显示
}
// OLED显示单一色度
void oled_fill(uint8_t fill_data){
uint8_t i=0, n;
for(i = 0; i < 8; i++){
oled_write_command (0xB0+i); //设置页地址(0~7)
oled_write_command (0x00); //设置显示位置—列低地址
oled_write_command (0x10); //设置显示位置—列高地址
for(n = 0; n < 132; n++){
oled_write_data(fill_data);
}
}
}
// OLED 白屏显示
void oled_display_white(void){
oled_fill(0xFF);
}
// OLED 清屏显示
void oled_clear_all(void){
oled_fill(0x00);
}
// OLED打开
void oled_on(){
oled_write_command(0xAF); // 开启显示
oled_write_command(0x8D); // 设置电荷泵
oled_write_command(0x14); // 开启电荷泵
}
// OLED关闭
void oled_off(){
oled_write_command(0xAF); // 开启显示
oled_write_command(0x8D); // 设置电荷泵
oled_write_command(0x10); // 关闭电荷泵
}
// OLED设置显示位置
void oled_set_pos(uint8_t x, uint8_t y){
oled_write_command(0xB0 + y);
oled_write_command((x & 0xf0) >> 4 | 0x10 );
oled_write_command((x & 0x0f) | 0x01 );
}
// 显示中文汉字
void oled_show_chinese(uint8_t x, uint8_t y, uint8_t index){
uint8_t i;
oled_set_pos(x, y);
for(i = 0; i < 16; i++){
oled_write_data(Hzk[2*index][i]);
}
oled_set_pos(x, y+1);
for(i = 0; i < 16; i++){
oled_write_data(Hzk[2*index + 1][i]);
}
}
// 显示char字符
void oled_show_char(uint8_t x, uint8_t y, uint8_t chr, uint8_t char_size){
uint8_t c_index = 0, i = 0;
c_index = chr - ' '; // 获取chr在字模数组中的序号
if(char_size == 16){
if(x > MAX_COLUMN - 8){ //如果超出了屏幕的显示宽度,则换到下一行重新开始
x = 0;
y += 2;
}
oled_set_pos(x, y);
for(i = 0; i < 8; i++){
oled_write_data(F8X16[c_index*16 + i]);
}
oled_set_pos(x, y+1);
for(i = 0; i < 8; i++){
oled_write_data(F8X16[c_index*16 + i + 8]);
}
}else if(char_size == 8){
if(x > MAX_COLUMN - 6){ //如果超出了屏幕的显示宽度,则换到下一行重新开始
x = 0;
y += 1;
}
oled_set_pos(x, y);
for(i = 0; i < 6; i++){
oled_write_data(F6x8[c_index][i]);
}
}else{
oled_show_error(x, y, (uint8_t *)"wrong char_size setted.");
}
}
// 显示字符串
void oled_show_string(uint8_t x, uint8_t y, uint8_t *str, uint8_t char_size){
uint8_t i = 0;
while(str[i] != '\0'){
oled_show_char(x, y, str[i], char_size);
if(char_size == 16){
x += 8;
if(x > MAX_COLUMN - 8){
x = 0;
y += 2;
}
}else if(char_size == 8){
x += 6;
if(x > MAX_COLUMN - 8){
x = 0;
y += 1;
}
}
i++;
}
}
// 在(x,y)处显示“error!”信息
void oled_show_error(uint8_t x, uint16_t y, uint8_t *err){
oled_show_string(x, y, err, 16);
}
main.c代码如下:
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file : main.c
* @brief : Main program body
******************************************************************************
* @attention
*
* Copyright (c) 2024 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "oled_i2c.h"
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
/* USER CODE END PTD */
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */
/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */
/* USER CODE END PM */
/* Private variables ---------------------------------------------------------*/
I2C_HandleTypeDef hi2c1;
/* USER CODE BEGIN PV */
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_I2C1_Init(void);
/* USER CODE BEGIN PFP */
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void) {
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_I2C1_Init();
/* USER CODE BEGIN 2 */
oled_set_i2c_handle(&hi2c1); //初始化OLED对应的I2C外设句柄
oled_init();
oled_clear_all();
oled_show_chinese(5, 0, 3); //显示汉字库中的第4个汉字,“嵌”
oled_show_chinese(22, 0, 4);//显示汉字库中的第5个汉字,“入”
oled_show_chinese(39, 0, 5);//显示汉字库中的第4个汉字,“式”
oled_show_string(5, 2, (uint8_t*) "NO KEY pressed.", 16);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1) {
if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET) {
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
oled_show_string(5, 2, (uint8_t*) "Key A pressed. ", 16);
}
if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1) == GPIO_PIN_RESET) {
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
oled_show_string(5, 2, (uint8_t*) "Touch key pressed.", 16);
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
/**
* @brief System Clock Configuration
* @retval None
*/
void SystemClock_Config(void) {
RCC_OscInitTypeDef RCC_OscInitStruct = { 0 };
RCC_ClkInitTypeDef RCC_ClkInitStruct = { 0 };
/** Initializes the RCC Oscillators according to the specified parameters
* in the RCC_OscInitTypeDef structure.
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
Error_Handler();
}
/** Initializes the CPU, AHB and APB buses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) {
Error_Handler();
}
}
/**
* @brief I2C1 Initialization Function
* @param None
* @retval None
*/
static void MX_I2C1_Init(void) {
/* USER CODE BEGIN I2C1_Init 0 */
/* USER CODE END I2C1_Init 0 */
/* USER CODE BEGIN I2C1_Init 1 */
/* USER CODE END I2C1_Init 1 */
hi2c1.Instance = I2C1;
hi2c1.Init.ClockSpeed = 100000;
hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
hi2c1.Init.OwnAddress1 = 0;
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c1.Init.OwnAddress2 = 0;
hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
if (HAL_I2C_Init(&hi2c1) != HAL_OK) {
Error_Handler();
}
/* USER CODE BEGIN I2C1_Init 2 */
/* USER CODE END I2C1_Init 2 */
}
/**
* @brief GPIO Initialization Function
* @param None
* @retval None
*/
static void MX_GPIO_Init(void) {
GPIO_InitTypeDef GPIO_InitStruct = { 0 };
/* USER CODE BEGIN MX_GPIO_Init_1 */
/* USER CODE END MX_GPIO_Init_1 */
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1, GPIO_PIN_SET);
/*Configure GPIO pins : PA0 PA1 */
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/*Configure GPIO pins : PB0 PB1 */
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* USER CODE BEGIN MX_GPIO_Init_2 */
/* USER CODE END MX_GPIO_Init_2 */
}
/* USER CODE BEGIN 4 */
/* USER CODE END 4 */
/**
* @brief This function is executed in case of error occurrence.
* @retval None
*/
void Error_Handler(void) {
/* USER CODE BEGIN Error_Handler_Debug */
/* User can add his own implementation to report the HAL error return state */
__disable_irq();
while (1) {
}
/* USER CODE END Error_Handler_Debug */
}
#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t *file, uint32_t line)
{
/* USER CODE BEGIN 6 */
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */
oled_font.h代码如下:
/*
* oled_font.h
*
* Created on: May 16, 2024
* Author: QH
*/
#ifndef BSP_INC_OLED_FONT_H_
#define BSP_INC_OLED_FONT_H_
//常用ASCII表中字符的显示点阵
//偏移量32
/************************************6*8的点阵************************************/
const unsigned char F6x8[][6] =
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// sp
0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,// !
0x00, 0x00, 0x07, 0x00, 0x07, 0x00,// "
0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14,// #
0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12,// $
0x00, 0x62, 0x64, 0x08, 0x13, 0x23,// %
0x00, 0x36, 0x49, 0x55, 0x22, 0x50,// &
0x00, 0x00, 0x05, 0x03, 0x00, 0x00,// '
0x00, 0x00, 0x1c, 0x22, 0x41, 0x00,// (
0x00, 0x00, 0x41, 0x22, 0x1c, 0x00,// )
0x00, 0x14, 0x08, 0x3E, 0x08, 0x14,// *
0x00, 0x08, 0x08, 0x3E, 0x08, 0x08,// +
0x00, 0x00, 0x00, 0xA0, 0x60, 0x00,// ,
0x00, 0x08, 0x08, 0x08, 0x08, 0x08,// -
0x00, 0x00, 0x60, 0x60, 0x00, 0x00,// .
0x00, 0x20, 0x10, 0x08, 0x04, 0x02,// /
0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
0x00, 0x00, 0x42, 0x7F, 0x40, 0x00,// 1
0x00, 0x42, 0x61, 0x51, 0x49, 0x46,// 2
0x00, 0x21, 0x41, 0x45, 0x4B, 0x31,// 3
0x00, 0x18, 0x14, 0x12, 0x7F, 0x10,// 4
0x00, 0x27, 0x45, 0x45, 0x45, 0x39,// 5
0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
0x00, 0x01, 0x71, 0x09, 0x05, 0x03,// 7
0x00, 0x36, 0x49, 0x49, 0x49, 0x36,// 8
0x00, 0x06, 0x49, 0x49, 0x29, 0x1E,// 9
0x00, 0x00, 0x36, 0x36, 0x00, 0x00,// :
0x00, 0x00, 0x56, 0x36, 0x00, 0x00,// ;
0x00, 0x08, 0x14, 0x22, 0x41, 0x00,// <
0x00, 0x14, 0x14, 0x14, 0x14, 0x14,// =
0x00, 0x00, 0x41, 0x22, 0x14, 0x08,// >
0x00, 0x02, 0x01, 0x51, 0x09, 0x06,// ?
0x00, 0x32, 0x49, 0x59, 0x51, 0x3E,// @
0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C,// A
0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,// B
0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,// C
0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,// D
0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,// E
0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,// F
0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,// G
0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,// H
0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,// I
0x00, 0x20, 0x40, 0x41, 0x3F, 0x01,// J
0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,// K
0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,// L
0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F,// M
0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F,// N
0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,// O
0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,// P
0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
0x00, 0x7F, 0x09, 0x19, 0x29, 0x46,// R
0x00, 0x46, 0x49, 0x49, 0x49, 0x31,// S
0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,// T
0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,// U
0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,// V
0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F,// W
0x00, 0x63, 0x14, 0x08, 0x14, 0x63,// X
0x00, 0x07, 0x08, 0x70, 0x08, 0x07,// Y
0x00, 0x61, 0x51, 0x49, 0x45, 0x43,// Z
0x00, 0x00, 0x7F, 0x41, 0x41, 0x00,// [
0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55,// '\'
0x00, 0x00, 0x41, 0x41, 0x7F, 0x00,// ]
0x00, 0x04, 0x02, 0x01, 0x02, 0x04,// ^
0x00, 0x40, 0x40, 0x40, 0x40, 0x40,// _
0x00, 0x00, 0x01, 0x02, 0x04, 0x00,// '
0x00, 0x20, 0x54, 0x54, 0x54, 0x78,// a
0x00, 0x7F, 0x48, 0x44, 0x44, 0x38,// b
0x00, 0x38, 0x44, 0x44, 0x44, 0x20,// c
0x00, 0x38, 0x44, 0x44, 0x48, 0x7F,// d
0x00, 0x38, 0x54, 0x54, 0x54, 0x18,// e
0x00, 0x08, 0x7E, 0x09, 0x01, 0x02,// f
0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,// g
0x00, 0x7F, 0x08, 0x04, 0x04, 0x78,// h
0x00, 0x00, 0x44, 0x7D, 0x40, 0x00,// i
0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,// j
0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,// k
0x00, 0x00, 0x41, 0x7F, 0x40, 0x00,// l
0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,// m
0x00, 0x7C, 0x08, 0x04, 0x04, 0x78,// n
0x00, 0x38, 0x44, 0x44, 0x44, 0x38,// o
0x00, 0xFC, 0x24, 0x24, 0x24, 0x18,// p
0x00, 0x18, 0x24, 0x24, 0x18, 0xFC,// q
0x00, 0x7C, 0x08, 0x04, 0x04, 0x08,// r
0x00, 0x48, 0x54, 0x54, 0x54, 0x20,// s
0x00, 0x04, 0x3F, 0x44, 0x40, 0x20,// t
0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C,// u
0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,// v
0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C,// w
0x00, 0x44, 0x28, 0x10, 0x28, 0x44,// x
0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C,// y
0x00, 0x44, 0x64, 0x54, 0x4C, 0x44,// z
0x14, 0x14, 0x14, 0x14, 0x14, 0x14,// horiz lines
};
/****************************************8*16的点阵************************************/
const unsigned char F8X16[]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0
0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 1
0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2
0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 3
0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 4
0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//% 5
0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//& 6
0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7
0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//( 8
0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//) 9
0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//* 10
0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+ 11
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//, 12
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//- 13
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//. 14
0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/// 15
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 16
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 17
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 18
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 19
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 20
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 21
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 22
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 23
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 24
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 25
0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//: 26
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//; 27
0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//< 28
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//= 29
0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//> 30
0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//? 31
0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@ 32
0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33
0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34
0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35
0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36
0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37
0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38
0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39
0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40
0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41
0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42
0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43
0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44
0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45
0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47
0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49
0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50
0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51
0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52
0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53
0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54
0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55
0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56
0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57
0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58
0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[ 59
0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\ 60
0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//] 61
0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_ 63
0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a 65
0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 66
0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 67
0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 68
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 69
0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 70
0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 71
0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 72
0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 73
0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 74
0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 75
0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 76
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 77
0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 78
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 79
0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 80
0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 81
0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 82
0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 83
0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 84
0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 85
0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 86
0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 87
0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 88
0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 89
0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 90
0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{ 91
0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//| 92
0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//} 93
0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94
};
/*汉字库,16 X 16 , 宋体*/
//这一块代码是高博士板子给自己板子打广告使用时候的汉字,大家可以试着看看,后续可以再修改它
char Hzk[][16]={
{0x04,0x04,0x04,0x04,0xF4,0x94,0x95,0x96,0x94,0x94,0xF4,0x04,0x04,0x04,0x04,0x00},
{0x00,0xFE,0x02,0x02,0x7A,0x4A,0x4A,0x4A,0x4A,0x4A,0x7A,0x02,0x82,0xFE,0x00,0x00},/*"高",0*/
{0x20,0x20,0xFF,0x20,0x24,0xF4,0x54,0x54,0x54,0xFF,0x54,0x55,0x56,0xF4,0x04,0x00},
{0x00,0x00,0xFF,0x00,0x08,0x0B,0x19,0x69,0x09,0x0B,0x49,0x89,0x7D,0x0B,0x08,0x00},/*"博",1*/
{0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00},
{0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00},/*"士",2*/
{0x80,0x80,0xEE,0x88,0x88,0x88,0xE8,0x8F,0x08,0x88,0x78,0x48,0x4E,0x40,0xC0,0x00},
{0x00,0x00,0x7F,0x24,0x24,0x24,0x7F,0x00,0x81,0x40,0x30,0x0F,0x30,0x41,0x80,0x00},/*"嵌",3*/
{0x00,0x00,0x00,0x00,0x00,0x01,0xE2,0x1C,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x03,0x0C,0x30,0x40,0x80,0x80,0x00},/*"入",4*/
{0x10,0x10,0x90,0x90,0x90,0x90,0x90,0x10,0x10,0xFF,0x10,0x10,0x11,0x16,0x10,0x00},
{0x00,0x20,0x60,0x20,0x3F,0x10,0x10,0x10,0x00,0x03,0x0C,0x10,0x20,0x40,0xF8,0x00},/*"式",5*/
};
#endif /* BSP_INC_OLED_FONT_H_ */
oled_i2c.h代码如下:
/*
* oled.h
*
* Created on: May 16, 2024
* Author: genbotter
*/
#ifndef BSP_INC_OLED_I2C_H_
#define BSP_INC_OLED_I2C_H_
#include "main.h"
#define OLED_I2C_ADDR 0x78
#define OLED_I2C_CMD_ADDR 0x00
#define OLED_I2C_DATA_ADDR 0x40
#define MAX_COLUMN 132
void oled_set_i2c_handle(I2C_HandleTypeDef *hi2c_handle);
void oled_write_command(uint8_t oled_cmd); //写命令
void oled_write_data(uint8_t oled_data); //写数据
void oled_init(void);
void oled_display_white(void); // 白屏显示OLED
void oled_clear_all(void); // 清屏显示OLED
void oled_fill(uint8_t fill_data); // 单一色度填充OLED
void oled_set_pos(uint8_t x, uint8_t y); // 设置坐标
void oled_show_char(uint8_t x, uint8_t y, uint8_t chr, uint8_t char_size); // 显示字符
void oled_show_string(uint8_t x, uint8_t y, uint8_t *str, uint8_t char_size); // 显示字符串
void oled_show_chinese(uint8_t x, uint8_t y, uint8_t index); // 显示中文
void oled_show_error(uint8_t x, uint16_t y, uint8_t *err); // 显示错误提示
#endif /* BSP_INC_OLED_I2C_H_ */
几个可以copy的内容拿到了,我们可以先试试,直接不修改他的代码,先成功让oled屏幕显示广告词,后续再修改内容,让它显示我们想要出现的汉字英文或者数字等等内容。
我这里是利用记事本打开main.c、oled_i2c.c、oled_font.h、oled_i2c.h

软件的设置还是和之前是一样的,在三、直接动手实战(硬核高能内容)这里的第5步,已经生成了初始的代码。
下面可以直接把下载过的驱动代码,直接拖入inc、src中去,下面中的图片是已经拖如了的。

另外的一个方法就是自己新建.c和.h文件。由于电脑按键截屏存在一定问题,我就用手机拍了一下怎么新建后文件。

同样的,可以新建.c文件

建完以后,如果不用拖入或者导入文件的方式,大家可以用记事本打开几个代码内容,复制粘贴代码也行。高博士的是在driver文件夹新建了(需要修改一下路径),我们也可以在core中新建,这样可以不用修改路径。

代码粘贴进去以后的情况
由于这部分有点多,也比较烦,我这个帖子结束以后,会陆续更新实验的视频,请大家静待哔哩哔哩作品更新。
7、点击小锤子编译代码无误后,烧录代码进单片机。




这个是下载高博士代码,复制它的东西显示的东西,那我们要怎么修改其中的内容,变成我们自己的呢?
8、利用取字模软件工具或者其他工具,修改代码,替换我们自己的东西。
比如我想在屏幕上面显示:hello 小谢 2026.4.6
在文章的前部分内容我们已经看到了相关取字模工具,大家需要把它下载过来,并且解压。
6 板上器件手册 · gaoyanzeng/drg_st_2_f103vet6 - 码云 - 开源中国



双击打开取字模软件pctolcd2002

这里需要对字模选项进行设置,不然中文会出现一定的问题


将取字模后的代码复制过来,替换掉原来的高博

重新烧录代码,便可以看到以下的情况。

有条件的同学可以尝试一下keysking的取字模工具,大佬可以在屏幕上将ikun展示出来哦

显示中文的这一部分内容略有点难度哦,大家可以好好地利用下ai工具辅助一下。
由于本人非科班出身,原理解释和理解上可能存在一定问题,请大家谅解哈。
有问题的小伙伴可以在评论区留言,或者是在后续的实践视频下留言评论。
学无止境,大家一块加油哦!!
更多推荐
所有评论(0)