图形LCD挂钩指南

页面
贡献者: jimblom
喜爱的 最喜欢的

介绍

记住那些手机还在的时候哑巴,“他们有物理键盘和只是一个微小的单色液晶显示器吗?现在有了iPhone,星系,等市场已经彻底改变了,这些小液晶显示器必须找到新的生活目标:增加定制的图形显示项目!亚博官网!

图形液晶点亮

这些84年x48像素黑白液晶显示器你可能会发现在一个旧吗诺基亚3310。它们不浮华,他们没有很多显示房地产。但是,他们是容易来控制。如果您希望从简单的显示器或LED增强项目的用户界面(UI)游戏,亚博官网这个图形LCD是一个很好的起点。

图形LCD 84x48-诺基亚5110

图形LCD 84x48-诺基亚5110

LCD-10168
9.95美元
14

在本教程中,我们将展示如何使用一个Arduino和一些线控制这些图形LCD。我们将讨论从硬件组装到示例代码,和超越。

所需材料

建议阅读

显示概述

在深入装置和示例代码之前,让我们首先看一看液晶及其突破。这个页面上我们将讨论从板的引脚分配到用于控制显示器的接口。

引出线的

与和电力图形LCD接口,有两个,在它上面和下面平行的8针头。把木板翻过来,你会找到每个销子的标签。

液晶背面

你可以通过它们之间微弱的痕迹来判断,一个封头上的每个销与另一侧的平行销相连。以下是八个独特的引脚及其用途的概述:

引脚数 销的标签 PIN函数 输入输出?? 笔记
录像机 正电源 输入 供电范围在2.7V到3.3V之间。
接地 地面 输入
SCE 芯片选择 输入 活性低
RST 重置 输入 活性低
付款交单 模式选择 输入 在命令模式(低)和数据模式(高)之间选择。
DN(MOSI) 串行数据 输入
SCLK 串行时钟 输入
发光二极管 LED背光源 输入 最大电压为3.3V。

电力供应

在LCD上有两个不同的电源电压。最重要的电源电压录像机-提供LCD内部的逻辑电路。这个数据表州这应该是在2.7~3.3V之间。在正常状态下,LCD将消耗约马6或7。

第二电压供应所需的LED背光在黑板上。如果你要从PCB上移除LCD(不是你应该,或需要),你会看到这些背光最简单的形式-四个白色的LED周围板边缘间隔。您可能还注意到,没有任何限流电阻。

从PCB中移除LCD

这意味着你必须仔细的有了这个电压源。坚持一个限流电阻串联的“领导”销,或限制供应3.3 v max。当前的led可以拉很多!没有什么可以限制他们,他们3.3V时能拉大约100mA。

控制接口

内置在这个LCD中的是飞利浦PCD8544显示控制器,它把原始LCD的大量并行接口转换成更方便的串行接口。PCD8544通过类似于SPI。有钟SCLK)和数据(DN)输入线,以及有源低芯片选择(SCE(以及)输入。

在这三条连线之上,还有另一个输入–付款交单–它告诉显示器它正在接收的数据是命令还是可显示数据。

对于命令列表,查看“指示”PCD8544数据表部分(第11页)。有使能清除显示器的指令,反转像素,关掉电源,还有更多。

硬件组装和挂钩

在我们开始上传代码,并将数据发送到显示,让我们先照顾硬件的东西。包括装配显示,然后把它挂到阿杜伊诺河上。

组装

“集合“液晶显示器,你需要焊料8针头中的一个(或两个)上的东西。这里有很多选择。为了使LCD面板兼容,,直的直角公头可以焊接进去。

插入示例的报头

液晶显示与海峡男性头焊接,插入一个迷你蓝面包板

否则,,电线或其他连接器可以焊接到显示引脚。

联播

在这个例子中,我们将把LCD连接到Arduino,但是这种连接应该很容易适应其他开发平台。对于数据传输引脚-SCLK和DN(MOSI)-我们将使用Arduino的硬件SPI引脚,这将有助于实现更快的数据传输。芯片选择(SCE),复位(RST),和数据/命令(D / C)针可以连接到任何数字输入输出引脚。最后,LED管脚应该连接到具有PWM能力的Arduino管脚,这样我们就可以随意调暗背光了。

不幸的是,液晶的最大输入电压3.6V,所以我们不能把标准的5V阿杜伊诺直接连接到它。我们需要转移的水平。这引出了一些连接选项:

直接连接

最简单的连接是将Arduino引脚直接连接到LCD。允许简单的连接,你需要一个3.3V运行的Arduino,就像3.3V/8MHz PRO3.3V迷你版

这种设置可以5V阿杜伊诺公司工作,忽略V上的3.6V限制科科斯群岛和数据行。我们已经这样做了。它起作用了。但它可能会降低您的液晶显示器的寿命。

直接连接弗里茨

数据引脚连接如下:

液晶显示管脚 阿杜诺管脚 笔记
1 - VCC 3.3V(VCC) 只3.3 v(不5 v !)
2 - GND 接地
3 -南加州爱迪生公司 可以是任何数字销。
4 - RST 可以是任何数字销。
5 - D / C 可以是任何数字销。
6 - DN(MOSI) 11 不能移动。
SCLK 十三 不能移动。
发光二极管 可以是任何PWM引脚。330Ω电阻在引脚之间。

限位电阻

把电阻串联与数据信号是一种廉价的,以及给3.3V线路增加一些保护的简单方法。如果你有一个Arduino Uno(或类似的5V’duino)和一些10kΩ和1kΩ的电阻,试试这个:

通过电阻器连接

这些引脚与上述示例中的连接相同,然而,每个信号具有内线电阻。有10KΩSCLK之间的电阻,DN,D / C,和RST引脚。一1KΩSCE和引脚7之间的电阻。并且330Ω电阻器保持在引脚9和LED引脚之间。

电平转换器

最后,第三种连接方式是使用实际电平转换器在5V到3.3V之间切换。像这样的板双向逻辑电平转换器以及TXB0104非常适合做这样的事情。

电平移位器示例

不幸的是,LCD具有五个3.3V信号输入,电平移位器只有四个通道。如果你想保持一个移动装置的电路,你可以永久的领带RST高(通过10kΩ电阻器)并通过移位器运行其他信号。您失去了远程重置功能,但剩下的控制仍然存在。

查看这些板的连接指南,以获得更多帮助,在Arduino和LCD之间转换信号。

示例代码1:LCD演示

硬件都连接好了,我们已经准备好上传草图并开始在LCD上绘图!!

草图

注:本示例假设您正在桌面上使用Arduino IDE的最新版本。如果这是你第一次使用Arduino,请检查我们的教程安装Arduino IDE。

下载,解压缩,开放的草图GitHub存储库

诺基亚5100 LCD例子例子草图(邮政编码)

下面是示例液晶控制代码的一个片段。这个草图的小插图展示了一系列图形驱动函数,字符绘制工具,以及帮助您开始使用LCD的其他有用功能。您将需要包括LCD-函数头在相同的目录中素描从下载的文件夹。否则,代码将不会编译上传Arduino时。

语言:c/*诺基亚5100LCD示例代码图形驱动程序和PCD8544接口代码为SparkFun的84x48图形LCD。亚博官网Jim Lindblom亚博官网改编自Nathan Seidle的代码,并用ColorLCDShield的代码混合在一起。日期:10月10日,2013年执照:官方,麻省理工学院执照。非正式地检查所包含的.e.md文件,Beerware。随时使用,重新使用,并根据需要修改此代码。如果你觉得有用,我们总有一天会见面的,你可以给我买一杯啤酒。这个包罗万象的草图将展示一系列的图形功能,像画线,圈子,广场、和文本。然后进入串行监视器回波模式,您可以在串行监视器中键入文本,它会显示在液晶显示器上。这些东西都可以放到一个图书馆,但我们想把它们放在一个草图里,尽可能地保持透明。硬件:(注意这些引脚的大部分可以互换)图形LCD引脚------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------MOSI)------------------------------------------------------------------------------------------------------------------------------------------------------------------------DN(MOSI),必须留在原地,但是其他的插脚可以互换。LED管脚应该保持PWM能力。别忘了把限流电阻插在LCD的LED引脚和Ardino引脚9之间!**
           
            “包括”LCD_Functions.h”/*这个数组与displayMap的大小相同。我们将使用这个例子来说明如何绘制位图。xkcd漫画转置是一个优秀的显示应用。参见:http://xkcd.com/149/*/static const char xkcdSandwich[504]PROGMEM={0xFF,0x8D,0x9F,0x13,0x13,0 xf3,0 x01,0 x01,0xF9,0xF9,0 x01,0x81.0xF9,0xF9,0 x01,0xF1,0xF9,0x090x090xFF,0xFF,0xF1,0xF9,0x090x090xF9,0xF1,0 x01,0 x01,0 x01,0 x01,0 x01,0xF9,0xF9,0x090xF9,0x090xF9,0xF1,0 x01,0 xc1之前,0xe9,0x29,0x29,0xF9,0xF1,0 x01,0xFF,0xFF,0 x71,0xD9,0 x01,0 x01,0xF1,0xF9,0x29,0x29,0xB9,0xB1,0 x01,0 x01,0 x01,0xF1,0xF1,0x11,0xF1,0xF1,0xF1,0xE1,0 x01,0xE1,0xF1,0 x510 x510 x71,0x61,0 x01,0 x01,0 xc1之前,0xF1,0x31,0x31,0xF1,0xFF,0xFF,0x00,0 x01,0 x01,0 x01,0 x01,0x60,0xE0,0 xa0,0 x01,0 x01,0x81.0xE1,0x61,0x60,0 xc0,0 x01,0xE1,0xE1,0 x21,0 x21,0xE0,0 xc1之前,0 x01,0 xc1之前,0xE1,0x20,0x20,0xFC,0xFC,0xE0,0xE0,0 xc1之前,0xE1,0xE0,0 xc1之前,0xE0,0xE1,0 x01,0xFC,0xFC,0 x21,0 x21,0xE1,0 xc1之前,0xE5,0 xe4,0 x01,0 xc1之前,0xE0,0x20,0 x21,0x20,0x00,0 x01,0xFD,0xFD,0 x21,0x20,0xE0,0x00,0x00,0 x01,0 x01,0 xc0,0x61,0x31,0x31,0 x21,0x20,0 xc0,0x81.0 x01,0 x01,0 x01,0x00,0x00,0x00,0x00,0 x01,0 x01,0 x01,0 x01,0xFF,0xFF,0x00,0x00,0x00,0x00,0 x01,0x030x020x030 x01,0x00,0 x01,0x030 xf2,0x1a,0x0b,0x080x0b,0x1b,0x10,0x60,0xe3,0x030x00,0 x01,0x030x020x020x030x030x00,0x030x030x00,0x00,0x030x030x00,0x00,0x030x030x00,0x00,0x030x030x030x030x00,0 x01,0x030x020x020x030 x01,0x00,0x030x030x00,0x00,0x030x00,0x00,0x00,0 x3e,0x63,0x80,0x80,0x80,0x80,0x60,0x3f,0x070x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFe0 x01,0 x01,0 x01,0x020x030 x3e,0xE8,0xF8,0xF0,0 xd0,0x90,0x18,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 xc0,0x38,0xFF,0x0C,0x38,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xF0,0x00,0x00,0x00,0x00,0x00,0x33,0x5f,0 x8f,0x84-0x050x070 x06,0x0C,0 x0e,0 x0e,0x0C,0x14,0 x34,0 x68,0 x88,0xD8,0x70,0x00,0x00,0x00,0x00,0x00,0xE0,0x10,0x10,0x10,0xF0,0xE0,0x00,0xF0,0xF0,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x80,0x80,0x00,0x80,0x00,0x00,0x20,0x38,0 x0e,0 x01,0 xc0,0x3f,0xE0,0x00,0x00,0x030 x0e,0x080x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xB6,0中,0 xc0,0 xc0,0 xc0,0xE0,0 xa0,0 xa0,0 xa0,0 xa0,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xE1,0xE1,0 xc1之前,0 xef,0xBB,0x83.0 x86,0 x88,0xB0,0x80,0x80,0x80,0 x8f,0x90,0x90,0x90,0x9F,0 x8f,0x80,0x9F,0x9F,0 x87,0x8D,0x98,0x80,0x8C,0x9e,0x92,0x92,0x9F,0 xc0,0xC7,0xFF,0xB8,0 x8f,0x80,0x90,0x90,0 xc0,0xF0,0x8e,0x81.0x80,0x81.0 x8f,0xB8,0xE0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFF,};void setup(){Serial.begin(9600);LCDSnk();/ /这将设置我们的针,以及初始化LCD updateDisplay();/ / displayMap不变,SFE标志设置对比度(40);/ /好值的范围从-延迟(2000);lcdFunTime();//运行一个30秒的图形函数演示//等待串行输入,然后清除显示,并返回(!Serial..());clearDisplay(白色);updateDisplay();}//Loop将显示转换为本地串行监视器echo.//从串行监视器输入Arduino,,它会呼应/ /你类型显示。键入~以清除display.void.(){static int cursorX=0;静态int游标Y=0;如果(Serial..()){char c=Serial.read();开关(c){案例“\ n”: / /新行粗略+ = 8;断裂;case'r': //Return feed cursorX=0;断裂;case'~': //.~来清除屏幕。clearDisplay(白色);updateDisplay();CurSOX=0;//重置光标,光标Y=0;断裂;default: setChar(c,科罗索草率的,黑色);updateDisplay();CURSORX+=6;//递增光标中断;}//管理光标if(cursorX>=(LCD_WIDTH-4)){//如果下一个字符将离开屏幕...CurSOX=0;/ /……重置x到0…粗略+=8;//...并递增到下一行。如果(粗略> = (LCD_HEIGHT - 7)){/ /如果下一行把我们从屏幕上……粗略=0;/...回到顶部。}}}/*此函数充当以下图形驱动函数的有趣演示。*/void lcdFunTime(){clearDisplay(WHITE);//通过清除显示器随机种子开始(模拟读取(A0));* / / * setPixel例子const int pixelCount = 100;对于(int i=0);我
            
             =0;i-=5){模拟写入(blPin,i);//blPin连接到BL LED延迟(20);}(int i = 0;I<256;我+ = 5){analogWrite (blPin,i);延迟(20);}}/*setRect.*/clearDisplay(白色);/ /重新开始/ / setRect需要6参数(x0,y0,X1,y0,填充,bw) / / x0,y0,X1,y0是两个对角线角坐标//fill是布尔值,决定是否/ /填充矩形。bw确定颜色0=白色,1=黑色。对于(int x=0);X
             
            
           

为了帮助理解草图,检查代码中的注释。大多数操作发生在LCDFunTimeTIME()功能。

草图在行动

一旦上传到您的Arduino,草图将开始运行演示-一组基本的动画和图形功能。开始,我们会画一些随机的像素在屏幕上到处都是星星…”)然后我们将转到绘图示例线,,矩形,和圈子。贯穿始终,都有绘图示例文字。最后演示关闭一个致敬黑白漫画它似乎非常适合这个小单色液晶。

三明治例子

这是一个在屏幕上绘制位图的演示程序,这是“duino/LCD组合”可以完成的更有价值的任务之一。

演示运行完毕后,草图将进入串行回波模式。打开串行监视器(将波特率设置为9600bps),把东西打到阿杜伊诺。它应该开始打印您发送到LCD上的所有内容。


如果你对在屏幕上绘制位图的可能性感兴趣,看看下一页!我们将向您展示如何导入自己的84x48位图并在屏幕上绘制它。

示例代码2:绘制位图

如果过去演示你迫不及待钻头设计了自己的84年x48位图并显示,继续阅读这个例子。我们将向您展示如何缩放和导入位图,然后编译成Arduino代码并发送到LCD,所以你可以有你自己的,狡猾的图形。

替换文本

找到一个位图/制造/修改

开始,找到要打印到LCD的位图图像。84x48单色像素不能给你一个许多房间,但是你仍然可以在那里找到一些有趣的东西。这里有几个例子:

RTFM实例 阿杜诺示例 弯曲实例 火焰实例 XKCD实例

在你选择了一个图像之后,你需要按摩它使它两者都合适单色的(2位颜色)和84 x 48像素。大多数标准的图像编辑器可以为此提供帮助。对于Windows用户,,油漆就是缩放图像所需的全部内容。然后将其保存为单色位图。

将位图转换为数组

下一步是将常规图像文件转换成504字节数组,其中烧焦s。有很多项目,可以为此提供帮助。我们推荐液晶助理

要在LCD助理中加载图像,去文件>加载图片。一个预览图像的应该开放,确保它的大小是正确的-84像素宽,48像素高。还要确保字节取向设置为垂直的以及尺寸连续性设置为。其余的默认设置(8像素/字节,等)应该已经正确设置:

LCD辅助设置

然后去文件>节省输出生成临时文本文件。打开那个文本文件看看你闪亮的新数组。您需要修改类型数组的烧焦(不)未签名的常量)还要确保数组具有适当的命名约定(没有破折号,不要从数字开始,等等)。

导入草图并绘制!!

创建该数组之后,复制整个表Arduino草图。使用相同的草图例1。随便粘贴数组。现在,考验你的画画,替换设置()循环()在具有以下内容的最后示意图中(确保其余函数和变量保留在示意图中):

language:c// ...LCD definitions,变量,以及上面定义的位图数组.void setup(){lcdBegin();/ /这将设置我们的针,初始化LCD setContrast(60);//良好值范围为40-60 setBitmap(flameBitmap);//flameBitmap应该替换为BMP数组updateDisplay()的名称;//更新显示以使数组显示。}void.(){}//LCD控件和下面定义的图形函数…

好玩的东西!现在可以覆盖文本,或者在位图上绘制。您甚至可以尝试导入多个图形来创建动画!!

资源与进一步发展

谢谢你观赏我们的单色84 x 48图形LCD联播指南!如果需要其他资源来启动和运行LCD,这里有一些方便的地方可看:

走得更远

现在你已经控制了图形LCD,你可以嵌入到各种很酷的项目。亚博官网如果你需要一些灵感,以下是一些相关的教程来帮助您:

  • OLED显示挂机指南,而不是一个液晶显示器,这OLED提供了一个很好的,向项目显示清晰的文本。亚博官网
  • MP3播放器屏蔽音乐盒–这个MP3播放器音乐盒可以通过一个甜美的图形显示很好地服务。嗯…
  • ITG-3200挂车指南itg - 3200是一个平台硬件陀螺仪传感器。该显示器可用于创建视觉角速度计。