图片看不到戳 这里
本系列分两部分,基础显示篇和图形设计篇,基本显示通过修改示例代码,了解u8glib的基本工作方式!想想用单片机驱动并口12864,那可真是一项体力活,自从结识Arduino,图形显示如探囊取物般Easy,下面就开始跟我一起操刀u8glib库吧。
u8glib是一套单色点阵液晶/OLED显示库,支持多平台,除Arduino外还支持AVR、ARM平台等。首先安装u8glib库支持,Arduino已在管理库中添加,只需要简单步骤即可安装。
打开菜单项目->加载库->管理库,在搜索栏中输入u8glib,用鼠标点一下,“安装”按钮就出来了。
接下来,需要准备一块LCD液晶,u8glib几乎支持所有单色(部分支持灰度)点阵式液晶,并口、SPI或I2C,采购时尽量买SPI接口,并口IO多太浪费,I2C在没刷新速度要求的时候可以用,毕竟使用更少的IO口。推荐SPI接口,四或五根线,关键刷新速度快,最快可以做到40帧!I2C在默认100K总线速率下,只能有不到10帧!
我的LCD是,选它因为可带中文字库,OLED是(仅作参考,你可以选择支持型号中的任何一种)。
比如我的LCD驱动是UC1701、OLED是SH1106,u8glib Ok。
硬件接法,唯一要注意是电压问题,LCD分5V和3.3V两种,OLED通常是3.3V~5V (内部带稳压)。我不敢打包票,但其实液晶都可以接3.3V~5V,所谓区别只是背光电压问题,3.3V限流电阻要小一点。IO接口和驱动电压都容忍5V,所以跟Arduino直连没问题(5V tolerate)!只要确认电压管脚没接错,其它IO即使接错了,也不会烧坏任何东西的。
由于Arduino UNO没有插针,而一公一母的杜邦线着实不好找,改用单排长插针中继,双母头杜邦线就好找多了。
LCD接法示例:
OLED接法示例,使用侧面SPI插针:
图片太小看不清,来张清楚地!
液晶SPI接口通常与Arduino接五根IO线,其中RESET线有些驱动可以不接,但不总是成功。比如我的LCD就要接,不接有时候无显示,而OLED就可以不接。五根线分别是SCK、MOSI、CS、DA、RESET,其中DA很多名字,RS、A0、C/S、R/W等等,总之CS是片选信号(Chip Select),SPI需要接SCK和MOSI,RESET部分可不接,剩下那根就是DA了。我为测试方便,同时接了两块液晶,IO接口如下:
LCD:
CS <--> 7
RST <--> 8
DA <--> 9
SDA <--> 11(MOSI)
SCK <--> 13(SCK)
OLED(接在SPI 6PIN上,从左到右、从上到下是1~6):
RES <--> 4
DA <--> 5
CS <--> 6
CLK <--> 3(SCK 6PIN 左中)
DIN <--> 4(MOSI 6PIN 右中)
注:Arduino PIN 12是MISO,用于输入的;PIN 10是SPI时钟,如果你只用一组SPI设备,可以把它当做CS,但如果同时接多个SPI设备,最好不用。
打开Arduino IDE,点 文件->示例->u8glib->HelloWorld
示例程序开始有大段块注释,是为使用不同芯片的。接法分软、硬SPI,参数可以是2~5个。其中,2~3个参数的是硬SPI,就是SCK、MOSI必须接在13/11上,第3个参数是RESET管脚或没有;如果接软SPI就是4~5个参数的,第5个是RESET管脚,程序通过软件方式模拟SPI,速度比硬SPI要慢很多、很多。
在里面没有找到UC1701的示例,别急,去u8glib官网查查:https://github.com/olikraus/u8glib/wiki/device
原来UC1701使用MINI12864这个通用库。SW代表软SPI,HW硬SPI,尽量使用硬SPI。
构造一个u8g的对象,两块液晶只需要稍微改一下构造函数就可以分别驱动了,真省事儿。
不出意外的话,编译、上传就能看到大大的Hello World了。
如果没显示,不要急,重新检查一遍硬件链接,还有IO口数字是否都对。
SPI、I2C接口的液晶,隐藏大部分内部操作,结合u8glib使用,操作显示非常Easy!
u8glib的示例程序非常强大,从中可以学到很多知识,比如下面这个FPS,能测试液晶的刷新率。
代码也很简单,构建一个u8g对象,跟Hello World一样,编译、上传就好了。
其中,Chess是国际象棋小游戏,增加几个按键就可以跟计算机对战了。
本节主要介绍了Arduino和液晶之间的基本链接,下一节主讲u8glib工作原理,并测试中文显示。
参考地址:u8glib官方 https://github.com/olikraus/u8glib/wiki
|