zoukankan      html  css  js  c++  java
  • Arduino 开源库 u8glib2 之 图标显示【原创】

    Arduino 开源库 u8glib2 研究之 图标显示
                   -----------------关于drawXBM drawXBMP函数使用的研究


    因为心血来潮,近来想做一个贪食蛇的游戏,手上有Arduino和我们自己开发的Newbit OLED Shield,硬件完全满足,所以在网上搜了下,发现好多人在用u8glib, 现在已经出了第二版 u8glib2, 第一版已经停止维护了, 不过两版的源码可以在 github.com下载,具体网址是

    这个库很强大,显示文字(多种字体可选),划几何图形,绘图都没有问题。



    在Arduino 1.6.12的环境里,可以直接下载库(非源码),下载了可以用,下载的方法是
    1. 在Arduino中选择菜单 “项目”
    2. 点击“加载库"->”管理库“
    3. 在搜索框里输入 u8g2 ,
    4. 安装最新的版本,比如  2.8.5
    不过这个库的文档似乎不太完善,还是要看看源码才知道库的使用方法。所幸还有一份勉强可以用的参考文档
    http://www.docin.com/p-1011581730.html
    为了制作贪食蛇的游戏,要显示蛇身的单元格,因此首先要了解利用 u8glib2如何显示图标。

    库中有多个函数用来显示位图(也即是我们所说的图标),这种位图是不规则的,通常不是几何图形,比如代表蛇身的块,一颗国际象棋等等。
    以下两个是比较好用的。两个函数功能相仿,只是前者输入为ram中的数据,后者输入为rom中的数据,用的时候自行选择
    void drawXBM(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, const uint8_t *bitmap)
    void drawXBMP(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, const uint8_t *bitmap)

    举例来说明一下这个函数如何使用

    数据是
    const uint8_t ele3x3[] PROGMEM = {
    0X07,
    0X06,
    0X04,
    };
    这代表一个缺少左下角的正方形,其实是一个直角三角形。  ele3x3[0] = 7 = 0b0000 0111, 取低3位, 而D2则对应屏上最右边。
    它表示的3个点是
    .  .  .
    同理第ele3x3[1] = 6, 表示
    x .  .
    ele3x3[2] = 4,表示
    x  x  .
    (x)表示在屏上不显示任何内容

    整个数组的显示内容为
    . . .
      . .
        .
    当左右上下间距相同时,就是一个直角三角形了。

    假定我们要显示在 (30,30) (33,33)这个矩形区域中。

    了解要显示的对象之后,再看如何调用函数 drawXBMP()
    drawXBMP(30,30, 3, 3, ele3x3);


    好了,来看看显示的效果






    ---------------------------------------------------
    代码下载

    https://pan.baidu.com/s/1c1Vru3Q


    【Newbit Studio】 尊重原创,转载请注明来自www.newbitstudio.com




  • 相关阅读:
    CF351A Jeff and Rounding 思维
    CF352B Jeff and Periods 模拟
    CF352A Jeff and Digits
    小B的询问 莫队分块
    小凯的疑惑 数学
    BestCoder Round #80 待填坑
    [SDOI2009]HH的项链 树状数组 BZOJ 1878
    Blocks poj 区间dp
    [USACO5.4]奶牛的电信Telecowmunication 最小割
    数位dp
  • 原文地址:https://www.cnblogs.com/newbit/p/6189193.html
Copyright © 2011-2022 走看看