C12832 LCD kanji interface.
Fork of GraphicOLED by
Embed:
(wiki syntax)
Show/hide line numbers
C12832_KANJI.cpp
00001 // C12832_KANJI.cpp 00002 #include "C12832_KANJI.h" 00003 00004 extern void font_4x8(uint8_t buf[], int c); // misaki_4x8_jis201.cpp 00005 extern void font_8x8(uint8_t buf[], uint32_t unicode); // misaki_8x8_unicode.cpp 00006 00007 C12832_KANJI::C12832_KANJI(PinName mosi, PinName sck, PinName reset, PinName a0, PinName ncs) : _spi(mosi,NC,sck),_reset(reset),_A0(a0),_CS(ncs) { 00008 00009 _spi.format(8,3); // 8 bit spi mode 3 00010 //_spi.frequency(20000000); // 19,2 Mhz SPI clock 00011 _A0 = 0; 00012 _CS = 1; 00013 _reset = 0; // display reset 00014 wait_us(50); 00015 _reset = 1; // end reset 00016 wait_ms(5); 00017 00018 /* Start Initial Sequence ----------------------------------------------------*/ 00019 00020 writeCommand(0xAE); // display off 00021 writeCommand(0xA2); // bias voltage 00022 00023 writeCommand(0xA0); 00024 writeCommand(0xC8); // colum normal 00025 00026 writeCommand(0x22); // voltage resistor ratio 00027 writeCommand(0x2F); // power on 00028 //writeCommand(0xA4); // LCD display ram 00029 writeCommand(0x40); // start line = 0 00030 writeCommand(0xAF); // display ON 00031 00032 writeCommand(0x81); // set contrast 00033 writeCommand(0x17); // set contrast 00034 00035 writeCommand(0xA6); // display normal 00036 00037 _uni_len = 0; 00038 } 00039 00040 void C12832_KANJI::g_write(uint8_t pat, int x, int y) { 00041 writeCommand(0x00 + ( x &0x0f)); // set column low nibble 0 00042 writeCommand(0x10 + ((x>>4)&0x0f)); // set column hi nibble 0 00043 writeCommand(0xB0 + y); // set page address 00044 00045 writeData(pat); 00046 } 00047 00048 void C12832_KANJI::g_write(uint8_t *buf, int len, int x, int y) { 00049 for(int i = 0; i < len; i++) { 00050 g_write(*buf++, x++, y); 00051 } 00052 } 00053 00054 void C12832_KANJI::writeCommand(uint8_t command) { 00055 _A0 = 0; 00056 writeByte(command); 00057 } 00058 00059 void C12832_KANJI::writeData(uint8_t data) { 00060 _A0 = 1; 00061 writeByte(data); 00062 } 00063 00064 void C12832_KANJI::writeByte(uint8_t value) { 00065 _CS = 0; 00066 _spi.write(value); 00067 _CS = 1; 00068 } 00069 00070 void C12832_KANJI::cls() { 00071 for(int y = 0; y < rows(); y++) { 00072 for(int x = 0; x < 128; x++) { 00073 g_write(0x00, x, y); 00074 } 00075 } 00076 locate(0,0); 00077 _uni_len = 0; 00078 } 00079 00080 void C12832_KANJI::locate(int column, int row) { 00081 _column = column; 00082 _row = row; 00083 } 00084 00085 int C12832_KANJI::columns() { 00086 return 128/4; 00087 } 00088 00089 int C12832_KANJI::rows() { 00090 return 4; 00091 } 00092 00093 int C12832_KANJI::_putc(int value) 00094 { 00095 int step = 0; 00096 if (value == '\n') { 00097 _column = 0; 00098 _row++; 00099 if (_row >= rows()) { 00100 _row = 0; 00101 } 00102 _uni_len = 0; 00103 } else if (value <= 0x7f) { 00104 step = character(_column, _row, value); 00105 } else if (value >= 0xc2 && value <= 0xdf) { 00106 _unicode = value & 0x1f; 00107 _uni_len = 1; 00108 } else if (value >= 0xe0 && value <= 0xef) { 00109 _unicode = value & 0x0f; 00110 _uni_len = 2; 00111 } else if (value >= 0xf0 && value <= 0xf7) { 00112 _unicode = value & 0x07; 00113 _uni_len = 3; 00114 } else if (value >= 0xf8 && value <= 0xfb) { 00115 _unicode = value & 0x03; 00116 _uni_len = 4; 00117 } else if (value >= 0xfc && value <= 0xfd) { 00118 _unicode = value & 0x01; 00119 _uni_len = 5; 00120 } else if (_uni_len >= 1 && value >= 0x80 && value <= 0xbf) { 00121 _unicode = (_unicode<<6) | (value&0x3f); 00122 if (--_uni_len == 0) { 00123 step = character(_column, _row, _unicode); 00124 } 00125 } else { 00126 _uni_len = 0; 00127 } 00128 if (step > 0) { 00129 _column += step; 00130 if (_column >= columns()) { 00131 _column = 0; 00132 if (++_row >= rows()) { 00133 _row = 0; 00134 } 00135 } 00136 _uni_len = 0; 00137 } 00138 return value; 00139 } 00140 00141 int C12832_KANJI::_getc() { 00142 return -1; 00143 } 00144 00145 int C12832_KANJI::character(int column, int row, int c) { 00146 if (c <= 0x7f) { // 半角 00147 uint8_t buf[4]; 00148 font_4x8(buf, c); 00149 g_write(buf, sizeof(buf), column*4, row); 00150 return 1; 00151 } else if (c >= 0xff61 && c <= 0xff9f) { // 半角カタカナ 00152 int i = c - 0xff61 + 0xa1; 00153 uint8_t buf[4]; 00154 font_4x8(buf, i); 00155 g_write(buf, sizeof(buf), column*4, row); 00156 return 1; 00157 } else { // 全角 00158 uint8_t buf[8]; 00159 font_8x8(buf, c); 00160 g_write(buf, sizeof(buf), column*4, row); 00161 return 2; 00162 } 00163 } 00164
Generated on Tue Jul 12 2022 22:28:56 by 1.7.2