关键词:U8G2,显示驱动,RT-THREAD U8G2
说明:本实例用的液晶屏是 OLED12864显示器,显示器驱动为SSD1306,分辨率为128x64
备注:u8g2_font_unifont_t_symbols 这个字体集库里面有很多实用图形符号
软件包:U8G2
RT-Thread-Mirror-rt-u8g2-c-master ,
U8g2图形库是一个用于嵌入式设备的单色图形库,支持多种单色OLED和LCD显示控制器,如SSD1306,ST7920等。U8g2库可以从Arduino IDE的库管理器安装,也可以移植到STM32等平台。U8g2库支持三种绘图模式:全屏缓存模式,页面缓存模式和U8x8字符模式。U8g2库的使用需要选择合适的构造函数,初始化显示器,设置引脚号,编写回调函数和绘图指令。U8g2图形库的优点是可以使用多种字体,支持中文显示,提供丰富的图形程序,如线条,框,圆,位图等。U8g2图形库的缺点是需要占用一定的内存空间,速度较慢,不支持无控制器的显示屏。U8g2图形库的应用场景有:显示传感器数据,制作时钟,显示菜单,显示动画等。U8g2图形库是一个功能强大,兼容性好,易于使用的单色图形库。
搜索软件包 u8g2
添加后点击保存,下载软件包 保存的时间比较长;
由于网络,或者软件问题可能不能自动下载添加软件包,这时可以手动添加把文档符的软件包解压后复制到对应的目录即可(后续也需要设置接口)
添加位置,如下目录,放置到 packages
双击打开 设置界面
按图示勾选,勾选后 再次点击保存,注意,时间又比较长。.
增加的软件包在如下目录,打开示例文件。
如下根据实际情况重新定义IO,默认是定义的 PB6,PB7,我测试时改成了PD12,PD13
自带示例是注释掉的那部分,用的是系统命令行模式,改成了线程模式;
改好后,接上显示屏,烧录程序,显示屏正常显示。
#include
#include
#include
#include
#define OLED_I2C_PIN_SCL GET_PIN(D,12) // PB6
#define OLED_I2C_PIN_SDA GET_PIN(D,13) // PB7
//static void ssd1306_12864_sw_i2c_example(int argc,char *argv[])
static void ssd1306_12864_sw_i2c_example()
{
u8g2_t u8g2;
// Initialization
u8g2_Setup_ssd1306_i2c_128x64_noname_f( &u8g2, U8G2_R0, u8x8_byte_sw_i2c, u8x8_rt_gpio_and_delay);
u8x8_SetPin(u8g2_GetU8x8(&u8g2), U8X8_PIN_I2C_CLOCK, OLED_I2C_PIN_SCL);
u8x8_SetPin(u8g2_GetU8x8(&u8g2), U8X8_PIN_I2C_DATA, OLED_I2C_PIN_SDA);
u8g2_InitDisplay(&u8g2); /* 初始化显示控制器*/
u8g2_SetPowerSave(&u8g2, 0); /*是否开启省电模式,0禁用,1开启*/
// Draw Graphics
/* full buffer example, setup procedure ends in _f */
u8g2_ClearBuffer(&u8g2); /*清除缓冲区*/
u8g2_SetFont(&u8g2, u8g2_font_ncenB08_tr); /*设置字体*/
u8g2_DrawStr(&u8g2, 1, 12, "U8g2 on RT-Thread"); /*绘制字符串*/
u8g2_DrawStr(&u8g2, 1, 24, "Xue xi RT-Thread");
u8g2_SendBuffer(&u8g2); /*绘制缓冲区的内容*/
u8g2_SetFont(&u8g2, u8g2_font_unifont_t_symbols);
u8g2_DrawGlyph(&u8g2, 112, 56, 0x2604 ); /*绘制字体字集的符号,x 左上角的x坐标,y 左上角的y坐标,字符的unicode值*/
u8g2_SendBuffer(&u8g2);
}
//MSH_CMD_EXPORT(ssd1306_12864_sw_i2c_example, i2c ssd1306 software i2c sample);
/* 线程 led_entry 的入口函数 */
static void led_entry(void *param)
{
while(1)
{
ssd1306_12864_sw_i2c_example();
rt_thread_mdelay(5000);
}
}
void led_test(void)
{
rt_thread_t tid1;//创建线程控制块指针来接收线程创建函数的返回值,目的是通过返回值判断线程是否创建ok
/* 创建线程 1,名称是 BLUE_KEY_entry,入口是 BLUE_KEY_entry*/
tid1 = rt_thread_create("led_entry",
led_entry, RT_NULL,
4000,//设置内存堆栈大小
10, 50);//设置优先级,时间片参数,时间片是在有多个相同优先级线程时,这个线程每次被执行多少个时间片
/* 如果获得线程控制块,启动这个线程 */
if (tid1 != RT_NULL)
rt_thread_startup(tid1);
}
INIT_APP_EXPORT(led_test);
见网址
玩转u8g2 OLED库,一篇就够-CSDN博客
最近一段时间在用OLED显示屏做项目,遇到了棘手的问题那就是很难找到U8g2库函数的参数说明,尤其是设置字体的参数。网上给出的参数非常少,只能设置一两个字体的样子,后来我在github上找到了解决方法,放上来弥补现有资料的不足。
中文字库 ,https://github.com/larryli/u8g2_wqy;
英文字库,https://github.com/olikraus/u8g2/wiki/fntlistall
字体设置方法:
// 设置英文字体 , u8g2_font_****
u8g2.setFont(u8g2_font_ncenB08_tr);