弘毅 发表于 2011-8-24 20:15:46

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写的更好的汉子内码转换工具



iamhuibao 发表于 2016-9-27 18:03:45

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>
}

改成这样, 可用,(已测)

弘毅 发表于 2011-10-25 11:13:13

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,需要接对比度调节电阻,这样才能显示。你的有背光,但是无显示,会不会是因为对比度电阻问题。

弘毅 发表于 2011-10-25 09:24:14

hunduncn 发表于 2011-10-24 23:29 static/image/common/back.gif
UNO 的SPI pin 好像不是 8、9pin 吧。

额。。。还米用uno这么新的板子,偶用的老的。。。可以官网查查uno的SPI是不是8,9

悠然小调 发表于 2011-8-27 20:51:27

有了这个库真是方便啊

hunduncn 发表于 2011-10-24 23:29:08

UNO 的SPI pin 好像不是 8、9pin 吧。

hunduncn 发表于 2011-10-25 10:59:32

弘毅 发表于 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;

但是还是不能显示。(背光灯有亮)

hunduncn 发表于 2011-10-25 11:03:26

弘毅 发表于 2011-10-25 09:24 static/image/common/back.gif
额。。。还米用uno这么新的板子,偶用的老的。。。可以官网查查uno的SPI是不是8,9

你是用 arduino duemilanove 2009 吗? 2009 的SPI好像也是跟UNO一样的呀。

弘毅 发表于 2011-10-25 11:04:56

hunduncn 发表于 2011-10-25 11:03 static/image/common/back.gif
你是用 arduino duemilanove 2009 吗? 2009 的SPI好像也是跟UNO一样的呀。

我用的arduino duemilanove 2009 。。。可以直接用。。。视屏为证。。。

hunduncn 发表于 2011-10-25 11:07:01

弘毅 发表于 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呢。

hunduncn 发表于 2011-10-25 11:39:29

弘毅 发表于 2011-10-25 11:13 static/image/common/back.gif
根据库里的接线要求,这个库也是别处找的,按照库里的要求这样接上2009就直接可以用。对了。。。忘了说了 ...

我现在接了你图中的针脚8、9、3.就可以用了。但是有个疑问 明明是spi接口的。怎么会接8、9、3引脚呢。奇怪了。

弘毅 发表于 2011-10-25 12:11:59

hunduncn 发表于 2011-10-25 11:39 static/image/common/back.gif
我现在接了你图中的针脚8、9、3.就可以用了。但是有个疑问 明明是spi接口的。怎么会接8、9、3引脚呢。奇怪 ...

介个介个。。。。求解答。。我也不知道@@

hunduncn 发表于 2011-10-27 20:51:26

弘毅 发表于 2011-10-25 12:11 static/image/common/back.gif
介个介个。。。。求解答。。我也不知道@@

我觉得这款12864的spi 不是真正的SPI标准。只是模拟的而已。你觉得呢。

弘毅 发表于 2011-10-28 14:21:09

hunduncn 发表于 2011-10-27 20:51 static/image/common/back.gif
我觉得这款12864的spi 不是真正的SPI标准。只是模拟的而已。你觉得呢。

标准的12864都是这样子的。。不是针对个别某款12864产品,具体的是不是真是的SPI,这个还得等高手解答~~

shyjdn 发表于 2011-11-10 10:50:15

非常感謝,以後會經常到此一遊,看看有什麽新的資料,學習學習!謝謝版主!

GIOCHEN 发表于 2011-11-14 21:34:08

请教一下,出来乱码 是 什么问题?谢谢
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: arduino学习笔记15 - 12864液晶实验