今天加了一个LCD12864,IC看说明上是ST7567,结果一顿U8g2,发现两个问题:

1、买的时候不知道是卖家写的我理解错了还是怎么了,反正是不出汉字的。

2、U8g2太大了…………占了uno的80%还多

然后,破罐子破摔吧,换成U8glib小了很多;汉字么,用图形表示好了,看了一下U8glib的范例,发现可以用二进制来表示黑白点,然后弄一小工具,读16×16点阵,转化为二进制就可以了:

const uint8_t wen[] PROGMEM = {
0x00,0x00,0x23,0xF8,0x12,0x08,0x12,0x08,0x83,0xF8,0x42,0x08,0x42,0x08,0x13,0xF8,
0x10,0x00,0x27,0xFC,0xE4,0xA4,0x24,0xA4,0x24,0xA4,0x24,0xA4,0x2F,0xFE,0x00,0x00,
};

这是温字,加PROGMEN关键字就不占运行内存了,所以这样的字可以放一些,当然会使得程序占用的空间大一点,但好处是有针对性,一般我们也用不了几个字不是。

3、用那个声明?

U8glib这个库在用的时候需要把它注释掉的若干行u8g定义中的一行注释掉,而名字也很直观,但是无奈的是我确实没找到我这个的声明,所以只好找一个相似的咯,几番实验和观察代码下来,发现主要是位置不同,所以选了一个库就这样用起来就可以了:

U8GLIB_NHD_C12864 u8g(, , , , );    // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8

4、“英汉混合显示”

其实说白了,无论什么东西显示的时候都是设置点的颜色而已。所以处理的时候都会和上面所说的图形一样。至于我们写代码么,只要算好偏移,分别用两种方法显示:汉字用图形,其他英文字母数字字符什么的还是用原来的方法,原来的方法即直观又高效:

void draw(void) {
// graphic commands to redraw the complete screen should be placed here
u8g.drawBitmapP(, , , , wen);
u8g.drawBitmapP(, , , , du);
u8g.setFont(u8g_font_unifont);
u8g.drawStr(, , ": 33.70");
u8g.drawBitmapP(, , , , sheshidu); u8g.drawBitmapP(, , , , shi);
u8g.drawBitmapP(, , , , du);
u8g.setFont(u8g_font_unifont);
u8g.drawStr(, , ": 33.70 %RH"); }

5、全部代码:

#include <U8glib.h>

U8GLIB_NHD_C12864 u8g(, , , , );    // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8

const uint8_t wen[] PROGMEM = {
0x00,0x00,0x23,0xF8,0x12,0x08,0x12,0x08,0x83,0xF8,0x42,0x08,0x42,0x08,0x13,0xF8,
0x10,0x00,0x27,0xFC,0xE4,0xA4,0x24,0xA4,0x24,0xA4,0x24,0xA4,0x2F,0xFE,0x00,0x00,
};
const uint8_t du[] PROGMEM = {
0x01,0x00,0x00,0x80,0x3F,0xFE,0x22,0x20,0x22,0x20,0x3F,0xFC,0x22,0x20,0x22,0x20,
0x23,0xE0,0x20,0x00,0x2F,0xF0,0x24,0x10,0x42,0x20,0x41,0xC0,0x86,0x30,0x38,0x0E,
};
const uint8_t sheshidu[] PROGMEM{
0x60,0x00,0x91,0xF4,0x96,0x0C,0x6C,0x04,0x08,0x04,0x18,0x00,0x18,0x00,0x18,0x00,
0x18,0x00,0x18,0x00,0x18,0x00,0x08,0x00,0x0C,0x04,0x06,0x08,0x01,0xF0,0x00,0x00,
};
const uint8_t shi[] PROGMEM{
0x00,0x00,0x27,0xF8,0x14,0x08,0x14,0x08,0x87,0xF8,0x44,0x08,0x44,0x08,0x17,0xF8,
0x11,0x20,0x21,0x20,0xE9,0x24,0x25,0x28,0x23,0x30,0x21,0x20,0x2F,0xFE,0x00,0x00,
}; void draw(void) {
// graphic commands to redraw the complete screen should be placed here
u8g.drawBitmapP(, , , , wen);
u8g.drawBitmapP(, , , , du);
u8g.setFont(u8g_font_unifont);
u8g.drawStr(, , ": 33.70");
u8g.drawBitmapP(, , , , sheshidu); u8g.drawBitmapP(, , , , shi);
u8g.drawBitmapP(, , , , du);
u8g.setFont(u8g_font_unifont);
u8g.drawStr(, , ": 33.70 %RH"); } void setup(void) {
} void loop(void) {
// picture loop
u8g.firstPage();
do {
draw();
} while (u8g.nextPage()); // rebuild the picture after some delay
delay();
}

智能家居入门DIY——【七、添加一个LCD12864吧】的更多相关文章

  1. 智能家居入门DIY——【一、ESP8266之软串口HTTP请求】

    前段时间做了一个激光雕刻,玩的不亦乐乎.对Arduino大感兴趣,于是又入手一块20大洋版,配上买学习套件时的诸多零件——红外发射管.一体化红外接收头.DHT11温湿度传感器.ESP8266等,以及某 ...

  2. 智能家居入门DIY——【六、使用OneNet后台处理数据】

    OneNet使用起来要比lewei50复杂一些,它没有前台需要自己开发.命令下发也和之前介绍的lewei50有一些区别,这里着重介绍一下使用MQTT协议来进行通讯. 一.准备 1.Esp8266开发板 ...

  3. 智能家居入门DIY——【五、执行命令】

    前面几篇介绍了ESP8266使用AT命令来连接WIFI实现一系列功能.这一篇介绍一下使用Wemos D1 Wifi来进行开发,当然也可以用常见的8针ESP8266来完成(只是需要按网上的方法将Ardu ...

  4. 智能家居入门DIY——【四、组合】

    前面几篇介绍了一些传感器和代码,这篇介绍一下把它们组合起来.之所以单独列出这部分,原因在于组合更多功能的时候发现使用软串口库驱动ESP8266时由于内存过小导致发送失败甚至整个系统无法工作的情况.所以 ...

  5. 智能家居入门DIY——【三、GP2Y10之颗粒物传感器】

    这个传感器接线算比较简单的,程序也不麻烦.不过这东西是颗粒物传感器吧,不是神马PM2.5(总悬浮颗粒物),不是神马PM10(可吸入颗粒物).插个螺丝刀进去度数也是变的,不是说的很清楚原理是反光嘛……… ...

  6. 智能家居入门DIY——【二、LD3320之语音识别】

    前一篇说了一下只有RX,TX,VCC,GND的WIFI模块软串口通讯:在实现了远程观察数据,类似的就可以实现远程控制.接下来说一下近距离控制,很多情况下应用语音识别技术无疑比掏出手机操作要更人性化一些 ...

  7. Asp.Net MVC4.0 官方教程 入门指南之四--添加一个模型

    Asp.Net MVC4.0 官方教程 入门指南之四--添加一个模型 在这一节中,你将添加用于管理数据库中电影的类.这些类是ASP.NET MVC应用程序的模型部分. 你将使用.NET Framewo ...

  8. Asp.Net MVC4.0 官方教程 入门指南之三--添加一个视图

    Asp.Net MVC4.0 官方教程 入门指南之三--添加一个视图 在本节中,您需要修改HelloWorldController类,从而使用视图模板文件,干净优雅的封装生成返回到客户端浏览器HTML ...

  9. 入门智能家居,从 IFTTT 到 HomeKit 自动化(二)

    入门智能家居,从 IFTTT 到 HomeKit 自动化(二)   目录 0. HomeKit.HomeBridge.HomeAssistant 分别是什么?关系是什么? 1. 开始前的准备 2. 整 ...

随机推荐

  1. SpringMVC 原理和流程

    请求到来时,第一个接受这个请求的前端控制器叫DispatcherServlet(这个需要在web.xml中配置),后端控制器叫Controller. 简化版流程: 1.spring mvc将所有的请求 ...

  2. 关于JS和JSON

    讲得不准确! 看网课,JS也算是面向对象的一门语言,不过其是解释性的脚本语言. JSON是把用JS的表示法将数据包装起来进行传递用的. JS语法是松散型的,没有int String这些像JAVA里的类 ...

  3. MySQL数据库安装和Navicat for MySQL配合使用

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司. MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS ...

  4. Leetcode 53

    //经典class Solution { public: int maxSubArray(vector<int>& nums) { ; int maxsum = -INT_MAX; ...

  5. 数论练习(4)——同余方程(扩gcd)

    CODEVS 1200 同余方程 题目描述 Description 求关于 x 同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入描述 Input Description 输入只有一行,包含 ...

  6. JAVA中的>>和>>>号以及<<号的作用

    public static void main(String[] args) { //右移2位,输出结果为2.二进制1000右移2位变为0010 System.out.println(8>> ...

  7. [ccf 4] 网络延时

    网络延时 问题描述 给定一个公司的网络,由n台交换机和m台终端电脑组成,交换机与交换机.交换机与电脑之间使用网络连接.交换机按层级设置,编号为1的交换机为根交换机,层级为      1.他的交换机都连 ...

  8. 解决MySQL workbench的Can't connect to MySQL server on '127.0.0.1'(10061)问题

    如题,今天打开MySQL时,出现了这种问题,无法连接到数据库 问题原因:The error (2003) Can't connect to MySQL server on 'server' (1006 ...

  9. 函数响应式编程RxJava

    RxJava 到底是什么 一个词:异步. RxJava 在 GitHub 主页上的自我介绍是 "a library for composing asynchronous and event- ...

  10. SSRS实现 矩阵列实现动态列

    需求背景:按区域查询店铺的销售量和库存量,然后店铺的数据是动态的.实现类似效果如下图,其中蓝色框是动态的,店铺的数量是不确定的,可能是3个,也可能是20个. 步骤一: 步骤二: 加工后: 最后效果: