查看: 788|回复: 0
打印 上一主题 下一主题

Arduino超级LCD、OLED显示库u8glib【一】基本显示

[复制链接] qrcode

33

主题

35

帖子

109

积分

注册会员

Rank: 2

积分
109
楼主
跳转到指定楼层
发表于 2016-4-16 10:51 AM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


 图片看不到戳 这里


本系列分两部分,基础显示篇和图形设计篇,基本显示通过修改示例代码,了解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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表