【arduino】u8glib庫資料整理

原貼連接:http://mc.dfrobot.com.cn/forum.php?mod=viewthread&tid=22504&highlight=u8glibphp

第一部分,u8glib標準語法格式:函數


本文使用的是DFRobot出品的LCD12864 Shield V1.0

端口占用狀況:

SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8

背光控制佔用數字口7

[C]  純文本查看  複製代碼
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
//調用u8glib庫
#include "U8glib.h"
 
//建立一個LCD對象
U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8);
 
void setup(){
 
}
 
void loop(){
     u8g.firstPage();
     do {
         //display
     } while (u8g.nextPage());
}
 
//u8g.firstPage() 表示圖像循環的開始
//u8g.nextPage() 表示圖像循環的結束


第二部分,畫出幾何圖形

首先是畫點。

函數語法:

[C]  純文本查看  複製代碼
?
1
2
void U8GLIB::drawPixel(unit8_t x, unit8_t y)
//參數爲:(x:點的橫座標 y:點的縱座標)

例子: u8g.drawPixel(14, 23);

完整代碼:

[C]  純文本查看  複製代碼
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//調用u8glib庫
#include "U8glib.h"
 
//建立一個LCD對象
U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8);
 
void draw(){
   u8g.drawPixel(14, 23);
}
 
void setup() {
   // put your setup code here, to run once:
   //旋轉屏幕180°
   u8g.setRot180(); // rotate screen
}
 
void loop() {
   // put your main code here, to run repeatedly:
   u8g.firstPage();
   do {
      draw();
   } while (u8g.nextPage());
}


而後是畫線。

函數語法:

[C]  純文本查看  複製代碼
?
1
2
void U8GLIB::drawLine(u8g_uint_t x1, u8g_uint_t y1, u8g_uint_t x2, u8g_uint_t y2)
//參數爲: (x1:線段起始點橫座標 y1:線段起始點縱座標 x2:線段結束點橫座標 y2:線段結束點縱座標)


例子: u8g.drawLine(7, 10, 40, 55);

完整代碼:

[C]  純文本查看  複製代碼
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//畫一個V
//調用u8glib庫
#include "U8glib.h"
 
//建立一個LCD對象
U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8);
 
void draw(){
   u8g.drawLine(7, 10, 40, 55);
   u8g.drawLine(40, 55, 73, 10);
}
 
void setup() {
   // put your setup code here, to run once:
   //旋轉屏幕180°
   u8g.setRot180(); // rotate screen
}
 
void loop() {
   // put your main code here, to run repeatedly:
   u8g.firstPage();
   do {
      draw();
   } while (u8g.nextPage());
}


而後是畫連續點(線段)(水平線段或垂直線段)

函數語法:

[C]  純文本查看  複製代碼
?
1
2
3
void U8GLIB::drawHLine(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w) //水平線段
void U8GLIB::drawVLine(u8g_uint_t x, u8g_uint_t y, u8g_uint_t h) //垂直線段
//參數爲: (x:線段起始點 y:線段結束點 w:水平寬度 h:垂直高度)(高度單位爲像素點)


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

完整代碼:
[C]  純文本查看  複製代碼
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//畫一個方形
//調用u8glib庫
#include "U8glib.h"
 
//建立一個LCD對象
U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8);
 
void draw(){
     u8g.drawHLine(40,15, 30);
     u8g.drawVLine(70,15, 30);
     u8g.drawHLine(40,45, 30);
     u8g.drawVLine(40,15, 30);
}
 
void setup() {
   // put your setup code here, to run once:
   //旋轉屏幕180°
   u8g.setRot180(); // rotate screen
}
 
void loop() {
   // put your main code here, to run repeatedly:
   u8g.firstPage();
   do {
      draw();
   } while (u8g.nextPage());
}


而後是畫出實心的三角形

函數語法:

[C]  純文本查看  複製代碼
?
1
2
void U8GLIB::drawTriangle(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
//參數爲:(x0:一個角的橫座標 y0:一個角的縱座標 x1:另外一個角的橫座標 y1:另外一個角的縱座標 x2:最後一個角的橫座標 y2:最後一個角的縱座標)


例子: u8g.drawTriangle(14,9, 45,32, 9,42);

完整代碼:

[C]  純文本查看  複製代碼
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//畫一個實心三角形
//調用u8glib庫
#include "U8glib.h"
 
//建立一個LCD對象
U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8);
 
void draw(){
     u8g.drawTriangle(14,9, 45,32, 9,42);
}
 
void setup() {
   // put your setup code here, to run once:
   //旋轉屏幕180°
   u8g.setRot180(); // rotate screen
}
 
void loop() {
   // put your main code here, to run repeatedly:
   u8g.firstPage();
   do {
      draw();
   } while (u8g.nextPage());
}


而後是畫出空心矩形,剛纔咱們用畫線段的方式實現了畫空心矩形,如今用更簡單的方法就能夠畫出空心矩形。

函數語法:

[C]  純文本查看  複製代碼
?
1
2
void U8GLIB::drawFrame(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h)
//參數是:(x:矩形左上角橫座標 y:矩形左上角縱座標 w:矩形的寬 h:矩形的高)(高和寬的單位都是像素)


例子: u8g.drawFrame(10, 12, 30, 20);

完整代碼:

[C]  純文本查看  複製代碼
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//畫一個空心矩形
//調用u8glib庫
#include "U8glib.h"
 
//建立一個LCD對象
U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8);
 
void draw(){
     u8g.drawFrame(10, 12, 30, 20);
}
 
void setup() {
   // put your setup code here, to run once:
   //旋轉屏幕180°
   u8g.setRot180(); // rotate screen
}
 
void loop() {
   // put your main code here, to run repeatedly:
   u8g.firstPage();
   do {
      draw();
   } while (u8g.nextPage());
}


而後是畫圓角空心矩形

函數語法:

[C]  純文本查看  複製代碼
?
1
2
void U8GLIB::drawRFrame(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h, u8g_uint_t r)
//參數是: (x:圓角矩形左上角橫座標 y:圓角矩形左上角縱座標 w:圓角矩形寬度 h:圓角矩形高度 r:圓角弧度的半徑)


注意:最好要知足兩個公式,使用時最好加上if來判斷是否符合要求
w > = 2 * x * ( r + 1 )
h > = 2 * x * ( r + 1 )

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

完整代碼:

[C]  純文本查看  複製代碼
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//畫一個圓角空心矩形
//調用u8glib庫
#include "U8glib.h"
 
//建立一個LCD對象
U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8);
 
void draw(){
     u8g.drawRFrame(10,12, 30,20, 5);
}
 
void setup() {
   // put your setup code here, to run once:
   //旋轉屏幕180°
   u8g.setRot180(); // rotate screen
}
 
void loop() {
   // put your main code here, to run repeatedly:
   u8g.firstPage();
   do {
      draw();
   } while (u8g.nextPage());
}


而後畫實心矩形,和畫空心的同樣。注意語法區別!!!

函數語法:

[C]  純文本查看  複製代碼
?
1
void U8GLIB::drawBox(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h)


例子: u8g.drawBox(10,12,20,30);

而後畫出圓角實心矩形,和畫圓角空心矩形同樣,但注意語法區別!!!

函數語法:

[C]  純文本查看  複製代碼
?
1
void U8GLIB::drawRBox(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h, u8g_uint_t r)


例子: u8g.drawRBox(10 ,12 ,30 ,20 ,5);

而後畫出空心圓

函數語法:

[C]  純文本查看  複製代碼
?
1
2
void U8GLIB::drawCircle(u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t opt = U8G_DRAW_ALL)
//參數是:(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                整圓(默認)

例子: u8g.drawCircle(20,20, 14); //整圓 
          u8g.drawCircle(20,20, 14, U8G_DRAW_UPPER_RIGHT); //1/4圓

完整代碼:

[C]  純文本查看  複製代碼
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//畫一個空心圓
//調用u8glib庫
#include "U8glib.h"
 
//建立一個LCD對象
U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8);
 
void draw(){
     u8g.drawCircle(20,20, 14);
}
 
void setup() {
   // put your setup code here, to run once:
   //旋轉屏幕180°
   u8g.setRot180(); // rotate screen
}
 
void loop() {
   // put your main code here, to run repeatedly:
   u8g.firstPage();
   do {
      draw();
   } while (u8g.nextPage());
}


而後畫出實心圓

函數語法:

[C]  純文本查看  複製代碼
?
1
2
void U8GLIB::drawDisc(u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t opt = U8G_DRAW_ALL)
//參數是:(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                整圓(默認)

例子: u8g.drawDisc(20,20, 14); //整圓 
          u8g.drawDisc(20,20, 14, U8G_DRAW_UPPER_RIGHT); //1/4圓

完整代碼:

[C]  純文本查看  複製代碼
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//畫一個實心圓
//調用u8glib庫
#include "U8glib.h"
 
//建立一個LCD對象
U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8);
 
void draw(){
     u8g.drawDisc(20,20, 14);
}
 
void setup() {
   // put your setup code here, to run once:
   //旋轉屏幕180°
   u8g.setRot180(); // rotate screen
}
 
void loop() {
   // put your main code here, to run repeatedly:
   u8g.firstPage();
   do {
      draw();
   } while (u8g.nextPage());
}


而後畫出橢圓(空心)

函數語法:

[C]  純文本查看  複製代碼
?
1
2
void drawEllipse(u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rx, u8g_uint_t ry, uint8_t opt)
//參數是:(x0:橢圓圓心的橫座標 y0:橢圓圓心的縱座標 rx:水平方向半徑 ry:垂直方向半徑 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                整圓(默認)

例子: u8g.drawEllipse(20,20, 14,17);

完整代碼:

[C]  純文本查看  複製代碼
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//畫一個橢圓
//調用u8glib庫
#include "U8glib.h"
 
//建立一個LCD對象
U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8);
 
void draw(){
     u8g.drawEllipse(20,20, 14,17);
}
 
void setup() {
   // put your setup code here, to run once:
   //旋轉屏幕180°
   u8g.setRot180(); // rotate screen
}
 
void loop() {
   // put your main code here, to run repeatedly:
   u8g.firstPage();
   do {
      draw();
   } while (u8g.nextPage());
}


而後畫出橢圓(空心),和畫空心橢圓是同樣的,但注意語法格式區別

函數語法:

[C]  純文本查看  複製代碼
?
1
2
void drawFilledEllipse(u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rx, u8g_uint_t ry, uint8_t opt)
//參數是:(x0:橢圓圓心的橫座標 y0:橢圓圓心的縱座標 rx:水平方向半徑 ry:垂直方向半徑 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                整圓(默認)

例子: u8g.drawFilledEllipse(20,20, 14,17);

以上就是使用u8glib庫畫出幾何圖形。 整理一下:

[C]  純文本查看  複製代碼
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
u8g.drawPixel(14, 23);                     //畫點
u8g.drawLine(7, 10, 40, 55);            //畫線
u8g.drawHLine(60,12, 30);                 //畫水平線段
u8g.drawVLine(10,20, 20);                //畫垂直線段
u8g.drawTriangle(14,9, 45,32, 9,42);    //畫實心三角形
u8g.drawFrame(10, 12, 30, 20);            //畫空心矩形
u8g.drawRFrame(10 ,12 ,30 ,20 ,5);        //畫空心圓角矩形
u8g.drawBox(10,12,20,30);                //畫實心矩形
u8g.drawRBox(10 ,12 ,30 ,20 ,5);        //畫實心圓角矩形
u8g.drawCircle(20,20, 14);                 //整空心圓
u8g.drawCircle(20,20, 14, U8G_DRAW_UPPER_RIGHT); //1/4空心圓
u8g.drawDisc(20,20, 14);                 //整實心圓
u8g.drawDisc(20,20, 14, U8G_DRAW_UPPER_RIGHT); //1/4扇形
u8g.drawEllipse(20,20, 14,17);            //空心橢圓
u8g.drawFilledEllipse(20,20, 14,17);    //實心橢圓

第三部分,打印字符,字符串

繼續上一次的u8glib自學筆記,整理過了有關打印幾何圖像的函數,下一步就是學習一下如何打印字符。

首先是畫出字符。

函數語法:

[C]  純文本查看  複製代碼
?
1
2
3
4
5
6
7
u8g_uint_t U8GLIB::drawStr(u8g_uint_t x, u8g_uint_t y, const char *s)
//參數爲:(x:字符左下角的橫座標 y:字符左下角的縱座標 s:要畫出的字符)
//注意:使用drawStr函數以前,須要使用setFont函數來設置一下要畫出的字符的顯示字體。
//同時drawStr函數還有三種變形:
drawStr90();    //字符順時針旋轉響應90°
drawStr180();   //字符順時針旋轉響應180°
drawStr270();   //字符順時針旋轉響應270°


例子:

[C]  純文本查看  複製代碼
?
1
2
u8g.setFont(u8g_font_osb18);    //設置字體
u8g.drawStr(0, 20, "ABC" );      //畫出字符在(0,20)的位置


完整代碼:

[C]  純文本查看  複製代碼
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//調用u8glib庫
#include "U8glib.h"
 
//建立一個LCD對象
U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8);
 
void draw(){
   u8g.setFont(u8g_font_osb18);
   u8g.drawStr(0, 20, "ABC" );
}
 
void setup() {
   // put your setup code here, to run once:
   //旋轉屏幕180°
   u8g.setRot180(); // rotate screen
}
 
void loop() {
   // put your main code here, to run repeatedly:
   u8g.firstPage();
   do {
      draw();
   } while (u8g.nextPage());
}


另外一種打印字符,字符串的方法就是用print。

print()函數能夠打印字符,字符串,變量值等。可是用之前須要用setPrintPos()來設置位置

函數語法:

[C]  純文本查看  複製代碼
?
1
2
U8GLIB::print(...)
//參數爲要打印的內容


例子:

[C]  純文本查看  複製代碼
?
1
2
u8g.setPrintPos(0,15);          //設置位置
u8g.print( "Error Code: " );      //打印內容


完整代碼:

[C]  純文本查看  複製代碼
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//調用u8glib庫
#include "U8glib.h"
 
//建立一個LCD對象
U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8);
 
void draw(){
   u8g.setPrintPos(0,15);
   u8g.print( "Error Code: " );
}
 
void setup() {
   // put your setup code here, to run once:
   //旋轉屏幕180°
   u8g.setRot180(); // rotate screen
}
 
void loop() {
   // put your main code here, to run repeatedly:
   u8g.firstPage();
   do {
      draw();
   } while (u8g.nextPage());
}


第四部分,畫出圖像

首先是顯示一個位圖。

函數語法:

[C]  純文本查看  複製代碼
?
1
2
void U8GLIB::drawXBMP(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h, const u8g_pgm_uint8_t *bitmap)
//參數爲:(x:位圖左上角的橫座標 y:位圖左上角的縱座標 w:位圖的寬 h:位圖的高 *bitmap:位圖對象)


例子:

[C]  純文本查看  複製代碼
?
01
02
03
04
05
06
07
08
09
10
11
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);


完整代碼:

[C]  純文本查看  複製代碼
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
相關文章
相關標籤/搜索