基于STM32使用OLED实现文字滚动

一、SPI简介

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

二、对需要的文字取字模

使用PCtoLCD软件进行取字模
首先如图示设置
在这里插入图片描述输入所需文字,电子生成字模
在这里插入图片描述

三、主要代码

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);        //开启滚动
	while(1) 
	{
		
	}
}

修改相应函数

void TEST_MainPage(void)
{	
	GUI_ShowCHinese(10,20,16,"梁梁梁",1);
	GUI_ShowString(4,48,"631907030311",16,1);
	delay_ms(1500);		
	delay_ms(1500);
}

将字模代码添加到oledfont中

"梁",0x00,0x00,0x23,0xF0,0x10,0x90,0x82,0x94,0x52,0x92,0x24,0x92,0xE1,0x10,0x22,0x50,
0x25,0x20,0x01,0x00,0xFF,0xFE,0x05,0x40,0x09,0x20,0x31,0x18,0xC1,0x06,0x01,0x00,/*"梁",0*/
"梁",0x00,0x00,0x23,0xF0,0x10,0x90,0x82,0x94,0x52,0x92,0x24,0x92,0xE1,0x10,0x22,0x50,
0x25,0x20,0x01,0x00,0xFF,0xFE,0x05,0x40,0x09,0x20,0x31,0x18,0xC1,0x06,0x01,0x00,/*"梁",1*/
"梁",0x00,0x00,0x23,0xF0,0x10,0x90,0x82,0x94,0x52,0x92,0x24,0x92,0xE1,0x10,0x22,0x50,
0x25,0x20,0x01,0x00,0xFF,0xFE,0x05,0x40,0x09,0x20,0x31,0x18,0xC1,0x06,0x01,0x00,/*"梁",2*/

在这里插入图片描述

四、硬件连接及实现效果

// OLED模块               STM32单片机
//   VCC         接       DC 5V/3.3V      //OLED屏电源正
//   GND         接          GND          //OLED屏电源地
//=======================================液晶屏数据线接线==========================================//
//本模块默认数据总线类型为4线制SPI
// OLED模块               STM32单片机
//   D1          接          PB15        //OLED屏SPI写信号
//=======================================液晶屏控制线接线==========================================//
// OLED模块               STM32单片机
//   CS          接          PB11        //OLED屏片选控制信号
//   RES         接          PB12        //OLED屏复位控制信号
//   DC          接          PB10        //OLED屏数据/命令选择控制信号
//   D0          接          PB13        //OLED屏SPI时钟信号

实现效果
在这里插入图片描述

五、总结

这次实验需学习了如何取字模和实现在OLED上滚动输出,操作中使用的是现成的代码,通过修改其中需要用到的部分,即可实现想要的效果。

六、参考

https://blog.csdn.net/m0_58414679/article/details/121411882?spm=1001.2014.3001.5501
https://blog.csdn.net/qq_43279579/article/details/111500137
https://blog.csdn.net/qq_45237293/article/details/111712565?spm=1001.2014.3001.5501

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在STM32上的OLED屏幕上实现文字滚动效果,你可以按照以下步骤进行操作: 1. 首先,确保你已经连接好了OLED屏幕并正确配置了STM32的外设。 2. 创建一个字符数组,用于存储你想要滚动显示的文字内容。 3. 在主循环中,使用一个变量来控制滚动的位置。可以使用一个循环计数器来逐步改变滚动位置。 4. 在每次循环迭代中,将字符数组中的内容根据滚动位置写入OLED屏幕。 5. 使用延时函数来控制滚动速度,并在每次迭代结束后更新滚动位置。 下面是一个示例代码,演示如何在STM32上的OLED屏幕上实现文字滚动效果: ```c #include "stm32f4xx_hal.h" #include "ssd1306.h" #define MAX_SCROLL_SIZE 128 // 最大滚动字符数 uint8_t scrollText[] = "Hello, World! This is a scrolling text example."; int main(void) { HAL_Init(); // 初始化OLED屏幕 ssd1306_Init(); int scrollPos = 0; int textLen = strlen((char*)scrollText); while (1) { // 清空屏幕 ssd1306_Fill(Black); // 将滚动文字绘制到屏幕上 for (int i = 0; i < ssd1306_GetWidth(); i++) { int charIndex = (i + scrollPos) % textLen; char c = scrollText[charIndex]; ssd1306_WriteChar(c, Font_7x10, White, i, 0); } // 刷新屏幕 ssd1306_UpdateScreen(); // 延时控制滚动速度 HAL_Delay(100); // 更新滚动位置 scrollPos++; if (scrollPos >= textLen) { scrollPos = 0; } } } ``` 这段示例代码假设你已经使用了名为ssd1306的库来控制OLED屏幕。你需要根据你使用的具体硬件和库进行适当的调整。 希望这能帮助到你!如果有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值