RT-Thread: LCD、TFT液晶屏屏驱动框架 U8g2 应用

关键词:U8G2,显示驱动,RT-THREAD U8G2
说明:本实例用的液晶屏是  OLED12864显示器,显示器驱动为SSD1306,分辨率为128x64
备注:u8g2_font_unifont_t_symbols 这个字体集库里面有很多实用图形符号

软件包:U8G2
RT-Thread-Mirror-rt-u8g2-c-master ,

U8g2简介.        

        U8g2图形库是一个用于嵌入式设备的单色图形库,支持多种单色OLED和LCD显示控制器,如SSD1306,ST7920等。U8g2库可以从Arduino IDE的库管理器安装,也可以移植到STM32等平台。U8g2库支持三种绘图模式:全屏缓存模式,页面缓存模式和U8x8字符模式。U8g2库的使用需要选择合适的构造函数,初始化显示器,设置引脚号,编写回调函数和绘图指令。U8g2图形库的优点是可以使用多种字体,支持中文显示,提供丰富的图形程序,如线条,框,圆,位图等。U8g2图形库的缺点是需要占用一定的内存空间,速度较慢,不支持无控制器的显示屏。U8g2图形库的应用场景有:显示传感器数据,制作时钟,显示菜单,显示动画等。U8g2图形库是一个功能强大,兼容性好,易于使用的单色图形库。

1.自动添加软件包

RT-Thread: LCD、TFT液晶屏屏驱动框架 U8g2 应用_第1张图片

搜索软件包 u8g2

RT-Thread: LCD、TFT液晶屏屏驱动框架 U8g2 应用_第2张图片

添加后点击保存,下载软件包 保存的时间比较长;

RT-Thread: LCD、TFT液晶屏屏驱动框架 U8g2 应用_第3张图片

2.手动添加软件包


        由于网络,或者软件问题可能不能自动下载添加软件包,这时可以手动添加把文档符的软件包解压后复制到对应的目录即可(后续也需要设置接口)

RT-Thread: LCD、TFT液晶屏屏驱动框架 U8g2 应用_第4张图片

添加位置,如下目录,放置到 packages

RT-Thread: LCD、TFT液晶屏屏驱动框架 U8g2 应用_第5张图片

RT-Thread: LCD、TFT液晶屏屏驱动框架 U8g2 应用_第6张图片.

3.设置软件包

双击打开 设置界面

RT-Thread: LCD、TFT液晶屏屏驱动框架 U8g2 应用_第7张图片

按图示勾选,勾选后 再次点击保存,注意,时间又比较长。.

RT-Thread: LCD、TFT液晶屏屏驱动框架 U8g2 应用_第8张图片

4.配置新增加的 u8g2 软件包

增加的软件包在如下目录,打开示例文件。

RT-Thread: LCD、TFT液晶屏屏驱动框架 U8g2 应用_第9张图片

5.修改,配置 I2C GPIO;

        如下根据实际情况重新定义IO,默认是定义的 PB6,PB7,我测试时改成了PD12,PD13

RT-Thread: LCD、TFT液晶屏屏驱动框架 U8g2 应用_第10张图片

6.代码修改


        自带示例是注释掉的那部分,用的是系统命令行模式,改成了线程模式;
改好后,接上显示屏,烧录程序,显示屏正常显示。

RT-Thread: LCD、TFT液晶屏屏驱动框架 U8g2 应用_第11张图片

#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);

7.u8g2 函数说明

见网址

玩转u8g2 OLED库,一篇就够-CSDN博客

8.设置U8g2库函数字体的方法

        最近一段时间在用OLED显示屏做项目,遇到了棘手的问题那就是很难找到U8g2库函数的参数说明,尤其是设置字体的参数。网上给出的参数非常少,只能设置一两个字体的样子,后来我在github上找到了解决方法,放上来弥补现有资料的不足。

中文字库 ,https://github.com/larryli/u8g2_wqy;

英文字库,https://github.com/olikraus/u8g2/wiki/fntlistall

字体设置方法:

// 设置英文字体 , u8g2_font_****
u8g2.setFont(u8g2_font_ncenB08_tr);

你可能感兴趣的:(RT-Thread,RT-Thread,u8g2,液晶屏驱动框架)