zoukankan      html  css  js  c++  java
  • 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_C12864 u8g(13, 11, 10, 9, 8);

    void

     setup(){

     

    }

     

    void

     loop(){

     

        u8g.firstPage();

        do{

            //display

        }while(u8g.nextPage());

    }

    //  还有一个需要注意的地方,u8g有缓存,所以一般显示要使用下面的方法,将绘图函数放到draw()

     

    //u8g.firstPage() 表示图像循环的开始

     

    //u8g.nextPage() 表示图像循环的结束

     

     

     

     

    第二部分,画出几何图形

    首先是画点。

     

    void

     U8GLIB::drawPixel(unit8_t x, unit8_t y)

     

    //参数为:(x:点的横坐标 y:点的纵坐标)

    例子: u8g.drawPixel(14, 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());

     

    }

    然后是画线。

    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);
    完整代码:

     

     

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

     

    }

    然后是画连续点(线段)(水平线段或垂直线段)
    函数语法:

     

    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);
    完整代码:

    //画一个方形

     

    //调用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());

     

    }

    然后是画出实心的三角形

    函数语法:

     

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

    完整代码:

     

    //画一个实心三角形

     

    //调用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());

     

    }

    然后是画出空心矩形,刚才我们用画线段的方式实现了画空心矩形,现在用更简单的方法就可以画出空心矩形。

    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);
    完整代码:

    //画一个空心矩形

     

    //调用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());

     

    }

    然后是画圆角空心矩形
    函数语法:

     

    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);
    完整代码:

     

    //创建一个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());

     

    }


    然后画实心矩形,和画空心的一样。注意语法区别!!!
    函数语法:

     

    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);
    然后画出圆角实心矩形,和画圆角空心矩形一样,但注意语法区别!!!
    函数语法:

    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);
    然后画出空心圆
    函数语法:

     

    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圆

     

    //画一个空心圆

     

    //调用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());

     

    }


    然后画出实心圆
    函数语法:

     

    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圆

    完整代码:
    //画一个实心圆

     

    //调用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());

     

    }

     

    然后画出椭圆(空心)
    函数语法:

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

    完整代码:

     

    //画一个椭圆

     

    //调用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());

     

    }

     

    然后画出椭圆(空心),和画空心椭圆是一样的,但注意语法格式区别
    函数语法:

     

    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库画出几何图形。 整理一下:

     

    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自学笔记,整理过了有关打印几何图像的函数,下一步就是学习一下如何打印字符。
    首先是画出字符。
    函数语法:

     

    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°

     

     

    例子: 

     

     

     

    u8g.setFont(u8g_font_osb18);    //设置字体

    u8g.drawStr(0, 20, "ABC");      //画出字符在(0,20)的位置12

     

     

     

    完整代码:

     

     

     

    //调用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());

    }123456789101112131415161718192021222324

     

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

     

    print()函数可以打印字符,字符串,变量值等。但是用以前需要用setPrintPos()来设置位置

     

    函数语法:

    U8GLIB::print(...)

    //参数为要打印的内容12

     

    例子: 

    u8g.setPrintPos(0,15);          //设置位置

    u8g.print("Error Code: ");      //打印内容12

     

    完整代码:

     

     

    //调用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());

    }

     

     

    u8g.setRot90();     //旋转90°u8g.setRot180();    //旋转180°u8g.setRot270();    //旋转270°u8g.undoRotation(); //取消旋转u8g.setFont(u8g_font_osb18);    //设置字体u8g.drawStr(0, 20, "ABC");      //画出字符在(0,20)的位置u8g.setPrintPos(0,15);          //设置位置u8g.print("Error Code: ");      //打印内容u8g.drawBitmapP( 0, 0, 1, 9, bitmap);     //画位图,每行一个字节(8个点),总共9行,数据定义在bitmap[]u8g.drawXBMP( 0, 0, 38, 24, bitmap);      //画位图,38×24,数据定义在bitmap[]

    第四部分,画出图像

     

    首先是显示一个位图。

     

    函数语法:

    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:位图对象)12

     

    例子:

     

     

     

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

     

     

     

    完整代码:

     

     

     

    //调用u8glib库

    #include "U8glib.h"

     

    //创建一个LCD对象

    U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8);

     

    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

    };

     

    void draw(){

      u8g.drawXBMP( 0, 0, 38, 24, u8g_logo_bits);

    }

     

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

    }

    }

     

     

     

    另一种打印位图的方法是:drawBitmapP()函数   

     

    函数语法:

     

     

     

    void U8GLIB::drawBitmapP(u8g_uint_t x, u8g_uint_t y, u8g_uint_t cnt, u8g_uint_t h, const u8g_pgm_uint8_t *bitmap)

    //参数为:(x:位图左上角的横坐标 y:位图左上角的纵坐标 cnt:在水平方向上位图的字节数 h:位图的高 *bitmap:位图对象),所以位图的宽,就是(cnt * 8),1字节=8位。12

     

    例子:

     

     

     

    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)

    完整代码:

    //调用u8glib库

    #include "U8glib.h"

     

    //创建一个LCD对象

    U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8);

     

    const uint8_t rook_bitmap[] U8G_PROGMEM = {

      0x00,         // 00000000

      0x55,         // 01010101

      0x7f,         // 01111111

      0x3e,         // 00111110

      0x3e,         // 00111110

      0x3e,         // 00111110

      0x3e,         // 00111110

      0x7f          // 01111111

    };

     

    void draw(){

        u8g.drawBitmapP(0,0, 1, 8, rook_bitmap);

    }

     

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

    }

    第五部分,获取内容信息

    首先是获取屏幕的宽和高。

    函数语法:

    u8g_uint_t U8GLIB::getHeight(void)      //返回屏幕的高度

    u8g_uint_t U8GLIB::getWidth(void)       //返回屏幕的宽度

    LCD12864的高度64,宽度是128

    例子:

    int w;

    int h;

    w = u8g.getWidth();

    h = u8g.getHeight();

    返回:w=128, h=64

    然后是获得所显示字符串的宽度

    函数语法:

    u8g_uint_t U8GLIB::getStrWidth(const char *s)

    //参数是:(*s: 字符串的内容)

    例子:

    int w; 

     

    u8g.setFont(u8g_font_osb18);    //设置字体

    u8g.drawStr(0,20, "ABC");

    w = u8g.getStrWidth("ABC");     //获得显示的字符串宽度

    u8g.drawFrame(0,10, w,11);      //画一个以获得的字符串宽度为宽度的方框

     

     

    第六部分,设置字体,位置等

    首先是设置字体

    函数语法:

    U8GLIB::setFont(const u8g_fntpgm_uint8_t *font)

    //参数为:(*font: 要显示字符的字体)

     

     

    有关u8glib提供的字体样式,请移步至Click Me

    因为之前已经使用过此函数,此处就不做过多描述,

    例子:

    u8g.setFont(u8g_font_osb18);

    有关u8glib提供的字体样式

    因为之前已经使用过此函数,此处就不做过多描述,

    例子:

    u8g.setFont(u8g_font_osb18);

    然后是设置print()函数的显示位置。

    函数语法:

    void U8GLIB::setPrintPos(u8g_uint_t x, u8g_uint_t y)

    //参数为:(x:显示内容的横坐标 y:显示内容的纵坐标)

    因为之前已经使用过此函数,此处就不做过多描述,

    例子:

    u8g.setPrintPos(10,20);

    然后是设置是否显示对象,透明还是不透明。对于单色OLED来说,此函数就是设置对象是否为透明。对于有灰度值的屏幕来说则是一个设置灰度值。

    void U8GLIB::setColorIndex(uint8_t color_index)

    //参数为:(color_index:0和1)

    //0为不显示,透明

    //1为显示,不透明

    例子:

    u8g.setColorIndex(1);           //不透明,显示内容

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

    u8g.setColorIndex(0);           //透明,不显示内容

    u8g.drawPixel(28, 14);

    然后是将显示结果旋转90°,180°或者270°

    函数语法:

    void U8GLIB::setRot90()

    void U8GLIB::setRot180()

    void U8GLIB::setRot270()

    例子:

    //正常显示

    u8g.setFont(u8g_font_osb18);

    u8g.drawStr(0,20, "ABC");

     

    //旋转显示

    u8g.setRot90();     //旋转90°

    u8g.setFont(u8g_font_osb18);

    u8g.drawStr(0,20, "ABC");

    最后一个是修改显示字符的坐标标准。默认标准是字符的左下角坐标,可以通过函数setFontPosTop()函数来修改为字符的左上角坐标。

    函数语法:

    void U8GLIB::setFontPosTop(void)

    例子:

    u8g.setFont(u8g_font_osb18);

    u8g.setFontPosTop();

    u8g.drawStr(0, 20, "ABC");

  • 相关阅读:
    Java版远程控制V1.0
    Struts2使用Kindeditor4.0.3在线编辑器上传图片、视频、FLASH、附件
    给你的网站加上站内搜索Spring+Hibernate基于Compass(基于Lucene)实现
    Hibernate整合进spring使用自己的事务处理
    Hibernate整合进spring使用hibernateTemplate.getSessionFactory().getCurrentSession()理解
    GWT(Google Web Toolkit)入门学习
    转载:狼与哈士奇
    [转]远程桌面无法连接上(管理员已结束了会话)的解决方法
    ibmDW:凤凰涅槃:从 iBatis 到 MyBatis
    hibernate多对多映射拆成2个一对多映射(注解)
  • 原文地址:https://www.cnblogs.com/anandexuechengzhangzhilu/p/10705455.html
Copyright © 2011-2022 走看看