智能家居入门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. 整 ...
随机推荐
- 20145326 《Java程序设计》课程总结
每周读书笔记链接汇总 20145326第1周学习总结 20145326第2周学习总结 20145326第3周学习总结 20145326第4周学习总结 20145326第5周学习总结 20145326第 ...
- Egret引擎开发基础(一)
显示图片 var batman:egret.Bitmap = new egret.Bitmap( RES.getRes('hexo-huaheshang_png')); batman.x = 0; b ...
- VS中子对话框的关闭回调函数
新建了QDialog的子类时,如果需要回调它的关闭函数 1.加入头文件#include <QCloseEvent> 2.重写函数 protected: void closeEvent(QC ...
- 嵌入式Linux应用程序开发环境搭建记录
2016年2月 参考资料: OK210软件手册(Linux版).pdf Ubuntu下Qt4.7.1编译环境配置说明.pdf 我阅读了以下内容: OK210软件手册(Linux版).pdf 第七章 O ...
- POJ 2185 Milking Grid(KMP最小循环节)
http://poj.org/problem?id=2185 题意: 给出一个r行c列的字符矩阵,求最小的覆盖矩阵可以将原矩阵覆盖,覆盖矩阵不必全用完. 思路: 我对于字符串的最小循环节是这么理解的: ...
- php 添加时间戳
<?php $tomorrow = mktime(,,,date(,date("Y")); echo "Tomorrow is ".date(" ...
- python 执行字符串中的python代码
mycode = 'print("hello world")' code = """ def mutiply(x,y): return x*y pri ...
- shell 变量赋值运算
.变量赋值: name=lbg 等号前后不能有空格 name="Lebron James" 变量值中有空格要用双引号 echo ${name} 用${}更保险 shopt -s - ...
- Rails 5 Test Prescriptions 第8章 Integration Testing with Capybara and Cucumber
Capybara: A complete reference is available atrubydoc.info. 集成测试就是把局部的程序组合起来测试. 端到端测试是一个特殊的集成测试,覆盖了 ...
- Android 之WebView实现下拉刷新和其他相关刷新功能
最近项目中需要用到WebView下拉刷新的功能,经过查找资料终于完成了此功能,现在拿出来和大家分享一下.希望对大家有所帮助. 效果如下图: 代码: activity.xml <?xml ve ...