0
u8g2动态显示
前言:看到坛友发了关于u8g2移植的帖子,这是啥,于是马上来学习一下,感谢坛友的分享。从失败到成功,一次一次地实验,终于成功了。
首先,了解u8g2是什么?网上查了一下,这个资料也不少。大家可以自行查看,我主要看了一篇移植u8g2单色图形库驱动OLED。然后参考坛友硬件I2C移植U8g2——OLED:SSD1306这篇帖子。
其次,搭建CH32V307关于u8g2的工程,我还是从I2C_7bit_Mode这个例程出发,修改程序,提取增加代码。具体步骤如下:
图1 下载github开源代码
- 将I2C_7bit_Mode拷贝一份放入同级目录下,重新命名一下I2C_7bit_Mode-demo。
- 拷贝u8g2-master目录下的csrc目录到新建的I2C_7bit_Mode-demo目录下,如图2和图3所示。
图2 拷贝csrc
图3 最后代码目录
第三步,删除u8g2的csrc目录下与ssd1306无关的代码,减少代码量。
- csrc目录下u8x8_d_xxxxx_xxxx_xxx.c类型的文件中只保留u8x8_d_ssd1306_128x64_noname.c这个文件,其他文件都保留。如图4所示。
图4 保留的文件
- u8g2_d_setup.c只保留u8g2_Setup_ssd1306_i2c_128x64_noname_f这个函数,其他都删掉即可。如图5所示。
图5 d-setup文件修改
- u8g2_d_memory.c只保留u8g2_m_16_8_f这个函数,如图6所示。
图6 d-memory修改
第四步,修改增加代码,参考坛友刘建华帖子自己进行整合。工程代码中User目录如图7所示。
图7 User目录下修改增加 代码不贴了,附录有代码。贴一下main函数吧,如下所示。
- #include "debug.h"
- #include "u8g2.h"
- #include "oled.h"
- int main(void)
- {
- u8g2_t u8g2;
- int nTemp = 0;
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- Delay_Init();
- USART_Printf_Init(115200);
- printf("SystemClk:%drn",SystemCoreClock);
- printf("This is printf examplern");
- u8g2_Setup_ssd1306_i2c_128x64_noname_f(&u8g2, U8G2_R0, u8x8_byte_hw_i2c,u8x8_gpio_and_delay);//初始化u8g2结构体
- u8g2_InitDisplay(&u8g2); // 根据所选的芯片进行初始化工作,初始化完成后,显示器处于关闭状态
- u8g2_SetPowerSave(&u8g2, 0); // 打开显示器
- u8g2_ClearBuffer(&u8g2);
- while(1)
- {
- u8g2_ClearBuffer(&u8g2);//清空缓冲区的内容
- if(++nTemp>=32) nTemp=1;
- u8g2_DrawCircle(&u8g2, 64, 32, nTemp, U8G2_DRAW_ALL);//画圆
- u8g2_DrawCircle(&u8g2, 32, 32, nTemp, U8G2_DRAW_ALL);//画圆
- u8g2_DrawCircle(&u8g2, 96, 32, nTemp, U8G2_DRAW_ALL);//画圆
- u8g2_SendBuffer(&u8g2);//绘制缓冲区的内容
- }
- }
复制代码
第五,总结一下:开始将csrc目录拷贝到了User目录下,应该也可以了,但需要修改包含各种,改了好几遍都不行,总是提示各种错误,后面直接拷贝到与User同目录下了,这次修改一下错误的代码,编译成功了。对MSR还没太多的研究,因此只能用最笨的方法试 。
|
|