Arduino Nano 驱动OLED测试入门(二) U8glib 库函数及参数讲解

Arduino编译Marlin1.1出现 fatal error: U8glib.h: No such file or directory如何解决 marlin固件发展至今已经形成了三个比较重大的版本:1.0版,1.1版,2.0版。 本文介绍的是Marlin1.1版本的,Arduino用到的版本1.6.7,Marlin1.0版,1.1版都能用Arduino1.6.7版本去编译,没有多大问题。 但Marlin2.0版本需要在Arduino IDE 1.8.8或更高版本或PlatformIO。 而且Marlin1.1版本在Arduino IDE 1.8.8或更高版本上是编译不通过的。 如果编译出现:Marlin.ino:45:11... 阅读详情

本教程的硬件环境为
Arduino Nano (ATmega328p)
0.96寸 OLED-128X64 SPI 接口

官方介绍为Universal Graphics Library for 8 Bit Embedded Systems。详见https://code.google.com/p/u8glib/wiki/userreference。

支持多种平台,Arduino,AVR,ARM。在Arduino中使用是非常方便与强大的。支持多种屏幕,比较常用的有OLED,LCD12864,LCD5110等。

github地址:https://github.com/olikraus/u8glib
u8glib库的下载地址:https://bintray.com/olikraus/u8glib

本文最后附上简单的作图代码,已编译验证。

库函数:

> firstPage 图像显示
> nextPage
> drawPixe 点
> drawLine 线
> drawHLine 水平线
> drawVLine 垂直线
> drawTriangle 三角(实心)
> drawFrame 矩形框
> drawRFrame 圆角矩形框
> drawBox 矩形(实心)
> drawRBox 圆角矩形(实心)
> drawCircle 圆
> drawDisc 圆形(实心)
> drawEllipse 圆弧
> drawFilledEllipse 扇形(实心)
> drawStr 显示字符串
> print 输出
> drawBitmapP 画位图
> drawXMBP 画大尺寸位图
> getHeight 获得显示器高度
> getWidth 获得显示器宽度
> getStrWidth 获得字符串宽度
> setFont 设置字体
> setPrintPos 设置输出位置
> setColorIndex 设置显示与否
> setRot90 /180 /270 显示内容旋转
> setFontPosTop

若要使图像显示开机画面,u8glib库提供了如下的picture loop。
firstPage
1)方法定义

   u8g.firstPage(void)      // 调用此过程,标志着图像循环的开始

nextPage
1)方法定义

   u8g.nextPage(void)   //调用此过程,标志着图像循环的结束

例子

#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g( ... );
void setup() { ... }
void loop() {
  u8g.firstPage();
  do {
        //display
       }while(u8g.nextPage());
                  }

//详见https://code.google.com/p/u8glib/wiki/tpictureloop

1. 几何图形

drawPixel // 画一个点
1)方法定义

      u8g.drawPixel(uint8_t x, uint8_t y) 

2)参数 x:点的横坐标 y:点的纵坐标
3)例子

           u8g.drawPixel(14, 23);

drawLine // 画一条线段

1)方法定义

    u8g.drawLine(u8g_uint_t x1, u8g_uint_t y1, u8g_uint_t x2, u8g_uint_t y2)    

2)参数
x1: 线段起点 横坐标 y1: 线段起点 纵坐标 x2: 线段终点 横坐标 y2: 线段终点 纵坐标
3)例子

      u8g.drawLine(7, 10, 40, 55);

drawHLine //画一条向右的水平线段
1)方法定义

    u8g.drawHLine(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w)  

2)参数 x:线段起点 横坐标 y:线段起点 纵坐标 w:水平宽度(w个像素点)
3)例子见最下边的drawVLine。

drawVLine //画一条向下的垂直线段
1)方法定义

	u8g.drawHLine(u8g_uint_t x, u8g_uint_t y, u8g_uint_t h)   

2)参数 x:线段起点 横坐标 y:线段起点 纵坐标 h:垂直高度(h个像素点)
3)例子

u8g.drawHLine(60,12, 30);
u8g.drawVLine(10,20, 20);

drawTriangle // 画一个实心的三角形。至于空心三角形用drawLine即可画出。
1)方法定义

     u8g.drawTriangle(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)  

2)参数 x0:其中一角的 横坐标 y0:其中一角的 纵坐标 x1:另一角的 横坐标 y1:另一角的 纵坐标
x2:最后一角的 横坐标 y2:最后一角的 纵坐标

3)例子

u8g.drawTriangle(14,9, 45,32, 9,42);   //第一个三角形
u8g.drawTriangle(14,55, 45,33, 9,43);   //第二个三角形

drawFrame // 画一个空心矩形
1)方法定义

     u8g.drawFrame(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h)    

2)参数
x:方框左上角点的横坐标 y:方框左上角点的纵坐标 w:方框的宽 h:方框的高

3)例子

u8g.drawFrame(10, 12, 30, 20); // 方框的长宽包括了边框所在的像素点

drawRFrame //画一个圆角空心矩形
1)方法定义

      u8g.drawRFrame(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h, u8g_uint_t r)  

其中 最好满足:w>=2x(r+1), h>=2x(r+1)。
2)参数
x:圆角矩形左上角 横坐标 y:圆角矩形左上角 纵坐标 w:圆角矩形 宽度 h:圆角矩形 高度 r:圆角弧度的半径
3)例子

   u8g.drawRFrame(10,12, 30,20, 5);

drawBox //画一个实心矩形
1)方法定义

     u8g.drawBox(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h)

2)参数 x:矩形左上角的 横坐标 y:矩形左上角的 纵坐标 w:矩形的 宽 h:矩形的高

3)例子

u8g.drawBox(10,12,20,30);

drawRBox //画一个圆角实心矩形,与drawRFrame类似。
1)方法定义

    u8g.drawRBox(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h, u8g_uint_t r)  

2)参数
x:圆角矩形左上角 横坐标 y:圆角矩形左上角 纵坐标 w:矩形的 宽 h:矩形的 高 r:圆角弧度半径

drawCircle //画一个空心圆
1)方法定义

  u8g.drawCircle(u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t opt = U8G_DRAW_ALL) 

2)参数 x0:圆心 横坐标 y0:圆心 纵坐标 rad:半径 opt:
U8G_DRAW_UPPER_RIGHT 上部右侧 1/4 圆弧
U8G_DRAW_UPPER_LEFT 上部左侧 1/4 圆弧
U8G_DRAW_LOWER_LEFT 下部左侧 1/4 圆弧
U8G_DRAW_LOWER_RIGHT 下部右侧 1/4 圆弧
U8G_DRAW_ALL 整圆(默认)

3)例子

    u8g.drawCircle(20,20, 14); //整圆
    u8g.drawCircle(20,20, 14, U8G_DRAW_UPPER_RIGHT); //  1/4 圆

drawDisc //画一个实心圆,直径=2*rad+1
1)方法定义

     u8g.drawDisc(u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t opt = U8G_DRAW_ALL)   

2)参数
x0:圆心 横坐标 y0:圆心 纵坐标 rad:半径
opt:
U8G_DRAW_UPPER_RIGHT 上部右侧 1/4 扇形
U8G_DRAW_UPPER_LEFT 上部左侧 1/4 扇形
U8G_DRAW_LOWER_LEFT 下部左侧 1/4 扇形
U8G_DRAW_LOWER_RIGHT 下部右侧 1/4 扇形
U8G_DRAW_ALL 整圆(默认)

drawEllipse //圆一个椭圆(空心)
1)方法定义

    u8g.drawEllipse(u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rx, u8g_uint_t ry, uint8_t opt)      

2)参数
x0,y0:椭圆圆心 横、纵坐标 rx:水平方向半径 ry:垂直方向半径
opt:
U8G_DRAW_UPPER_RIGHT 上部右侧 1/4 椭圆弧
U8G_DRAW_UPPER_LEFT 上部左侧 1/4 椭圆弧
U8G_DRAW_LOWER_LEFT 下部左侧 1/4 椭圆弧
U8G_DRAW_LOWER_RIGHT 下部右侧 1/4 椭圆弧
U8G_DRAW_ALL 整圆(默认)

3)例子

u8g.drawEllipse(20,20, 14,17); //相同圆心的椭圆与圆
u8g.drawCircle(20,20, 14);

drawFilledEllipse // 画一个椭圆(实心)
1)方法定义

     u8g.drawFilledEllipse(u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rx, u8g_uint_t ry, uint8_t opt)  

2)参数
x0,y0:椭圆圆心 横、纵坐标 rx:水平方向半径 ry:垂直方向半径
opt:
U8G_DRAW_UPPER_RIGHT 上部右侧 1/4 椭圆
U8G_DRAW_UPPER_LEFT 上部左侧 1/4 椭圆
U8G_DRAW_LOWER_LEFT 下部左侧 1/4 椭圆
U8G_DRAW_LOWER_RIGHT 下部右侧 1/4 椭圆
U8G_DRAW_ALL 整圆(默认)

2. 字符显示

drawStr //显示字符,使用前要使用setFont函数设置要显示字符的字体
1)方法定义

    u8g.drawStr(u8g_uint_t x, u8g_uint_t y, const char *s)     

另外还有 drawStr90(); drawStr180(); drawStr270(); 使字符顺时针旋转响应的角度。
2)参数
x:字符左下角的横坐标 y:字符左下角的纵坐标 *s:要显示的字符

3)例子

u8g.setFont(u8g_font_osb18);
u8g.drawStr(0, 20, "ABC");
u8g.drawStr90(0,20, "ABC"); //字符旋转90度

print //打印要显示的字符,包括变量值、字符串等。
1)方法定义

  u8g.print(...)         //使用前需用setPrintPos()函数设置位置
3. 图形显示

drawXBMP //此函数是一个显示一个位图的方法。
1)方法定义

   u8g.(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h, const u8g_pgm_uint8_t *bitmap)      

2)参数
x:位图左上角的横坐标 y:位图左上角的纵坐标 w:位图的宽 h:位图的高
//bitmap:位图对象 PS:在任何画图软件中,必须把图片属性调位单位图1bit

3)例子

 static unsigned char u8g_logo_bits[] U8G_PROGMEM = {
 0xff, 0xff, 0xff, 0xff, 0x3f,   0xff, 0xff, 0xff, 0xff, 0x3f,   0xe0, 0xe0, 0xff, 0xff, 0x3f,
 0xe3, 0xe1, 0xff, 0xff, 0x3f,   0xf3, 0xf1, 0xff, 0xff, 0x3f,   0xf3, 0xf1, 0xfe, 0xbf, 0x37, 
 0xf3, 0x11, 0x1c, 0x1f, 0x30,   0xf3, 0x01, 0x08, 0x8c, 0x20,   0xf3, 0x01, 0x00, 0xc0, 0x39, 
 0xf3, 0x81, 0xc7, 0xc1, 0x39,   0xf3, 0xc1, 0xc7, 0xc9, 0x38,   0xf3, 0xc1, 0xc3, 0x19, 0x3c, 
 0xe3, 0x89, 0x01, 0x98, 0x3f,   0xc7, 0x18, 0x00, 0x08, 0x3e,   0x0f, 0x3c, 0x70, 0x1c, 0x30,
 0x3f, 0xff, 0xfc, 0x87, 0x31,   0xff, 0xff, 0xbf, 0xc7, 0x23,   0x01, 0x00, 0x00, 0xc6, 0x23, 
 0x03, 0x00, 0x00, 0x0e, 0x30,   0xff, 0xff, 0x3f, 0x1f, 0x3c,   0xff, 0xff, 0x3f, 0xff, 0x3f, 
 0xff, 0xff, 0x3f, 0xff, 0x3f,   0xff, 0xff, 0xff, 0xff, 0x3f,   0xff, 0xff, 0xff, 0xff, 0x3f
};    //数据可以自行下载一个 “字模提取”软件,方便、简洁、中文。
u8g.drawXBMP( 0, 0, 38, 24, u8g_logo_bits);

drawBitmapP //此函数是一个显示一个位图的方法。
1)方法定义

   u8g.drawBitmapP(u8g_uint_t x, u8g_uint_t y, u8g_uint_t cnt, u8g_uint_t h, const u8g_pgm_uint8_t *bitmap)    

2)参数
x:位图左上角的横坐标 y:位图左上角的纵坐标 cnt:在水平方向上的位图的字节数。该位图的宽度是cnt* 8(1字节=8位)
h:位图的高 *bitmap:位图对象 PS:在任何画图软件中,必须把图片属性调位单位图1bit

3)例子

const uint8_t rook_bitmap[] U8G_PROGMEM = {
 0x00,         // 00000000 
 0x55,         // 01010101
 0x7f,          // 01111111
 0x3e,         // 00111110
 0x3e,         // 00111110 
 0x3e,         // 00111110
 0x3e,         // 00111110 
 0x7f           // 01111111
};
u8g.drawBitmapP(0,0, 1, 8, rook_bitmap);
4. 获取

getHeight //获得屏幕的高度,本函数放置在picture loop里面或外部皆可
1)方法定义

u8g.getHeight(void)        

2)返回值
“屏幕高度”

getWidth //获得屏幕宽度,本函数放置在picture loop里面或外部皆可
1)方法定义

u8g.getWidth(void) 

2)返回值
“屏幕宽度”
3)例子

         w = u8g.getWidth();
     h = u8g.getHeight();

getStrWidth //获得所显示字符串的宽度,即按照不同字体显示的字符串共占了多少像素。
1)方法定义

u8g.getStrWidth(const char *s)   

2)返回值
“字符串的宽度”
3)例子

int w;    //设置一个存储变量
u8g.setFont(u8g_font_osb18); //设置字体
u8g.drawStr(0,20, "ABC"); 
w = u8g.getStrWidth("ABC"); //获得显示的字符串宽度
u8g.drawFrame(0,10, w,11); //画一个以获得的字符串宽度为宽度的方框。
5. 设置显示属性

setFont //设置要显示字符的字体。
1)方法定义

     u8g.setFont(const u8g_fntpgm_uint8_t *font)   

2)参数
*font:字体样式。u8glib提供的字体样式https://code.google.com/p/u8glib/wiki/fontsize

setPrintPos //设置下文中print()的显示位置
1)方法定义

      u8g.setPrintPos(u8g_uint_t x, u8g_uint_t y)    

2)参数
x:横坐标 y:纵坐标

setColorIndex //对于单色OLED,此函数功能为是否显示对象。可以理解为透明还是不透明。对于有灰度值的屏幕则是一个灰度值。
1)方法定义

   u8g.setColorIndex(uint8_t color_index)   

2)参数
color_index:
①1:表示显示,不透明

②0:表示不显示,透明。
3)例子

u8g.setColorIndex(1);
u8g.drawBox(10, 12, 20, 30);  
u8g.setColorIndex(0);
u8g.drawPixel(28, 14); // 点亮一个 点,位置在 (28, 14)

setRot90 or 180 or 270 //将显示的结果旋转90°或180°或270°
1)方法定义

u8g.setRot90()
u8g.setRot180()
u8g.setRot270()    

2)参数
3)例子

u8g.setFont(u8g_font_osb18);//正常显示
u8g.drawStr(0,20, "ABC");  

u8g.setRot90(); //旋转90°      : or setRot180();  setRot270();
u8g.setFont(u8g_font_osb18);
u8g.drawStr(0,20, "ABC");

setFontPosTop //使用drawStr显示字符串时,默认标准为显示字符的左下角坐标。(参考drawSt)
1)方法定义

    u8g.setFontPosTop(void)  //本函数可理解为将坐标位置改为显示字符串的左上角为坐标标准。具体用法可参考例子。

3)例子

u8g.setFont(u8g_font_osb18);
u8g.setFontPosTop();
u8g.drawStr(0, 20, "ABC");

示例代码

函数调用格式既可以用
u8g.draw…,可以用display.draw…,或者
d.draw…。

有用记得点个赞

#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2

#define LOGO16_GLCD_HEIGHT 16
#define LOGO16_GLCD_WIDTH 16

#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
//以下为定义显示的内容
static const uint8_t PROGMEM Heart_16x16[] = {
0x00,0x00,0x18,0x18,0x3C,0x3C,0x7E,0x7E,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x7F,0xFE,0x3F,0xFC,0x1F,0xF8,0x0F,0xF0,0x07,0xE0,0x03,0xC0,0x00,0x00//未命名文件0
};//显示一个心形
static const uint8_t PROGMEM Strong_16x16[] =
{0x10,0x10,0x28,0x48,0x84,0x02,0x7D,0x44,
0x44,0x44,0x54,0x24,0x04,0x04,0xF8,0x00,
0x20,0x20,0x20,0x24,0x24,0x25,0x24,0x24,
0x24,0x24,0x24,0x24,0x21,0x21,0x29,0x10};
void setup() {
Serial.begin(115200);
//delay(500);
// by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // 定义I2C地址

display.display(); // 显示adafruit 的开机logo,不需要可以注释掉。
  delay(2000);     //延时2000ms


}
void loop() {
test_SSD1306();
}

void test_SSD1306(void){
//检测全屏显示(看看有没有大面积坏点)
display.fillScreen(WHITE);
display.display();
delay(2000);

//画点 点坐标(10,10)
display.clearDisplay(); //清除缓存
display.drawPixel(10, 10, WHITE);
display.display();
delay(2000);

// 画线 从(0,0)到(50,50)
display.clearDisplay();
display.drawLine(0, 0,50,50, WHITE);
display.display();
delay(2000);

//画空心矩形 左上角坐标(x0,y0) 右下角坐标(x1,y1)
display.clearDisplay();
display.drawRect(0,0,128,64,WHITE);
display.display();
delay(2000);

//画个实心矩形
display.clearDisplay();
display.fillRect(0,0,64,64,WHITE);
display.display();
delay(2000);

//画空心圆
display.clearDisplay();
display.drawCircle(20,20,20,WHITE);
display.display();
delay(2000);

//画实心圆
display.clearDisplay();
display.fillCircle(20,20,20,WHITE);
display.display();
delay(2000);

//画空心三角形
display.clearDisplay();
display.drawTriangle(20,0,0,20,40,20,WHITE);
display.display();
delay(2000);

//画实心三角形
display.clearDisplay();
display.fillTriangle(20,0,0,20,40,20,WHITE);
display.display();
delay(2000);

//画空心圆角矩形
display.clearDisplay();
display.drawRoundRect(0,0,40,40,5,WHITE);
display.display();
delay(2000);

//画实心圆角矩形
display.clearDisplay();
display.fillRoundRect(0,0,40,40,5,WHITE);
display.display();
delay(2000);

//画心形(楼主自己用取模软件画的)
display.clearDisplay();
display.drawBitmap(16,16,Heart_16x16,16,16,WHITE);
display.display();
delay(2000);

//显示英文 数字
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Hello, Arduino!");//显示字符串
display.setTextColor(BLACK, WHITE);
display.println(3.141592);//显示数字
display.setTextSize(2);//定义文字尺寸
display.setTextColor(WHITE);
display.print("0x"); display.println(0xDEADBEEF, HEX);
display.display();
delay(2000);

//显示单个文字 有木有发现就是调用drawBitmap
display.clearDisplay(); // clears the screen and buffer
display.drawBitmap(16,16,Strong_16x16,16,16,WHITE);
display.display();
delay(2000);
}
【Arduino库之U8g2lib(单色显示屏的图形库)】 U8g2U8glib是用于单色显示屏的图形库,它可以用于51、Arduino、ARM控制显示屏,目前作者olikraus已经更新到version2了,也就是U8g2lib(下面简称U8g2)。U8g2可处理所有图形支持很多字体(。(几乎)对字体大小没限制微控制器需要一定的存储空间来传递显示U8x8只能输出文字只能输出固定像素的字体直接输出到显示屏,微控制器无需缓冲区U8logOutput of boot/startup information 输出初始化信息。 阅读详情

相关推荐

Arduino Nano 驱动OLED测试入门(三)(SSD1306仪表盘设计)

本来介绍如何在Nano上面,通过SSD1306设计一个仪表盘 SSD1306基本设置请参照下面的链接 Arduino Nano 驱动OLED测试入门(一)(软IIC以及硬IIC链接SSD1306屏) SSD1306库函数参数讲解参照下面的链接 Arduino Nano 驱动OLED测试入门(二) U8glib 库函数及参数讲解 本文通过一个可调电位器,设计一个电压仪表盘。 屏的连线方式请参照入门(一),电位器三端,一端接地,一端接3.3V,另一端接Nano的模拟输入端A1 引脚。 程序中定义了三个变量,p

malcolm_110的博客 4080

U8glib学习使用(详细版)

使用模块 Arduino UNO 0.96 OLED (SIP) 此显示模块根据电阻链接的方式 来控制连接的模式(SPI IIC ) 端口占用情况 SPI Com: SCK = 13, MOSI = 11, CS = 10, DC = 9, RST =RESET //调用u8glib库 #include "U8glib.h" //创建一个对象 U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS

嵌入式软件工程师的博客 1万+

基于Arduino NANO与DHT11的温湿度监测系统:从硬件连接到代码实现

在嵌入式系统与物联网应用中,传感器数据采集与显示是基础且核心的技术环节。其原理是通过微控制器(如Arduino)的GPIO或通信接口(如I2C、单总线)读取传感器数据,再驱动外设(如OLED屏幕)进行人机交互。这项技术的价值在于将物理世界的模拟信号转化为可处理、可显示的数字信息,是实现环境监控、智能设备感知的基础。在智能家居、农业大棚、设备机柜等场景中,稳定可靠的温湿度监测是常见需求。本文以**Arduino NANO**微控制器和**DHT11**温湿度传感器为核心,详细解析如何构建一个完整的本地监测节点

weixin_30938149的博客 448

Arduino - 使用u8glib库操作OLED屏

需要的库文件:u8glib github地址:https://github.com/olikraus/u8glib 一、基本运行框架: 绘图过程,必须依照下面的框架执行,将绘图显示的代码,放在firstPage和nextPage组成的循环内执行。 u8g.firstPage(); do { // 此处放置显示代码 } while( u8g.nextPage() ); 二、常用...

光庆的学习笔记 2万+

Arduino连接7针OLED(U8glib库)

7针的OLED网上的资料比较少,大多找到的是4针的,也参考了一些其他博主的文章,可最后还是花了不少时间,踩了不少坑,最终还是成功了,以此记录一下。 一.所使用的环境 1.Arduino IDE1.8.12 2.Arduino UNO 二.安装U8glib库 1.在工具栏里选择“工具”->“管理库”,打开库管理器。(注意IDE版本要在1.8以上!!!) 在文本框里输入“U8glib”,回车: 然后选择版本安装即可。 三.连线 OLED Arduino板子 GND GND VCC

Aiden_yan的博客 7389

0.96寸OLED与SSD1306驱动详解:从Arduino到STM32的I2C实战

I2C是一种常见的串行通信协议,只需两根数据线即可连接多个外设,在嵌入式开发中应用广泛。SSD1306是最常用的OLED驱动芯片,它内部集成显存和电荷泵,通过I2C接口即可控制128x64像素的显示。理解SSD1306的显存组织、页地址机制和控制字节格式,是高效驱动OLED屏的基础。从Arduino快速点亮屏幕,到C51用GPIO模拟I2C时序,再到STM32使用硬件I2C外设,掌握底层协议后,即可在不同平台上灵活移植,极大提升开发效率。本文从I2C协议原理出发,结合SSD1306的初始化流程、字模制作、常

weixin_34174322的博客 403

Arduino Nano 驱动OLED测试入门(一)(软IIC以及硬IIC链接SSD1306屏)

需要的准备工作 硬件 面包板一个, Arduino Nano板, SSD1306的OLED屏(本文采用I2C接口)一个,线材若干 库文件 u8glib ,U8g2 两个库,如果没有的话可以在优快云里下载。 连接(硬IIC接口) Arduino OLED 3V3 VCC GND GND A5 SCL A4 SDA 连接(软IIC接口) 如果I2C需要共用的情况下,...

malcolm_110的博客 1万+

u8glib 库 用户参考手册

u8glib库的 用户参考手册。需要的拿去。

【arduino】【u8g2库】OLED屏-U8glib库 增强版 U8G2库

转载请注明: 冬菇不败 及出处 :http://www.arduino.cn/thread-41193-1-1.html 以下的函数描述是源自原文:https://github.com/olikraus/u8g2/wiki/u8g2reference#begin 自己再通过测试后才发布,采用一个更新方式(精力有限,学习为主),客官觉得不错,就打赏一下呗~ U8G2是U8GLIB的增强版,相对...

l252622979的博客 4693

u8glib库文件

亲测相当 好用,针对OLED的驱动移植例如SSD1306 ST7290等

u8glib:u8glib 的镜像

u8glib:8 位嵌入式系统的通用图形库 这个托管在上的存储库是的镜像。 适用于 8 位嵌入式系统的通用图形库是一个图形库,专门用于向微控制器平台中常用的 LCD 输出文本和图形。 git clone 的存在主要是为了简化在基于 git 的项目中将 u8glib 作为子存储库的包含。 upstream分支旨在跟踪原始 Mercurial 存储库的默认分支。 更新是手动完成的。 Branch master提供此文件并从upstream合并。 可能存在其他分支。 进口明细 初始创建是使用以下命令完成的: git clone git://repo.or.cz/fast-export.git hg clone https://code.google.com/p/u8glib/ u8glib.hg git init u8glib cd u8glib ../fast-export/hg

olcd12864的u8g2库_【原创】OLED屏-U8glib库 增强版 U8G2库。

本帖最后由 alientg 于 2017-1-10 17:01 编辑https://github.com/olikraus/u8g2/wiki/u8g2reference#begin自己再通过测试后才发布,采用一个更新方式(精力有限,学习为主),客官觉得不错,就打赏一下呗~U8G2是U8GLIB的增强版,相对旧版更加好用,强大,兼容板子多。U8G2有两种模式:U8g2是增强版模式,U8X8是简便模...

weixin_39639040的博客 793

arduino库 u8glib_arduino

u8glib_arduino

Arduino学习——u8glib库资料整理

第一部分,u8glib标准语法格式: 本文使用的是DFRobot出品的LCD12864 Shield V1.0 端口占用情况: SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8 背光控制占用数字口7 //调用u8glib库 #include "U8glib.h" //创建一个LCD对象 U8GLIB_NHD...

weixin_30916125的博客 1864

51单片机AHT20-21源代码

传感器输出经过 标定的数字信号,标准 I 2 C 格式。AHT20 配有一个全新设计的 ASIC专用芯片、一 个经过改进的MEMS半导体电容式湿度传感元件和一个标准的片上温度传感元件,其 性能已经大大提升甚至超出了前一代传感器的可靠性水平,新一代温湿度传感器, 经过改进使其在恶劣环境下的性能更稳定。但是现在网上的大多数原码都是针对stm32等的这种多位单片机,而我们都知道51单片机是8位单片机,无法对浮点数进行运算,对32位的整数计算有时候也不是很准确,所以我对网上stm32的例程进行了修改。...

wd0710的博客 4545

椭圆曲线点加的推导公式(一)

椭圆曲线点加推导过程

qq_32100199的博客 1515

Arduino实践之u8glib库的使用

u8glib所支持的字体 u8glib的函数

the__future的博客 3974

麒麟系统grub被锁怎么办?双密码遗忘救援指南(实测V10 SP3版本)

本文详细介绍了麒麟系统V10 SP3版本在GRUB和root密码双遗忘情况下的救援指南。通过ISO镜像进入救援模式,结合单用户模式操作,实现密码重置与系统权限恢复,特别适用于等保合规环境。

384

U8glib图形绘制的基本应用

U8glib是一个在ARM,C51,Arduino等常用MCU上都可以得到支持的图形绘制库,用途广泛,兼容性优秀,功能也十分强大, 我所使用的是12864蓝底白字的款式,通过SPI的方式进行连接 实例化语句 U8GLIB_ST7920_128x64_1X u8g(3,9,8) 其中3接12864得 E,9接RW,8接RS 硬件连接: 12864接口名称   UNO接口      E

arenascat的博客 5392

01|无代码开发 | 如何使用Zion实现导航网站制作

以上就是我制作导航网站的心得,分享给大家,作为一个小白想要独立搭建一个网站还是比较困难的,而在Zion不仅可以用可视化的方法进行搭建,甚至还可以一键发布,不用考虑服务器域名啥的问题,真是太方便了。

2301_76262110的博客 1390

一文说清STM32CubeMX中文汉化全流程(图解说明)

详细讲解STM32CubeMX中文汉化的完整流程,通过图文并茂的方式手把手教学,解决界面英文带来的使用障碍,让开发更高效。掌握stm32cubemx中文汉化技巧,提升嵌入式开发体验。

weixin_42499004的博客 6264

OLED 屏幕的使用

#OLED 屏幕的使用(arduino) oled有两种接线方式:SPI和IIc,本文采用的OLED连接方式为SPI四线 使用的设备为:Arduino UNO 0.96寸 OLED-128X64 SPI 接口 oled的原理与LCD相同,点亮每个像素点组成图形. 对于特殊字符图形(如汉字)需要使用文字取模软件生成相应字模,以数组形式写入程序,最后扫描在oled上显示. 取模软件:链接:https://pan.baidu.com/s/1vWB0sEvODR9X5cWlBBQArg 密码:sepr 对于常用字

m0_51638271的博客 9309

华南理工大学电子与信息学院23年预推免复试面试经验贴

华南理工大学电子与信息学院23年预推免复试面试经验贴

Scut_Ty的博客 3295
上一篇: Arduino Nano 驱动OLED测试入门(三)(SSD1306仪表盘设计)
下一篇: Arduino Nano 驱动OLED测试入门(四)--SSD1306如何显示位图、如何让图片动起来
malcolm_110
博客等级 码龄9年 416粉丝 45原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值