设为首页收藏本站

极客工坊

 找回密码
 注册

只需一步,快速开始

查看: 131773|回复: 241

arduino学习笔记15 - 12864液晶实验

    [复制链接]
发表于 2011-8-24 20:15:46 | 显示全部楼层 |阅读模式
注意:1.0或者更高级版本IDE使用的库与002X IDE使用的库是不一样的,需要根据不同的IDE下载不同的库。(帖子尾部有附件下载)

12864是128*64点阵液晶模块的点阵数简称,业界约定俗成的简称。
控制芯片一般采用ST7920或者与之相兼容的。
数据总线采用8位并口与SPI串口方式。
12864液晶分带字库版本与不带字库版本。
字库版不需要用点阵生成器把汉字变成点阵后再输入,直接输入汉字内码即可显示出对应汉字,无字库版想要显示汉字,只能自己按照点阵方式驱动。

下图就是12864液晶实物。


IMGP0102_调整大小.JPG

下图是arduino与12864液晶SPI连接方式的硬件连接图

Snap7.jpg

IMGP0557_调整大小.JPG

SPI连接方式驱动代码
  1. /*
  2. LCD  Arduino
  3. PIN1 = GND
  4. PIN2 = 5V
  5. RS(CS) = 8;
  6. RW(SID)= 9;
  7. EN(CLK) = 3;
  8. PIN15 PSB = GND;
  9. */

  10. #include "LCD12864RSPI.h"
  11. #define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )

  12. unsigned char show0[]={0xBC,0xAB,0xBF,0xCD,0xB9,0xA4,0xB7,0xBB};//极客工坊
  13. unsigned char show1[]="geek-workshop";
  14. unsigned char logo0[]={                                         //笑脸
  15.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  16.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  17.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  18.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  19.       0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,
  20.       0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  21.       0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,
  22.       0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  23.       0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,
  24.       0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  25.       0x00,0x00,0x00,0x00,0x00,0x03,0xFE,0x00,
  26.       0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
  27.       0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,
  28.       0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
  29.       0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x00,
  30.       0x01,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,
  31.       0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x00,
  32.       0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,
  33.       0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,
  34.       0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,
  35.       0x00,0x00,0x00,0x00,0x01,0xF0,0x00,0x00,
  36.       0x00,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,
  37.       0x00,0x00,0x00,0x00,0x03,0xE0,0x00,0x00,
  38.       0x00,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,
  39.       0x00,0x00,0x00,0x00,0x07,0xC0,0x00,0x00,
  40.       0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,
  41.       0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,
  42.       0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,
  43.       0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,
  44.       0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,
  45.       0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,
  46.       0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,
  47.       0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,
  48.       0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,
  49.       0x00,0x00,0x00,0x00,0x38,0x00,0x40,0x00,
  50.       0x00,0x80,0x1C,0x00,0x00,0x00,0x00,0x00,
  51.       0x00,0x00,0x00,0x00,0x78,0x03,0xF8,0x00,
  52.       0x07,0xF0,0x1E,0x00,0x00,0x00,0x00,0x00,
  53.       0x00,0x00,0x00,0x00,0x70,0x07,0xFE,0x00,
  54.       0x0F,0xFC,0x0E,0x00,0x00,0x00,0x00,0x00,
  55.       0x00,0x00,0x00,0x00,0xF0,0x1F,0xBF,0x00,
  56.       0x3F,0x7E,0x0F,0x00,0x00,0x00,0x00,0x00,
  57.       0x00,0x00,0x00,0x00,0xE0,0x3E,0x0F,0x80,
  58.       0x7C,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,
  59.       0x00,0x00,0x00,0x00,0xE0,0x7C,0x07,0xC0,
  60.       0xF8,0x0F,0x87,0x00,0x00,0x00,0x00,0x00,
  61.       0x00,0x00,0x00,0x01,0xE0,0xF8,0x01,0xE1,
  62.       0xF0,0x03,0xC3,0x80,0x00,0x00,0x00,0x00,
  63.       0x00,0x00,0x00,0x01,0xC0,0xF0,0x01,0xE1,
  64.       0xE0,0x03,0xC3,0x80,0x00,0x00,0x00,0x00,
  65.       0x00,0x00,0x00,0x01,0xC0,0xE0,0x00,0xE1,
  66.       0xC0,0x01,0xC3,0x80,0x00,0x00,0x00,0x00,
  67.       0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,
  68.       0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,
  69.       0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
  70.       0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
  71.       0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
  72.       0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
  73.       0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
  74.       0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
  75.       0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
  76.       0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
  77.       0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
  78.       0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
  79.       0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
  80.       0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
  81.       0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
  82.       0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
  83.       0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
  84.       0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
  85.       0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
  86.       0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
  87.       0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
  88.       0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
  89.       0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,
  90.       0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,
  91.       0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,
  92.       0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,
  93.       0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,
  94.       0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,
  95.       0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,
  96.       0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,
  97.       0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,
  98.       0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,
  99.       0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,
  100.       0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,
  101.       0x00,0x00,0x00,0x00,0xF0,0x00,0x0C,0x00,
  102.       0x0C,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,
  103.       0x00,0x00,0x00,0x00,0x70,0x00,0x1E,0x00,
  104.       0x1E,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,
  105.       0x00,0x00,0x00,0x00,0x78,0x00,0x1F,0x00,
  106.       0x3E,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,
  107.       0x00,0x00,0x00,0x00,0x38,0x00,0x07,0x80,
  108.       0xF8,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,
  109.       0x00,0x00,0x00,0x00,0x3C,0x00,0x03,0xE1,
  110.       0xF0,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,
  111.       0x00,0x00,0x00,0x00,0x1E,0x00,0x01,0xFF,
  112.       0xE0,0x00,0x78,0x00,0x00,0x00,0x00,0x00,
  113.       0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0xFF,
  114.       0x80,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,
  115.       0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x3F,
  116.       0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,
  117.       0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,
  118.       0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,
  119.       0x00,0x00,0x00,0x00,0x03,0xE0,0x00,0x00,
  120.       0x00,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,
  121.       0x00,0x00,0x00,0x00,0x01,0xF0,0x00,0x00,
  122.       0x00,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,
  123.       0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,
  124.       0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,
  125.       0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x00,
  126.       0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,
  127.       0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x00,
  128.       0x01,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,
  129.       0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x00,
  130.       0x07,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
  131.       0x00,0x00,0x00,0x00,0x00,0x03,0xFE,0x00,
  132.       0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
  133.       0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,
  134.       0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  135.       0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,
  136.       0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  137.       0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,
  138.       0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  139.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  140.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  141.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  142.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  143. };

  144. void setup()
  145. {
  146. LCDA.Initialise(); // 屏幕初始化
  147. delay(100);
  148. }

  149. void loop()
  150. {
  151. LCDA.CLEAR();//清屏
  152. delay(100);
  153. LCDA.DisplayString(0,2,show0,AR_SIZE(show0));//第一行第三格开始,显示文字极客工坊
  154. delay(100);
  155. LCDA.DisplayString(2,1,show1,AR_SIZE(show1));;//第三行第二格开始,显示文字geek-workshop
  156. delay(5000);
  157. LCDA.CLEAR();//清屏
  158. delay(100);
  159. LCDA.DrawFullScreen(logo0);
  160. delay(5000);
  161. }
复制代码
实验效果如下


先来介绍一下怎样查找要输出地汉字的内码,打开汉字内码转换软件以后,点击转换就会显示出不同汉字对应的内码,比如"极"对应的内码是BCAB,那么给12864液晶发送的就是分为两段,0xBC与0xAB。这样就可以显示出极字了

Snap1.jpg

本次实验使用12864液晶显示了一个笑脸图片,怎样显示任意图片呢?
先打开photoshop,新建文档,大小为128*64,位图


Snap5.jpg

然后绘制出要现实的图案,比如这个笑脸,画好后保存。

Snap6.jpg

然后打开取字模软件,先设置参数,如下图,主要是设置输出为C语言,大小为128*64,设置好后点击参数确定。

Snap4.jpg

然后打开制作出来的图片,如果图片效果不是想要的白底黑字,参数里再重新设置下”黑白反取“

Snap2.jpg

选择保存数据,跳出窗口,选择好路径进行保存。

Snap3.jpg

保存出来的smile.h就是包含图片代码的文件,我们打开看一下,{ }括号中的内容,就是我们需要的。

Snap8.jpg

一般使用SPI接法后,就很少使用8位接法了,因为占用端口太多了,但是还是放出来供大家学习下。

先上硬件连接图


Snap9.jpg

IMGP0567_调整大小.JPG

下面的是8位接法的代码,使用了库文件。
  1. /*
  2. LCD  Arduino
  3. RS = 17; Analog Pin3
  4. RW = 16; Analog Pin2
  5. EN = 18; Analog Pin4
  6. D0  = 8;
  7. D1  = 9;
  8. D2  = 10;
  9. D3  = 11;
  10. D4  = 4;
  11. D5  = 5;
  12. D6  = 6;
  13. D7  = 7;
  14. PIN15 PSB = 5V;
  15. */

  16. #include "LCD12864R.h"
  17. #define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )

  18. unsigned char show0[]={0xBC,0xAB,0xBF,0xCD,0xB9,0xA4,0xB7,0xBB};//极客工坊
  19. unsigned char show1[]="geek-workshop";

  20. void setup()
  21. {
  22. LCDA.Initialise(); // 屏幕初始化
  23. delay(100);
  24. }

  25. void loop()
  26. {
  27. LCDA.CLEAR();//清屏
  28. delay(100);
  29. LCDA.DisplayString(0,2,show0,AR_SIZE(show0));//第一行第三格开始,显示文字极客工坊
  30. delay(100);
  31. LCDA.DisplayString(2,1,show1,AR_SIZE(show1));;//第三行第二格开始,显示文字geek-workshop
  32. while(1);
  33. }
复制代码
12864液晶产品手册
hs12864-15.pdf (436.36 KB, 下载次数: 2908)
回复

使用道具 举报

发表于 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>
}

改成这样, 可用,(已测)
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2011-10-25 09:24:14 | 显示全部楼层
hunduncn 发表于 2011-10-24 23:29
UNO 的SPI pin 好像不是 8、9pin 吧。

额。。。还米用uno这么新的板子,偶用的老的。。。可以官网查查uno的SPI是不是8,9
回复 支持 0 反对 1

使用道具 举报

发表于 2011-8-27 20:51:27 | 显示全部楼层
有了这个库真是方便啊
回复 支持 反对

使用道具 举报

发表于 2011-10-24 23:29:08 | 显示全部楼层
UNO 的SPI pin 好像不是 8、9pin 吧。
回复 支持 反对

使用道具 举报

发表于 2011-10-25 10:59:32 | 显示全部楼层
弘毅 发表于 2011-10-25 09:24
额。。。还米用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 11:03:26 | 显示全部楼层
弘毅 发表于 2011-10-25 09:24
额。。。还米用uno这么新的板子,偶用的老的。。。可以官网查查uno的SPI是不是8,9

你是用 arduino duemilanove 2009 吗? 2009 的SPI好像也是跟UNO一样的呀。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-10-25 11:04:56 | 显示全部楼层
hunduncn 发表于 2011-10-25 11:03
你是用 arduino duemilanove 2009 吗? 2009 的SPI好像也是跟UNO一样的呀。


我用的arduino duemilanove 2009 。。。可以直接用。。。视屏为证。。。
回复 支持 反对

使用道具 举报

发表于 2011-10-25 11:07:01 | 显示全部楼层
弘毅 发表于 2011-10-25 11:04
我用的arduino duemilanove 2009 。。。可以直接用。。。视屏为证。。。

如果你用的是2009 的话。那SPI接口 也是 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK)

你怎么会接 8、9、3呢。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-10-25 11:13:13 | 显示全部楼层
hunduncn 发表于 2011-10-25 11:07
如果你用的是2009 的话。那SPI接口 也是 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK)

你怎么会接 8、9、 ...

根据库里的接线要求,这个库也是别处找的,按照库里的要求这样接上2009就直接可以用。对了。。。忘了说了,你的12864显示的对比度电阻接了没?我的因为液晶是已经自带了对比度电阻,所以不需要自己再接。如果是普通12864,需要接对比度调节电阻,这样才能显示。你的有背光,但是无显示,会不会是因为对比度电阻问题。
回复 支持 反对

使用道具 举报

发表于 2011-10-25 11:39:29 | 显示全部楼层
弘毅 发表于 2011-10-25 11:13
根据库里的接线要求,这个库也是别处找的,按照库里的要求这样接上2009就直接可以用。对了。。。忘了说了 ...

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

使用道具 举报

高级模式  
您需要登录后才可以回帖 登录 | 注册  

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )  

GMT+8, 2017-8-22 03:24 , Processed in 0.047372 second(s), 13 queries , File On.

Powered by Discuz! X3.3 Licensed

© 2001-2017 Comsenz Inc.

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