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

Arduino 开源库 u8glib2 之 图标显示【原创】的更多相关文章

  1. Tornadofx学习笔记(4)——IconTextFx开源库,整合5000+个字体图标

    JavaFx中其实也可以直接使用字体图标iconfont的,只需要加载ttf字体文件,之后设置unicode即可,具体可以看我给出的代码 既然JavaFx可以,那么以JavaFx为基础的Tornado ...

  2. Android 使用开源库StickyGridHeaders来实现带sections和headers的GridView显示本地图片效果

    大家好!过完年回来到现在差不多一个月没写文章了,一是觉得不知道写哪些方面的文章,没有好的题材来写,二是因为自己的一些私事给耽误了,所以过完年的第一篇文章到现在才发表出来,2014年我还是会继续在CSD ...

  3. 真香警告!JitPack 开源库集成平台

    前言: 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 简介 官方介绍: JitPack 是一个用于 JVM 和 Android 项目的新颖的包存储库.它按需构建 Git 项目并为您提供即用 ...

  4. 开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发

    [原][开源框架]Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位... 时间 2015-01-05 10:08:18 我是程序猿,我为自己代言 原文  http: ...

  5. Android主流UI开源库整理(转载)

    http://www.jianshu.com/p/47a4a7b99364 标题隐含了两个层面的意思,一个是主流,另一个是UI.主流既通用,一些常规的按钮.Switch.进度条等控件都是通用控件,因此 ...

  6. iOS项目中常用的第三方开源库

    1.项目使用的第三方开源库 项目使用了CocoaPods(类似java中的maven)管理常用的第三方库,一些特殊的单独引用,下面介绍下比较好用的几个. (1)AFNetworking 目前比较推荐的 ...

  7. Android 第三方开源库收集整理(转)

    原文地址:http://blog.csdn.net/caoyouxing/article/details/42418591 Android开源库 自己一直很喜欢Android开发,就如博客签名一样,  ...

  8. 45.Android 第三方开源库收集整理(转)

    原文地址:http://blog.csdn.net/caoyouxing/article/details/42418591 Android开源库 自己一直很喜欢Android开发,就如博客签名一样,  ...

  9. Android开源库

    http://blog.csdn.net/xiaanming/article/details/9470223 一.兼容类库 ActionBarSherlock : Action Bar是Android ...

随机推荐

  1. ArcGIS API for JavaScript 4.2学习笔记[10] 2D添加指北针widget、视图保存、视图padding(第二章完结)

    这几个例子是第二章除了入门之外比较简单的几个,就做个合集,把最核心的代码(第二参数)和 引用放上来即可,不作多解释. 2D地图添加指北针widget 2D地图一般修正方向为正北方就需要这个widget ...

  2. JavaScript及jQuery中的各种宽高属性图解

    文/poetries(简书作者)原文链接:http://www.jianshu.com/p/60332df38393 著作权归作者所有,转载请联系作者获得授权, 并标注“简书作者”.   作者声明:本 ...

  3. Java 浅析Thread.join()

    概要 本文分为三部分对 Thread.join() 进行分析: 1. join() 的示例和作用 2. join() 源码分析 3. 对网上其他分析 join() 的文章提出疑问 1. join() ...

  4. JMeter集合点

    位置:添加--> 定时器-->Synchronizing Timer     注意:集合点放在所有操作之前.   假设线程组线程数设置的是50个,那么希望50个都准备好一块上,那么集合点中 ...

  5. ASP.NET Core文件上传与下载(多种上传方式)

    前言 前段时间项目上线,实在太忙,最近终于开始可以研究研究ASP.NET Core了. 打算写个系列,但是还没想好目录,今天先来一篇,后面在整理吧. ASP.NET Core 2.0 发展到现在,已经 ...

  6. PHP 微信公众号-创建菜单-配置

    1.服务号 2.基本配置 注意: URL: 确保能访问到你对应的文件 Token:随意设置,但是要与文件里的一致 3.网页授权 注意:填写网站域名 4.更具实际需求创建菜单

  7. Mysql使用小tips

    一..常用函数 1.IFNULL(expr1,expr2)          如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2.IFNULL()返回一个数字或字符串值, ...

  8. 浅谈 URI 及其转义

    URI URI,全称是 Uniform Resource Identifiers,即统一资源标识符,用于在互联网上标识一个资源,比如 https://www.upyun.com/products/cd ...

  9. Mac下jenkins用户权限配置错误,导致登录时提示:没有Overall/read权限

    由于初次接触jenkins,于是在搭建好jenkins以后,想要对用户进行管理,于是乎开始在系统管理->configure Global Security里设置用户的权限. 在启用安全-> ...

  10. Python模块学习------ 多线程threading(1)

    # Method 1: 创建一个Thread实例,传给它一个函数:import threading from time import sleep, ctime loops = [4,2] def lo ...