OLEDSSD1306 滚动显示技术详解
在单片机领域中,OLEDSSD1306 滚动显示是一种常用的技术,用于显示多个图片或文字信息。今天,我们将详细介绍关于 OLEDSSD1306 滚动显示的技术,包括滚动显示的控制命令、滚动显示的实现思路,以及解决多个图片的衔接滚动显示问题。
一、OLEDSSD1306 滚动显示控制命令
在 SSD1306 控制器内部,有滚动显示的控制命令,以向右滚动显示为例,命令如下:
OLED_SD1306_WriteCmd(0x26);//r
OLED_SD1306_WriteCmd(0x00);//duty
OLED_SD1306_WriteCmd(0x04);//start page
OLED_SD1306_WriteCmd(0x07); //speed
OLED_SD1306_WriteCmd(0x05);//end page
OLED_SD1306_WriteCmd(0x01);//scroll timers
OLED_SD1306_WriteCmd(0x00); //duty
OLED_SD1306_WriteCmd(0xff);//duty
OLED_SD1306_WriteCmd(0x2f);//active
这些命令用于控制 OLED 显示屏的滚动显示,但是使用内部控制命令有一定的局限性,例如步伐不好控制,还有就是对于滚动显示的内容不能很好实时的更新。
二、解决多个图片的衔接滚动显示问题
为了解决多个图片的衔接滚动显示问题,我们可以建立图片 ID 表格,例如:
#define c_idx_16x10_ascii_v 4
#define c_idx_16x10_ascii_w 5
#define c_idx_16x10_digit_0 6
#define c_idx_16x10_digit_1 7
#define c_idx_16x10_digit_2 8
#define c_idx_16x10_digit_3 9
#define c_idx_16x10_digit_4 10
#define c_idx_16x10_digit_5 11
#define c_idx_16x10_digit_6 12
#define c_idx_16x10_digit_7 13
#define c_idx_16x10_digit_8 14
#define c_idx_16x10_digit_9 15
#define c_idx_16x10_dir_p 16
然后,我们可以根据各图片的 ID,建立成滚动列表,例如:
const u16 T_MuneMainBmpIdxInfo2[][2]=
//此处为主菜单需要显示警告信息的时候列表
{
{c_idx_null},
{c_idx_16x24_MenuMain_0,c_idx_16x12_Menu_Drop},
{c_idx_16x24_MenuMain_1,c_idx_16x12_Menu_Drop},
{c_idx_16x24_MenuMain_2,c_idx_16x12_Menu_Drop},
{c_idx_16x24_MenuMain_3,c_idx_16x12_Menu_Drop},
{c_idx_16x24_MenuMain_4,c_idx_16x12_Menu_Drop},
{c_idx_16x24_MenuMain_5,c_idx_16x12_Menu_Drop},
{c_idx_10x20_menu_warrning,c_idx_16x12_Menu_Drop},
{c_idx_16x24_MenuMain_0,c_idx_16x12_Menu_Drop},
{c_idx_16x24_MenuMain_1,c_idx_16x12_Menu_Drop},
{c_idx_16x24_MenuMain_2,c_idx_16x12_Menu_Drop},
{c_idx_16x24_MenuMain_3,c_idx_16x12_Menu_Drop},
{c_idx_16x24_MenuMain_4,c_idx_16x12_Menu_Drop},
{c_idx_16x24_MenuMain_5,c_idx_16x12_Menu_Drop},
{c_idx_10x20_menu_warrning},
{c_idx_null},
};
在建立好图片 ID 表格之后,还需要建立另外一个表格,该表格用于存储,在显示该图片的时候,存储该图片的大小,该大小为 X 或者 Y 的尺寸,,至于是 X还是 Y,主要是取决于取模方式,该表格如下:
const u8 T_MuneMainBmpIdxInfo2_Size[]={64,c_16x24_menumain_x_size,c_16x12_menu_drop_x_size,c_16x24_menumain_x_size,c_16x12_menu_drop_x_size,...};
通过这两个表格,我们可以轻松地实现多个图片的衔接滚动显示,并且解决了内部控制命令的局限性。