arduino学习笔记15 - 12864液晶实验
注意:1.0或者更高级版本IDE使用的库与002X IDE使用的库是不一样的,需要根据不同的IDE下载不同的库。(帖子尾部有附件下载)12864是128*64点阵液晶模块的点阵数简称,业界约定俗成的简称。
控制芯片一般采用ST7920或者与之相兼容的。
数据总线采用8位并口与SPI串口方式。
12864液晶分带字库版本与不带字库版本。
字库版不需要用点阵生成器把汉字变成点阵后再输入,直接输入汉字内码即可显示出对应汉字,无字库版想要显示汉字,只能自己按照点阵方式驱动。
下图就是12864液晶实物。
下图是arduino与12864液晶SPI连接方式的硬件连接图
SPI连接方式驱动代码/*
LCDArduino
PIN1 = GND
PIN2 = 5V
RS(CS) = 8;
RW(SID)= 9;
EN(CLK) = 3;
PIN15 PSB = GND;
*/
#include "LCD12864RSPI.h"
#define AR_SIZE( a ) sizeof( a ) / sizeof( a )
unsigned char show0[]={0xBC,0xAB,0xBF,0xCD,0xB9,0xA4,0xB7,0xBB};//极客工坊
unsigned char show1[]="geek-workshop";
unsigned char logo0[]={ //笑脸
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,0x01,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,
0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x03,0xFE,0x00,
0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,
0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x00,
0x01,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x00,
0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,
0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0xF0,0x00,0x00,
0x00,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x03,0xE0,0x00,0x00,
0x00,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x07,0xC0,0x00,0x00,
0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,
0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,
0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,
0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,
0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x38,0x00,0x40,0x00,
0x00,0x80,0x1C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x78,0x03,0xF8,0x00,
0x07,0xF0,0x1E,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x70,0x07,0xFE,0x00,
0x0F,0xFC,0x0E,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xF0,0x1F,0xBF,0x00,
0x3F,0x7E,0x0F,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xE0,0x3E,0x0F,0x80,
0x7C,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xE0,0x7C,0x07,0xC0,
0xF8,0x0F,0x87,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xE0,0xF8,0x01,0xE1,
0xF0,0x03,0xC3,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xC0,0xF0,0x01,0xE1,
0xE0,0x03,0xC3,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xC0,0xE0,0x00,0xE1,
0xC0,0x01,0xC3,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,
0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,
0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,
0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,
0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,
0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,
0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,
0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xF0,0x00,0x0C,0x00,
0x0C,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x70,0x00,0x1E,0x00,
0x1E,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x78,0x00,0x1F,0x00,
0x3E,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x38,0x00,0x07,0x80,
0xF8,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x3C,0x00,0x03,0xE1,
0xF0,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x1E,0x00,0x01,0xFF,
0xE0,0x00,0x78,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0xFF,
0x80,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x3F,
0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,
0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x03,0xE0,0x00,0x00,
0x00,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0xF0,0x00,0x00,
0x00,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,
0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x00,
0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x00,
0x01,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x00,
0x07,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x03,0xFE,0x00,
0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,
0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,
0x80,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
};
void setup()
{
LCDA.Initialise(); // 屏幕初始化
delay(100);
}
void loop()
{
LCDA.CLEAR();//清屏
delay(100);
LCDA.DisplayString(0,2,show0,AR_SIZE(show0));//第一行第三格开始,显示文字极客工坊
delay(100);
LCDA.DisplayString(2,1,show1,AR_SIZE(show1));;//第三行第二格开始,显示文字geek-workshop
delay(5000);
LCDA.CLEAR();//清屏
delay(100);
LCDA.DrawFullScreen(logo0);
delay(5000);
}实验效果如下
http://player.youku.com/player.php/sid/XMjk4MTkyNjY0/v.swf
先来介绍一下怎样查找要输出地汉字的内码,打开汉字内码转换软件以后,点击转换就会显示出不同汉字对应的内码,比如"极"对应的内码是BCAB,那么给12864液晶发送的就是分为两段,0xBC与0xAB。这样就可以显示出极字了
本次实验使用12864液晶显示了一个笑脸图片,怎样显示任意图片呢?
先打开photoshop,新建文档,大小为128*64,位图
然后绘制出要现实的图案,比如这个笑脸,画好后保存。
然后打开取字模软件,先设置参数,如下图,主要是设置输出为C语言,大小为128*64,设置好后点击参数确定。
然后打开制作出来的图片,如果图片效果不是想要的白底黑字,参数里再重新设置下”黑白反取“
选择保存数据,跳出窗口,选择好路径进行保存。
保存出来的smile.h就是包含图片代码的文件,我们打开看一下,{ }括号中的内容,就是我们需要的。
一般使用SPI接法后,就很少使用8位接法了,因为占用端口太多了,但是还是放出来供大家学习下。
先上硬件连接图
下面的是8位接法的代码,使用了库文件。/*
LCDArduino
RS = 17; Analog Pin3
RW = 16; Analog Pin2
EN = 18; Analog Pin4
D0= 8;
D1= 9;
D2= 10;
D3= 11;
D4= 4;
D5= 5;
D6= 6;
D7= 7;
PIN15 PSB = 5V;
*/
#include "LCD12864R.h"
#define AR_SIZE( a ) sizeof( a ) / sizeof( a )
unsigned char show0[]={0xBC,0xAB,0xBF,0xCD,0xB9,0xA4,0xB7,0xBB};//极客工坊
unsigned char show1[]="geek-workshop";
void setup()
{
LCDA.Initialise(); // 屏幕初始化
delay(100);
}
void loop()
{
LCDA.CLEAR();//清屏
delay(100);
LCDA.DisplayString(0,2,show0,AR_SIZE(show0));//第一行第三格开始,显示文字极客工坊
delay(100);
LCDA.DisplayString(2,1,show1,AR_SIZE(show1));;//第三行第二格开始,显示文字geek-workshop
while(1);
}12864液晶产品手册
汉字内码转换软件
液晶图片取模软件
12864 SPI库文件(002X IDE使用)
12864 8位接法库文件(002X IDE使用)
补充1.0.1版本IDE使用的12864库
附上ardyPro写的更好的汉子内码转换工具
a631957482 发表于 2016-8-29 19:04
我是1.6.8不可用按你说的把那行删掉也不行是怎么回事
将库文件中的LCD12864RSPI.cpp中的开始部分改为如下:
#include "LCD12864RSPI.h"
#include <Arduino.h>
extern "C"
{
//#include <wiring.h>
#include <inttypes.h>
#include <stdio.h>//not needed yet
#include <string.h> //needed for strlen()
#include <avr/pgmspace.h>
}
改成这样, 可用,(已测)
hunduncn 发表于 2011-10-25 11:07 static/image/common/back.gif
如果你用的是2009 的话。那SPI接口 也是 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK)
你怎么会接 8、9、 ...
根据库里的接线要求,这个库也是别处找的,按照库里的要求这样接上2009就直接可以用。对了。。。忘了说了,你的12864显示的对比度电阻接了没?我的因为液晶是已经自带了对比度电阻,所以不需要自己再接。如果是普通12864,需要接对比度调节电阻,这样才能显示。你的有背光,但是无显示,会不会是因为对比度电阻问题。 hunduncn 发表于 2011-10-24 23:29 static/image/common/back.gif
UNO 的SPI pin 好像不是 8、9pin 吧。
额。。。还米用uno这么新的板子,偶用的老的。。。可以官网查查uno的SPI是不是8,9 有了这个库真是方便啊 UNO 的SPI pin 好像不是 8、9pin 吧。 弘毅 发表于 2011-10-25 09:24 static/image/common/back.gif
额。。。还米用uno这么新的板子,偶用的老的。。。可以官网查查uno的SPI是不是8,9
是的。UNO 的SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK)。我把LCD12864RSPI.h 头文件中的
static const int latchPin = 8;
static const int clockPin = 3;
static const int dataPin = 9;
改为
static const int latchPin = 10;
static const int clockPin = 13;
static const int dataPin = 11;
但是还是不能显示。(背光灯有亮)
弘毅 发表于 2011-10-25 09:24 static/image/common/back.gif
额。。。还米用uno这么新的板子,偶用的老的。。。可以官网查查uno的SPI是不是8,9
你是用 arduino duemilanove 2009 吗? 2009 的SPI好像也是跟UNO一样的呀。 hunduncn 发表于 2011-10-25 11:03 static/image/common/back.gif
你是用 arduino duemilanove 2009 吗? 2009 的SPI好像也是跟UNO一样的呀。
我用的arduino duemilanove 2009 。。。可以直接用。。。视屏为证。。。 弘毅 发表于 2011-10-25 11:04 static/image/common/back.gif
我用的arduino duemilanove 2009 。。。可以直接用。。。视屏为证。。。
如果你用的是2009 的话。那SPI接口 也是 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK)
你怎么会接 8、9、3呢。 弘毅 发表于 2011-10-25 11:13 static/image/common/back.gif
根据库里的接线要求,这个库也是别处找的,按照库里的要求这样接上2009就直接可以用。对了。。。忘了说了 ...
我现在接了你图中的针脚8、9、3.就可以用了。但是有个疑问 明明是spi接口的。怎么会接8、9、3引脚呢。奇怪了。 hunduncn 发表于 2011-10-25 11:39 static/image/common/back.gif
我现在接了你图中的针脚8、9、3.就可以用了。但是有个疑问 明明是spi接口的。怎么会接8、9、3引脚呢。奇怪 ...
介个介个。。。。求解答。。我也不知道@@ 弘毅 发表于 2011-10-25 12:11 static/image/common/back.gif
介个介个。。。。求解答。。我也不知道@@
我觉得这款12864的spi 不是真正的SPI标准。只是模拟的而已。你觉得呢。 hunduncn 发表于 2011-10-27 20:51 static/image/common/back.gif
我觉得这款12864的spi 不是真正的SPI标准。只是模拟的而已。你觉得呢。
标准的12864都是这样子的。。不是针对个别某款12864产品,具体的是不是真是的SPI,这个还得等高手解答~~ 非常感謝,以後會經常到此一遊,看看有什麽新的資料,學習學習!謝謝版主! 请教一下,出来乱码 是 什么问题?谢谢