智能家居入门DIY——【七、添加一个LCD12864吧】
今天加了一个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吧】的更多相关文章
- 智能家居入门DIY——【一、ESP8266之软串口HTTP请求】
前段时间做了一个激光雕刻,玩的不亦乐乎.对Arduino大感兴趣,于是又入手一块20大洋版,配上买学习套件时的诸多零件——红外发射管.一体化红外接收头.DHT11温湿度传感器.ESP8266等,以及某 ...
- 智能家居入门DIY——【六、使用OneNet后台处理数据】
OneNet使用起来要比lewei50复杂一些,它没有前台需要自己开发.命令下发也和之前介绍的lewei50有一些区别,这里着重介绍一下使用MQTT协议来进行通讯. 一.准备 1.Esp8266开发板 ...
- 智能家居入门DIY——【五、执行命令】
前面几篇介绍了ESP8266使用AT命令来连接WIFI实现一系列功能.这一篇介绍一下使用Wemos D1 Wifi来进行开发,当然也可以用常见的8针ESP8266来完成(只是需要按网上的方法将Ardu ...
- 智能家居入门DIY——【四、组合】
前面几篇介绍了一些传感器和代码,这篇介绍一下把它们组合起来.之所以单独列出这部分,原因在于组合更多功能的时候发现使用软串口库驱动ESP8266时由于内存过小导致发送失败甚至整个系统无法工作的情况.所以 ...
- 智能家居入门DIY——【三、GP2Y10之颗粒物传感器】
这个传感器接线算比较简单的,程序也不麻烦.不过这东西是颗粒物传感器吧,不是神马PM2.5(总悬浮颗粒物),不是神马PM10(可吸入颗粒物).插个螺丝刀进去度数也是变的,不是说的很清楚原理是反光嘛……… ...
- 智能家居入门DIY——【二、LD3320之语音识别】
前一篇说了一下只有RX,TX,VCC,GND的WIFI模块软串口通讯:在实现了远程观察数据,类似的就可以实现远程控制.接下来说一下近距离控制,很多情况下应用语音识别技术无疑比掏出手机操作要更人性化一些 ...
- Asp.Net MVC4.0 官方教程 入门指南之四--添加一个模型
Asp.Net MVC4.0 官方教程 入门指南之四--添加一个模型 在这一节中,你将添加用于管理数据库中电影的类.这些类是ASP.NET MVC应用程序的模型部分. 你将使用.NET Framewo ...
- Asp.Net MVC4.0 官方教程 入门指南之三--添加一个视图
Asp.Net MVC4.0 官方教程 入门指南之三--添加一个视图 在本节中,您需要修改HelloWorldController类,从而使用视图模板文件,干净优雅的封装生成返回到客户端浏览器HTML ...
- 入门智能家居,从 IFTTT 到 HomeKit 自动化(二)
入门智能家居,从 IFTTT 到 HomeKit 自动化(二) 目录 0. HomeKit.HomeBridge.HomeAssistant 分别是什么?关系是什么? 1. 开始前的准备 2. 整 ...
随机推荐
- $n,$!等的含义
$$ Shell本身的PID(ProcessID)$! Shell最后运行的后台命令的PID$? 上一个运行的命令是否成功的标志,成功为0,失败不为0$* 所有参数列表.如"$*" ...
- Java中代码点与代码单元(转)
摘要 本文介绍 Java 平台支持增补字符的方式.增补字符是 Unicode 标准中代码点超出 U+FFFF 的字符,因此它们无法在 Java 编程语言中描述为单个的 16 位实体(例如char数据类 ...
- Android中的自定义注解(反射实现-运行时注解)
预备知识: Java注解基础 Java反射原理 Java动态代理 一.布局文件的注解 我们在Android开发的时候,总是会写到setContentView方法,为了避免每次都写重复的代码,我们需要使 ...
- Linux常用命令--文件操作、权限设置
1.编辑文件 cat aaa.txt 查看aaa.txt文件的内容 head - aaa.txt 查看aaa.txt文件前5行的内容 tail - aaa.txt 展示aaa.txt文件最后10行的内 ...
- Morgan logger
var logger = require("morgan"); res.render = function(view, options, fn){ options = option ...
- JavaScript学习总结(二十三)——JavaScript 内存泄漏教程
参考教程:http://www.ruanyifeng.com/blog/2017/04/memory-leak.html 一.什么是内存泄漏? 程序的运行需要内存.只要程序提出要求,操作系统或者运行时 ...
- hdu 3694 10 福州 现场 E - Fermat Point in Quadrangle 费马点 计算几何 难度:1
In geometry the Fermat point of a triangle, also called Torricelli point, is a point such that the t ...
- input type="file"在各个浏览器下的默认样式,以及修改自定义样式
一.<input type="file"/>在各个浏览器中的默认样式: 系统 浏览器 样式效果 点击效果 mac google 点击按钮和输入框都可以打开文件夹 mac ...
- LINQ 分页 和存储过程分页
存储过程分页 SELECT * FROM ( SELECT ROW_NUMBER() OVER(ORDER BY CreateDate DESC) AS RowNo, EstateAddress, E ...
- jinja 2 filter 使用
文档地址 http://jinja.pocoo.org/docs/templates/#builtin-filters indent indent(s, width=4, indentfirst=Fa ...