C12832 LCD kanji interface.

Dependents:  

Fork of GraphicOLED by Norimasa Okamoto

Committer:
va009039
Date:
Thu Sep 04 03:43:30 2014 +0000
Revision:
4:28a12c8608db
Parent:
GraphicOLED.cpp@3:a6650dd2dbc8
for C12832 LCD

Who changed what in which revision?

UserRevisionLine numberNew contents of line
va009039 4:28a12c8608db 1 // C12832_KANJI.cpp
va009039 4:28a12c8608db 2 #include "C12832_KANJI.h"
va009039 0:67d983a1ed3e 3
va009039 3:a6650dd2dbc8 4 extern void font_4x8(uint8_t buf[], int c); // misaki_4x8_jis201.cpp
va009039 3:a6650dd2dbc8 5 extern void font_8x8(uint8_t buf[], uint32_t unicode); // misaki_8x8_unicode.cpp
va009039 2:337a2655f815 6
va009039 4:28a12c8608db 7 C12832_KANJI::C12832_KANJI(PinName mosi, PinName sck, PinName reset, PinName a0, PinName ncs) : _spi(mosi,NC,sck),_reset(reset),_A0(a0),_CS(ncs) {
va009039 0:67d983a1ed3e 8
va009039 4:28a12c8608db 9 _spi.format(8,3); // 8 bit spi mode 3
va009039 4:28a12c8608db 10 //_spi.frequency(20000000); // 19,2 Mhz SPI clock
va009039 4:28a12c8608db 11 _A0 = 0;
va009039 4:28a12c8608db 12 _CS = 1;
va009039 4:28a12c8608db 13 _reset = 0; // display reset
va009039 4:28a12c8608db 14 wait_us(50);
va009039 4:28a12c8608db 15 _reset = 1; // end reset
va009039 4:28a12c8608db 16 wait_ms(5);
va009039 4:28a12c8608db 17
va009039 4:28a12c8608db 18 /* Start Initial Sequence ----------------------------------------------------*/
va009039 4:28a12c8608db 19
va009039 4:28a12c8608db 20 writeCommand(0xAE); // display off
va009039 4:28a12c8608db 21 writeCommand(0xA2); // bias voltage
va009039 4:28a12c8608db 22
va009039 4:28a12c8608db 23 writeCommand(0xA0);
va009039 4:28a12c8608db 24 writeCommand(0xC8); // colum normal
va009039 4:28a12c8608db 25
va009039 4:28a12c8608db 26 writeCommand(0x22); // voltage resistor ratio
va009039 4:28a12c8608db 27 writeCommand(0x2F); // power on
va009039 4:28a12c8608db 28 //writeCommand(0xA4); // LCD display ram
va009039 4:28a12c8608db 29 writeCommand(0x40); // start line = 0
va009039 4:28a12c8608db 30 writeCommand(0xAF); // display ON
va009039 4:28a12c8608db 31
va009039 4:28a12c8608db 32 writeCommand(0x81); // set contrast
va009039 4:28a12c8608db 33 writeCommand(0x17); // set contrast
va009039 4:28a12c8608db 34
va009039 4:28a12c8608db 35 writeCommand(0xA6); // display normal
va009039 3:a6650dd2dbc8 36
va009039 3:a6650dd2dbc8 37 _uni_len = 0;
va009039 0:67d983a1ed3e 38 }
va009039 0:67d983a1ed3e 39
va009039 4:28a12c8608db 40 void C12832_KANJI::g_write(uint8_t pat, int x, int y) {
va009039 4:28a12c8608db 41 writeCommand(0x00 + ( x &0x0f)); // set column low nibble 0
va009039 4:28a12c8608db 42 writeCommand(0x10 + ((x>>4)&0x0f)); // set column hi nibble 0
va009039 4:28a12c8608db 43 writeCommand(0xB0 + y); // set page address
va009039 4:28a12c8608db 44
va009039 0:67d983a1ed3e 45 writeData(pat);
va009039 0:67d983a1ed3e 46 }
va009039 0:67d983a1ed3e 47
va009039 4:28a12c8608db 48 void C12832_KANJI::g_write(uint8_t *buf, int len, int x, int y) {
va009039 3:a6650dd2dbc8 49 for(int i = 0; i < len; i++) {
va009039 3:a6650dd2dbc8 50 g_write(*buf++, x++, y);
va009039 0:67d983a1ed3e 51 }
va009039 0:67d983a1ed3e 52 }
va009039 0:67d983a1ed3e 53
va009039 4:28a12c8608db 54 void C12832_KANJI::writeCommand(uint8_t command) {
va009039 4:28a12c8608db 55 _A0 = 0;
va009039 2:337a2655f815 56 writeByte(command);
va009039 2:337a2655f815 57 }
va009039 2:337a2655f815 58
va009039 4:28a12c8608db 59 void C12832_KANJI::writeData(uint8_t data) {
va009039 4:28a12c8608db 60 _A0 = 1;
va009039 2:337a2655f815 61 writeByte(data);
va009039 2:337a2655f815 62 }
va009039 2:337a2655f815 63
va009039 4:28a12c8608db 64 void C12832_KANJI::writeByte(uint8_t value) {
va009039 4:28a12c8608db 65 _CS = 0;
va009039 4:28a12c8608db 66 _spi.write(value);
va009039 4:28a12c8608db 67 _CS = 1;
va009039 2:337a2655f815 68 }
va009039 2:337a2655f815 69
va009039 4:28a12c8608db 70 void C12832_KANJI::cls() {
va009039 3:a6650dd2dbc8 71 for(int y = 0; y < rows(); y++) {
va009039 4:28a12c8608db 72 for(int x = 0; x < 128; x++) {
va009039 2:337a2655f815 73 g_write(0x00, x, y);
va009039 0:67d983a1ed3e 74 }
va009039 0:67d983a1ed3e 75 }
va009039 1:a104653979bf 76 locate(0,0);
va009039 3:a6650dd2dbc8 77 _uni_len = 0;
va009039 0:67d983a1ed3e 78 }
va009039 0:67d983a1ed3e 79
va009039 4:28a12c8608db 80 void C12832_KANJI::locate(int column, int row) {
va009039 2:337a2655f815 81 _column = column;
va009039 2:337a2655f815 82 _row = row;
va009039 2:337a2655f815 83 }
va009039 2:337a2655f815 84
va009039 4:28a12c8608db 85 int C12832_KANJI::columns() {
va009039 4:28a12c8608db 86 return 128/4;
va009039 3:a6650dd2dbc8 87 }
va009039 0:67d983a1ed3e 88
va009039 4:28a12c8608db 89 int C12832_KANJI::rows() {
va009039 4:28a12c8608db 90 return 4;
va009039 2:337a2655f815 91 }
va009039 2:337a2655f815 92
va009039 4:28a12c8608db 93 int C12832_KANJI::_putc(int value)
va009039 0:67d983a1ed3e 94 {
va009039 3:a6650dd2dbc8 95 int step = 0;
va009039 0:67d983a1ed3e 96 if (value == '\n') {
va009039 0:67d983a1ed3e 97 _column = 0;
va009039 0:67d983a1ed3e 98 _row++;
va009039 0:67d983a1ed3e 99 if (_row >= rows()) {
va009039 0:67d983a1ed3e 100 _row = 0;
va009039 0:67d983a1ed3e 101 }
va009039 3:a6650dd2dbc8 102 _uni_len = 0;
va009039 3:a6650dd2dbc8 103 } else if (value <= 0x7f) {
va009039 3:a6650dd2dbc8 104 step = character(_column, _row, value);
va009039 3:a6650dd2dbc8 105 } else if (value >= 0xc2 && value <= 0xdf) {
va009039 3:a6650dd2dbc8 106 _unicode = value & 0x1f;
va009039 3:a6650dd2dbc8 107 _uni_len = 1;
va009039 3:a6650dd2dbc8 108 } else if (value >= 0xe0 && value <= 0xef) {
va009039 3:a6650dd2dbc8 109 _unicode = value & 0x0f;
va009039 3:a6650dd2dbc8 110 _uni_len = 2;
va009039 3:a6650dd2dbc8 111 } else if (value >= 0xf0 && value <= 0xf7) {
va009039 3:a6650dd2dbc8 112 _unicode = value & 0x07;
va009039 3:a6650dd2dbc8 113 _uni_len = 3;
va009039 3:a6650dd2dbc8 114 } else if (value >= 0xf8 && value <= 0xfb) {
va009039 3:a6650dd2dbc8 115 _unicode = value & 0x03;
va009039 3:a6650dd2dbc8 116 _uni_len = 4;
va009039 3:a6650dd2dbc8 117 } else if (value >= 0xfc && value <= 0xfd) {
va009039 3:a6650dd2dbc8 118 _unicode = value & 0x01;
va009039 3:a6650dd2dbc8 119 _uni_len = 5;
va009039 3:a6650dd2dbc8 120 } else if (_uni_len >= 1 && value >= 0x80 && value <= 0xbf) {
va009039 3:a6650dd2dbc8 121 _unicode = (_unicode<<6) | (value&0x3f);
va009039 3:a6650dd2dbc8 122 if (--_uni_len == 0) {
va009039 3:a6650dd2dbc8 123 step = character(_column, _row, _unicode);
va009039 3:a6650dd2dbc8 124 }
va009039 3:a6650dd2dbc8 125 } else {
va009039 3:a6650dd2dbc8 126 _uni_len = 0;
va009039 3:a6650dd2dbc8 127 }
va009039 3:a6650dd2dbc8 128 if (step > 0) {
va009039 3:a6650dd2dbc8 129 _column += step;
va009039 0:67d983a1ed3e 130 if (_column >= columns()) {
va009039 0:67d983a1ed3e 131 _column = 0;
va009039 3:a6650dd2dbc8 132 if (++_row >= rows()) {
va009039 0:67d983a1ed3e 133 _row = 0;
va009039 0:67d983a1ed3e 134 }
va009039 0:67d983a1ed3e 135 }
va009039 3:a6650dd2dbc8 136 _uni_len = 0;
va009039 0:67d983a1ed3e 137 }
va009039 0:67d983a1ed3e 138 return value;
va009039 0:67d983a1ed3e 139 }
va009039 0:67d983a1ed3e 140
va009039 4:28a12c8608db 141 int C12832_KANJI::_getc() {
va009039 2:337a2655f815 142 return -1;
va009039 2:337a2655f815 143 }
va009039 2:337a2655f815 144
va009039 4:28a12c8608db 145 int C12832_KANJI::character(int column, int row, int c) {
va009039 3:a6650dd2dbc8 146 if (c <= 0x7f) { // 半角
va009039 3:a6650dd2dbc8 147 uint8_t buf[4];
va009039 3:a6650dd2dbc8 148 font_4x8(buf, c);
va009039 3:a6650dd2dbc8 149 g_write(buf, sizeof(buf), column*4, row);
va009039 3:a6650dd2dbc8 150 return 1;
va009039 3:a6650dd2dbc8 151 } else if (c >= 0xff61 && c <= 0xff9f) { // 半角カタカナ
va009039 3:a6650dd2dbc8 152 int i = c - 0xff61 + 0xa1;
va009039 3:a6650dd2dbc8 153 uint8_t buf[4];
va009039 3:a6650dd2dbc8 154 font_4x8(buf, i);
va009039 3:a6650dd2dbc8 155 g_write(buf, sizeof(buf), column*4, row);
va009039 3:a6650dd2dbc8 156 return 1;
va009039 3:a6650dd2dbc8 157 } else { // 全角
va009039 3:a6650dd2dbc8 158 uint8_t buf[8];
va009039 3:a6650dd2dbc8 159 font_8x8(buf, c);
va009039 3:a6650dd2dbc8 160 g_write(buf, sizeof(buf), column*4, row);
va009039 3:a6650dd2dbc8 161 return 2;
va009039 0:67d983a1ed3e 162 }
va009039 0:67d983a1ed3e 163 }
va009039 0:67d983a1ed3e 164