E-Paper Device (EPD) based MiniNote module, powered by mbed on LPC1114FBD48. Shared in public domain with enclosure in 3D step format, hardware interface compatible with microBUS interface. Anyone can contribute on this project.

Dependencies:   mbed _24LCXXX

E-Badge MiniNote Project on mbed/NXP LPC1114 platform

Committer:
allankliu
Date:
Sun Jun 01 00:47:23 2014 +0000
Revision:
0:33994cfad0c2
Child:
2:bb9f154ea2f4
Initial version, reuse code from lpc1114uart, ssd1306, previous code spd2706 and others.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
allankliu 0:33994cfad0c2 1
allankliu 0:33994cfad0c2 2 #include "mbed.h"
allankliu 0:33994cfad0c2 3 #include "ssd1606.h"
allankliu 0:33994cfad0c2 4 #include "image.h"
allankliu 0:33994cfad0c2 5
allankliu 0:33994cfad0c2 6 #include <stdarg.h>
allankliu 0:33994cfad0c2 7
allankliu 0:33994cfad0c2 8 const unsigned char init_data[]={
allankliu 0:33994cfad0c2 9 0x82,0x00,0x00,0x00,0xAA,0x00,0x00,0x00,
allankliu 0:33994cfad0c2 10 0xAA,0xAA,0x00,0x00,0xAA,0xAA,0xAA,0x00,
allankliu 0:33994cfad0c2 11 0x55,0xAA,0xAA,0x00,0x55,0x55,0x55,0x55,
allankliu 0:33994cfad0c2 12 0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
allankliu 0:33994cfad0c2 13 0xAA,0xAA,0xAA,0xAA,0x15,0x15,0x15,0x15,
allankliu 0:33994cfad0c2 14 0x05,0x05,0x05,0x05,0x01,0x01,0x01,0x01,
allankliu 0:33994cfad0c2 15 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
allankliu 0:33994cfad0c2 16 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
allankliu 0:33994cfad0c2 17 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
allankliu 0:33994cfad0c2 18 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
allankliu 0:33994cfad0c2 19 0x41,0x45,0xF1,0xFF,0x5F,0x55,0x01,0x00,
allankliu 0:33994cfad0c2 20 0x00,0x00,};
allankliu 0:33994cfad0c2 21
allankliu 0:33994cfad0c2 22
allankliu 0:33994cfad0c2 23 SSD1606::SSD1606(PinName cs, PinName rst, PinName dc, PinName clk, PinName busy, PinName data)
allankliu 0:33994cfad0c2 24 : _spi(data, NC, clk),
allankliu 0:33994cfad0c2 25 _cs(cs),
allankliu 0:33994cfad0c2 26 _reset(rst),
allankliu 0:33994cfad0c2 27 _dc(dc),
allankliu 0:33994cfad0c2 28 _busy(busy),
allankliu 0:33994cfad0c2 29 _cursor_x(0),
allankliu 0:33994cfad0c2 30 _cursor_y(0)
allankliu 0:33994cfad0c2 31 {
allankliu 0:33994cfad0c2 32 }
allankliu 0:33994cfad0c2 33
allankliu 0:33994cfad0c2 34 void SSD1606::reset()
allankliu 0:33994cfad0c2 35 {
allankliu 0:33994cfad0c2 36 _reset = 1;
allankliu 0:33994cfad0c2 37 wait(0.01);
allankliu 0:33994cfad0c2 38 _reset = 0;
allankliu 0:33994cfad0c2 39 wait(0.01);
allankliu 0:33994cfad0c2 40 _reset = 1;
allankliu 0:33994cfad0c2 41 wait(0.01);
allankliu 0:33994cfad0c2 42 }
allankliu 0:33994cfad0c2 43
allankliu 0:33994cfad0c2 44 void SSD1606::initialize()
allankliu 0:33994cfad0c2 45 {
allankliu 0:33994cfad0c2 46 reset();
allankliu 0:33994cfad0c2 47 _send_command(0x10);
allankliu 0:33994cfad0c2 48 _send_data(0x00);
allankliu 0:33994cfad0c2 49 #ifdef MODE3
allankliu 0:33994cfad0c2 50 _send_command(0x11);
allankliu 0:33994cfad0c2 51 _send_data(0x03);
allankliu 0:33994cfad0c2 52 _send_command(0x44);
allankliu 0:33994cfad0c2 53 _send_data(0x00);
allankliu 0:33994cfad0c2 54 _send_data(0x11);
allankliu 0:33994cfad0c2 55 _send_command(0x45);
allankliu 0:33994cfad0c2 56 _send_data(0x00);
allankliu 0:33994cfad0c2 57 _send_data(0xAB);
allankliu 0:33994cfad0c2 58 _send_command(0x4E);
allankliu 0:33994cfad0c2 59 _send_data(0x00);
allankliu 0:33994cfad0c2 60 _send_command(0x4F);
allankliu 0:33994cfad0c2 61 _send_data(0x00);
allankliu 0:33994cfad0c2 62 #endif
allankliu 0:33994cfad0c2 63 #ifdef MODE2
allankliu 0:33994cfad0c2 64 _send_command(0x11);
allankliu 0:33994cfad0c2 65 _send_data(0x02);
allankliu 0:33994cfad0c2 66 _send_command(0x44);
allankliu 0:33994cfad0c2 67 _send_data(0x11);
allankliu 0:33994cfad0c2 68 _send_data(0x00);
allankliu 0:33994cfad0c2 69 _send_command(0x45);
allankliu 0:33994cfad0c2 70 _send_data(0x00);
allankliu 0:33994cfad0c2 71 _send_data(0xAB);
allankliu 0:33994cfad0c2 72 _send_command(0x4E);
allankliu 0:33994cfad0c2 73 _send_data(0x11);
allankliu 0:33994cfad0c2 74 _send_command(0x4F);
allankliu 0:33994cfad0c2 75 _send_data(0x00);
allankliu 0:33994cfad0c2 76 #endif
allankliu 0:33994cfad0c2 77 #ifdef MODE1
allankliu 0:33994cfad0c2 78 _send_command(0x11);
allankliu 0:33994cfad0c2 79 _send_data(0x01);
allankliu 0:33994cfad0c2 80 _send_command(0x44);
allankliu 0:33994cfad0c2 81 _send_data(0x00);
allankliu 0:33994cfad0c2 82 _send_data(0x11);
allankliu 0:33994cfad0c2 83 _send_command(0x45);
allankliu 0:33994cfad0c2 84 _send_data(0xAB);
allankliu 0:33994cfad0c2 85 _send_data(0x00);
allankliu 0:33994cfad0c2 86 _send_command(0x4E);
allankliu 0:33994cfad0c2 87 _send_data(0x00);
allankliu 0:33994cfad0c2 88 _send_command(0x4F);
allankliu 0:33994cfad0c2 89 _send_data(0xAB);
allankliu 0:33994cfad0c2 90 #endif
allankliu 0:33994cfad0c2 91 #ifdef MODE0
allankliu 0:33994cfad0c2 92 _send_command(0x11);
allankliu 0:33994cfad0c2 93 _send_data(0x00);
allankliu 0:33994cfad0c2 94 _send_command(0x44);
allankliu 0:33994cfad0c2 95 _send_data(0x11);
allankliu 0:33994cfad0c2 96 _send_data(0x00);
allankliu 0:33994cfad0c2 97 _send_command(0x45);
allankliu 0:33994cfad0c2 98 _send_data(0xAB);
allankliu 0:33994cfad0c2 99 _send_data(0x00);
allankliu 0:33994cfad0c2 100 _send_command(0x4E);
allankliu 0:33994cfad0c2 101 _send_data(0x11);
allankliu 0:33994cfad0c2 102 _send_command(0x4F);
allankliu 0:33994cfad0c2 103 _send_data(0xAB);
allankliu 0:33994cfad0c2 104 #endif
allankliu 0:33994cfad0c2 105 _send_command(0xF0);
allankliu 0:33994cfad0c2 106 _send_data(0x1F);
allankliu 0:33994cfad0c2 107 _send_command(0x21);
allankliu 0:33994cfad0c2 108 _send_data(0x03);
allankliu 0:33994cfad0c2 109 _send_command(0x2C);
allankliu 0:33994cfad0c2 110 _send_data(0xA0);
allankliu 0:33994cfad0c2 111 _send_command(0x3C);
allankliu 0:33994cfad0c2 112 _send_data(0x63);
allankliu 0:33994cfad0c2 113 _send_command(0x22);
allankliu 0:33994cfad0c2 114 _send_data(0xC4);
allankliu 0:33994cfad0c2 115
allankliu 0:33994cfad0c2 116 set_lut();
allankliu 0:33994cfad0c2 117 }
allankliu 0:33994cfad0c2 118
allankliu 0:33994cfad0c2 119 unsigned char SSD1606::is_busy()
allankliu 0:33994cfad0c2 120 {
allankliu 0:33994cfad0c2 121 return(0);
allankliu 0:33994cfad0c2 122 }
allankliu 0:33994cfad0c2 123
allankliu 0:33994cfad0c2 124 void SSD1606::rom_image(const unsigned char *bitmap)
allankliu 0:33994cfad0c2 125 {
allankliu 0:33994cfad0c2 126 int i;
allankliu 0:33994cfad0c2 127 _send_command(0x24);
allankliu 0:33994cfad0c2 128
allankliu 0:33994cfad0c2 129 for (i=0; i <3096; i++)
allankliu 0:33994cfad0c2 130 _send_data(bitmap[i]);
allankliu 0:33994cfad0c2 131
allankliu 0:33994cfad0c2 132 _send_command(0x20);
allankliu 0:33994cfad0c2 133 wait(0.01);
allankliu 0:33994cfad0c2 134
allankliu 0:33994cfad0c2 135 }
allankliu 0:33994cfad0c2 136
allankliu 0:33994cfad0c2 137 void SSD1606::update()
allankliu 0:33994cfad0c2 138 {
allankliu 0:33994cfad0c2 139 for (int i=0; i<3096; i++)
allankliu 0:33994cfad0c2 140 _send_data(_screen[i]);
allankliu 0:33994cfad0c2 141 }
allankliu 0:33994cfad0c2 142
allankliu 0:33994cfad0c2 143 void SSD1606::off()
allankliu 0:33994cfad0c2 144 {
allankliu 0:33994cfad0c2 145 }
allankliu 0:33994cfad0c2 146
allankliu 0:33994cfad0c2 147 void SSD1606::sleep()
allankliu 0:33994cfad0c2 148 {
allankliu 0:33994cfad0c2 149 _send_command(0x10);
allankliu 0:33994cfad0c2 150 _send_data(0x01);
allankliu 0:33994cfad0c2 151 }
allankliu 0:33994cfad0c2 152
allankliu 0:33994cfad0c2 153 void SSD1606::set_command_between_images()
allankliu 0:33994cfad0c2 154 {
allankliu 0:33994cfad0c2 155 _send_command(0x22);
allankliu 0:33994cfad0c2 156 _send_data(0xC7);
allankliu 0:33994cfad0c2 157 _send_command(0x21);
allankliu 0:33994cfad0c2 158 _send_data(0x03);
allankliu 0:33994cfad0c2 159 }
allankliu 0:33994cfad0c2 160
allankliu 0:33994cfad0c2 161 void SSD1606::clear()
allankliu 0:33994cfad0c2 162 {
allankliu 0:33994cfad0c2 163 for (int i=0; i<3096; i++)
allankliu 0:33994cfad0c2 164 _send_data(0);
allankliu 0:33994cfad0c2 165 _cursor_x = 0;
allankliu 0:33994cfad0c2 166 _cursor_y = 0;
allankliu 0:33994cfad0c2 167 }
allankliu 0:33994cfad0c2 168
allankliu 0:33994cfad0c2 169 void SSD1606::_send_command(unsigned char code)
allankliu 0:33994cfad0c2 170 {
allankliu 0:33994cfad0c2 171 _cs = 1;
allankliu 0:33994cfad0c2 172 _dc = 0;
allankliu 0:33994cfad0c2 173 _cs = 0;
allankliu 0:33994cfad0c2 174 _spi.write(code);
allankliu 0:33994cfad0c2 175 _cs = 1;
allankliu 0:33994cfad0c2 176 }
allankliu 0:33994cfad0c2 177
allankliu 0:33994cfad0c2 178 void SSD1606::_send_data(unsigned char value)
allankliu 0:33994cfad0c2 179 {
allankliu 0:33994cfad0c2 180 _cs = 1;
allankliu 0:33994cfad0c2 181 _dc = 1;
allankliu 0:33994cfad0c2 182 _cs = 0;
allankliu 0:33994cfad0c2 183 _spi.write(value);
allankliu 0:33994cfad0c2 184 _cs = 1;
allankliu 0:33994cfad0c2 185 }
allankliu 0:33994cfad0c2 186
allankliu 0:33994cfad0c2 187 void SSD1606::set_lut(void)
allankliu 0:33994cfad0c2 188 {
allankliu 0:33994cfad0c2 189 unsigned char i;
allankliu 0:33994cfad0c2 190 _send_command(0x32);
allankliu 0:33994cfad0c2 191 for(i=0; i<90; i++)
allankliu 0:33994cfad0c2 192 {
allankliu 0:33994cfad0c2 193 _send_data(init_data[i]);
allankliu 0:33994cfad0c2 194 }
allankliu 0:33994cfad0c2 195 }