[size=14.4444446563721px]U8gLib是一个驱动128 64 OLED之类液晶屏的一个Arduino库。 [size=14.4444446563721px]启用I2C用例程点亮液晶屏之后就开始着手写自己的程序来显示内容了。 [size=14.4444446563721px]于是写了下边一段程序来显示从上往下滚动显示的文字: - #include "U8glib.h"
- U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // 构造函数,不同的Oled芯片使用的构造函数不同
- int y_pos = 0;
- void draw(void) {
- u8g.drawStr( 0, y_pos, "Dark World!");
- }
- void setup(void) {
- u8g.setColorIndex(1); // pixel on
- u8g.setFont(u8g_font_unifont);
- u8g.setFontPosTop();
- }
- void loop(void) {
- // picture loop
- u8g.firstPage();
- do {
- draw();
- } while( u8g.nextPage() );
- y_pos==64?y_pos=0:y_pos++;
- }
复制代码 [size=14.4444446563721px]翻了下Wiki,使用U8gLib有以下注意事项:
[size=14.4444446563721px]1、不要在draw()过程中修改任何全局变量的值
2、不要在draw()过程内部声音任何静态变量
3、在draw()过程的开始呈现一个空屏幕
4、像draw color或者当前font等变量值应当在draw()过程开始进行设置
5、像draw color或者当前font等变量值如果在picture loop中没有改变的话,可以在picture loop之外进行声明
在写程序之前没有注意第二点,在draw()内部声明了一个变量,进行循环,结果显示异常,最后翻了翻Wiki才发现需要注意第二点。 [size=14.4444446563721px]u8glib的picture loop非常特别 - // picture loop
- u8g.firstPage();
- do {
- draw();
- } while( u8g.nextPage()
复制代码 [size=14.4444446563721px]必须在loop中加这么一个picture loop,循环可以写在后边。
[size=14.4444446563721px]最终效果:
|