"oled.h" #include "24cxx.h" #include "OLED4PINiic.h" const u8 TEXT_Buffer[]={"Explorer STM32F4 IIC TEST"}; #define SIZE sizeof(TEXT_Buffer) int main(void) { const unsigned char *point; u16 i=0; u8 j=0; delay_init(); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); uart_init(115200); LED_Init(); KEY_Init(); ¯ AT24CXX_Init(); OLED_init(); point= &picture_tab[0]; for(i=0;i<SIZE;i++) { OLED_Clear(); OLED_ShowString(0,30,"21221054",16); OLED_ShowString(0,15,"2023/5/18",16); OLED_ShowChinese(0,0,0,16,1); OLED_ShowChinese(16,0,1,16,1); OLED_ShowChinese(32,0,2,16,1); OLED_Refresh_Gram(); delay_ms(1000); }在此基础上编写程序,使得显示的字体从OLED屏右端进入,左端出去,实现字体的滚动播放
时间: 2024-01-05 14:03:19 浏览: 76
以下是实现字体滚动播放的代码:
```C
#include "oled.h"
#define SCROLL_SPEED 100 // 滚动速度,单位为毫秒
int main(void)
{
const unsigned char *point;
u16 i = 0;
u8 j = 0;
u8 scroll_pos = 0; // 滚动位置
u8 scroll_dir = 0; // 滚动方向,0表示向左滚动,1表示向右滚动
delay_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
uart_init(115200);
LED_Init();
KEY_Init();
AT24CXX_Init();
OLED_init();
point = &TEXT_Buffer[0];
while (1)
{
OLED_Clear();
// 显示固定内容
OLED_ShowString(0, 30, "21221054", 16);
OLED_ShowString(0, 15, "2023/5/18", 16);
OLED_ShowChinese(0, 0, 0, 16, 1);
OLED_ShowChinese(16, 0, 1, 16, 1);
OLED_ShowChinese(32, 0, 2, 16, 1);
// 显示滚动内容
for (j = 0; j < 8; j++) // 一页最多能显示8个汉字或16个英文字母
{
OLED_ShowChinese(64 + j * 16, 0, point[scroll_pos + j], 16, 1);
}
OLED_Refresh_Gram();
delay_ms(SCROLL_SPEED);
// 更新滚动位置和方向
if (scroll_dir == 0)
{
scroll_pos++;
if (scroll_pos + 8 >= SIZE) // 到达右端,改变滚动方向
{
scroll_dir = 1;
scroll_pos = SIZE - 8;
}
}
else
{
scroll_pos--;
if (scroll_pos == 0) // 到达左端,改变滚动方向
{
scroll_dir = 0;
scroll_pos = 0;
}
}
}
}
```
代码中使用了一个 `scroll_pos` 变量来表示当前滚动位置,同时使用一个 `scroll_dir` 变量来表示滚动方向,0表示向左滚动,1表示向右滚动。在每次刷新 OLED 显示之前,先显示固定内容(包括日期、姓名等),然后再根据 `scroll_pos` 和 `scroll_dir` 来显示滚动内容。每隔一定时间更新 `scroll_pos` 和 `scroll_dir` 变量,实现滚动播放的效果。
阅读全文