[Arduino] Nokia 5110 液晶屏

Nokia 5110可谓是相~ 当~ 经典了,你可以用它来打电话、砸核桃、挡子弹、锤钉子,居家防身,良心佳品~= ̄ω ̄=
它的屏幕因为某宝上只买八块八,八块八啊~ 物美价廉,受到广大青少年的追捧~

广告位招租

技术参数

  • 分辨率: 84 * 48
  • 通信协议: SPI
  • 液晶模块: LPH7366
  • 主控芯片: PCD8544
  • 传送速率: 最高4Mbits/s
  • 工作电压: 3.3v ~5.0v
  • 工作电流: ≤ 200μA

电路连接

Nokia 5110的屏幕使用的是SPI协议,但使用我图片中的屏幕模块,除了需要连接SPI的4条信号线外,还需要另外连接一个RST(重置)和BL(背光)。

Nokia 5110屏幕模块有下列引脚:

  • VCC,电源,输入3.3v ~5v
  • GND,公共接地,提供参考低电平
  • BL,屏幕背光,高电平时点亮,低电平时熄灭
  • DIN,SPI的MISO脚,向
  • DC,DATA/CMD,数据/指令选择,高电平时总线上传送数据,低电平时总线上传送控制指令
  • CLK,SPI的时钟脚
  • CE,SPI的片选脚,低电平时,单片机可对此设备读写,高电平时挂起此设备的通信
  • RST,重置屏幕
其死我是拒绝放这个图的,怎么都是蜘蛛网~🕸

上面的电路图太乱太难看,要理清的话,一半脑细胞都可以住进精神病院了。总之Nokia 5110的屏幕是SPI通信的,参考SPI的连接方法就对了。


SPI接线图

指令集

  • 空操作

    操作位 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 DC
    位值 0 0 0 0 0 0 0 0 0

    用于延时的空操作指令,没有任何作用

  • 写像素数据

    操作位 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 DC
    位值 D7 D6 D5 D4 D3 D2 D1 D0 1

    填充像素数据块,直接把数据写入液晶屏的GRAM中

  • 功能设置

    操作位 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 DC
    位值 0 0 1 0 0 EN VH IS 0
    • EN为屏幕开启开关:1 = 开启屏幕, 0 = 关闭屏幕
    • VH,寻址方式选择: 1 = 使用垂直寻址, 0 = 使用水平寻址
    • IS,指令集选择:1 = 使用扩展指令集, 0 = 使用扩基本指令集
  • 基本指令集

    • 显示设置

      操作位 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 DC
      位值 0 0 0 0 1 D 0 E 0
      • (D, E),显示方式枚举:(0, 0) = 显示空白, (0, 1) = 显示全黑,(1, 0) = 普通模式,(1, 1) = 翻色显示
    • 游标设置:GRAM写入起点X坐标,这里的X是以列(COLUMN)为单位

      操作位 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 DC
      位值 0 1 D5 D4 D3 D2 D1 D0 0
    • 游标设置:GRAM写入起点Y坐标,这里的Y是以页面(PAGE)为单位

      操作位 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 DC
      位值 0 1 0 0 0 D2 D1 D0 0
  • 扩展指令集

    • 温度系数

      操作位 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 DC
      位值 0 0 1 0 0 1 D1 D0 0
      • (D1, D0),显示方式枚举:(0, 0) = 温度系数0, (0, 1) = 温度系数1,(1, 0) = 温度系数2,(1, 1) = 温度系数3
      • 这是用来干嘛用的~(←_←)
    • 偏置混合率

      操作位 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 DC
      位值 0 0 0 1 0 D2 D1 D0 0
      • (D2, D1, D0), 偏置混合率:
        • (0, 0, 0) = 1:100
        • (0, 0, 1) = 1:80
        • (0, 1, 0) = 1:65
        • (0, 1, 1) = 1:48
        • (1, 0, 0) = 1:40/1:34
        • (1, 0, 1) = 1:24
        • (1, 1, 0) = 1:18/1:16
        • (1, 1, 1) = 1:10/1:9/1:8
    • 操作电压

      操作位 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 DC
      位值 0 D6 D5 D4 D3 D2 D1 D0 0
      • (D6, D5, D4, D3, D2, D1, D0)为操作电压的系数
      • LCD偏置电压根据(D6, D5, D4, D3, D2, D1, D0)计算得值为

        VLCD = 3.06 + 0.06 * VOP = 3.06 + 0.06 * (D6, D5, D4, D3, D2, D1, D0)2

初始化流程

  • 拉低RST脚500ms,以重置屏幕
  • 使用扩展指令
    • 设置偏置混合率为4 = (1, 0, 0)2 = 1:40/1:34
    • 设置操作电压VOP40 = 5.46v,用以调节对比度
  • 使用基本指令集
    • 设置显示模式为普通模式
    • 设置游标X到0
    • 设置游标Y到0
    • 84 * 48 / 8个字节的0x00,以清屏

上面的初始化流程中给出了一些默认值,在实际使用的过程中,因为模块的不同,这些参数可能需要重新调整才能获得理想的显示效果

编码实现

我们使用Arduino的硬件SPI接口来和屏幕通信,所以我们需要使用Arduino内建的SPI库

初始化

#include <SPI.h>
#defineRST 15
#defineCE  10
#defineDC  12
#defineDIN 11
#defineCLK 13
#defineBL  16

#define INSTRUCTIONSET 0x20
#define INST_NORMAL    0x00
#define INST_EXTENDED  0x01
#define SETBIAS        0x10
#define SETVOP         0x80
#define DISPLAYCONTROL 0x08
#define DISP_BLANK     0x00
#define DISP_BLACK     0x01
#define DISP_NORMAL    0x04
#define DISP_INVERT    0x05
#define SET_CURSOR_X   0x08
#define SET_CURSOR_Y   0x04

const int bias     = 4;
const int contrast = 40;
byte buffer[84 * 48 / 8];

void setup() {
    // 初始化SPI
    SPI.begin();
    SPI.setClockDivider(SPI_CLOCK_DIV4); // 4MHz
    SPI.setDataMode(SPI_MODE0);
    SPI.setBitOrder(MSBFIRST);

    // 初始化其他控制引脚
    pinMode(DC, OUTPUT);
    pinMode(RST, OUTPUT);
    pinMode(CE, OUTPUT);

    // 重置屏幕
    digitalWrite(RST, LOW);
    delay(500);
    digitalWrite(RST, HIGH);

    // 进入扩展指令集
    command(INSTRUCTIONSET | EXTENDED);
    // 设置偏置混合率
    command(SETBIAS | bias);
    // 设置偏置电压V~OP~
    command(SETVOP | contrast);

    // 进入基础指令
    command(INSTRUCTIONSET | NORMAL);
    // 设置正常显示模式
    command(DISPLAYCONTROL | DISPLAYNORMAL);
    // 设置游标(0, 0) = (column, page)
    command(SET_CURSOR_X | 0);
    command(SET_CURSOR_Y | 0);
    // 写入清屏数据
    memset(buffer, 0, 84 * 48 / 8);
    writeGram(buffer, 84 * 48 / 8);
}

写指令

#include <SPI.h>
#define RST 15
#define CE  10
#define DC  12
#define DIN 11
#define CLK 13
#define BL  16

void command(byte cmd) {
    digitalWrite(DC, LOW);
    digitalWrite(CE, LOW);
    SPI.transfer(cmd);
    digitalWrite(CE, HIGH);
}

写数据

#include <SPI.h>
#define RST 15
#define CE  10
#define DC  12
#define DIN 11
#define CLK 13
#define BL  16

void data(byte data) {
    digitalWrite(DC, HIGH);
    digitalWrite(CE, LOW);
    SPI.transfer(cmd);
    digitalWrite(CE, HIGH);
}

void writeGram(byte* buffer, int size) {
    digitalWrite(DC, HIGH);
    digitalWrite(CE, LOW);
    for (int i = 0; i < size; i++) {
         SPI.transfer(buffer[i]);
    }
    digitalWrite(CE, HIGH);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  • 8086汇编 本笔记是笔者观看小甲鱼老师(鱼C论坛)《零基础入门学习汇编语言》系列视频的笔记,在此感谢他和像他一样...
    Gibbs基阅读 37,106评论 8 114
  • SPI通信实验 SPI简介 串行外设接口(Serial Peripheral Interface Bus,SPI)...
    btskyrmb阅读 9,365评论 1 12
  • 1、嵌入式系统的定义 (1)定义:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本...
    荣卓然阅读 1,795评论 0 5
  • 201. M-Q型显影液组合是()。 (2.0 分) A. 米吐尔与菲尼酮的组合 B. 对苯二酚和菲尼酮的组合 C...
    我们村我最帅阅读 3,306评论 0 4
  • 昨晚跟小妾说,以后要每日一文,那时的我真的是自信满满,他还给我竖起了大拇指。但没想到,今晚开完会回来整个人就特别累...
    彬彬有礼的学霸宝阅读 299评论 0 0