If you want to try this program, u will need fontfiles. You can download zipfile from http://j.mp/mbedjpfont2 . Documents include but only Japanese. Screen shot on http://twitpic.com/s2rvv .
main.cpp@0:2c051d5e25ee, 2009-12-04 (annotated)
- Committer:
- utaani
- Date:
- Fri Dec 04 11:41:55 2009 +0000
- Revision:
- 0:2c051d5e25ee
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
utaani | 0:2c051d5e25ee | 1 | // AD-12864-SPI test program |
utaani | 0:2c051d5e25ee | 2 | // About AD-12864-SPI, see http://www.aitendo.co.jp/product/1622. |
utaani | 0:2c051d5e25ee | 3 | |
utaani | 0:2c051d5e25ee | 4 | // Pin allocation |
utaani | 0:2c051d5e25ee | 5 | // 1 p21 #CS1 with 10k ohm pull-up |
utaani | 0:2c051d5e25ee | 6 | // 2 p22 #RESET with 10k ohm pull-up |
utaani | 0:2c051d5e25ee | 7 | // 3 p23 A0 ... 0:command 1:data |
utaani | 0:2c051d5e25ee | 8 | // 4 p13 SCK |
utaani | 0:2c051d5e25ee | 9 | // 5 p11 MOSI |
utaani | 0:2c051d5e25ee | 10 | // 6 Vdd |
utaani | 0:2c051d5e25ee | 11 | // 7 Vss |
utaani | 0:2c051d5e25ee | 12 | // 8 NC LED_A |
utaani | 0:2c051d5e25ee | 13 | |
utaani | 0:2c051d5e25ee | 14 | // Japanese Character Version: |
utaani | 0:2c051d5e25ee | 15 | // UTF Font from e-font http://openlab.ring.gr.jp/efont/unicode/ |
utaani | 0:2c051d5e25ee | 16 | // and row-col convert with information from: |
utaani | 0:2c051d5e25ee | 17 | // http://todotani.cocolog-nifty.com/blog/2009/07/arduino-d98c.html |
utaani | 0:2c051d5e25ee | 18 | // Font data file based on |
utaani | 0:2c051d5e25ee | 19 | // http://todotani.cocolog-nifty.com/blog/files/glcdfont_12_ucs2.zip |
utaani | 0:2c051d5e25ee | 20 | // make binary and split binary |
utaani | 0:2c051d5e25ee | 21 | |
utaani | 0:2c051d5e25ee | 22 | #include "mbed.h" |
utaani | 0:2c051d5e25ee | 23 | |
utaani | 0:2c051d5e25ee | 24 | DigitalOut cs(p21); |
utaani | 0:2c051d5e25ee | 25 | DigitalOut rst(p22); |
utaani | 0:2c051d5e25ee | 26 | DigitalOut a0(p23); |
utaani | 0:2c051d5e25ee | 27 | SPI spi(p11, p12, p13); // mosi, miso, sclk |
utaani | 0:2c051d5e25ee | 28 | |
utaani | 0:2c051d5e25ee | 29 | LocalFileSystem local("local"); |
utaani | 0:2c051d5e25ee | 30 | |
utaani | 0:2c051d5e25ee | 31 | #ifdef DEBUG |
utaani | 0:2c051d5e25ee | 32 | Serial pc(USBTX, USBRX); // tx, rx |
utaani | 0:2c051d5e25ee | 33 | #endif |
utaani | 0:2c051d5e25ee | 34 | |
utaani | 0:2c051d5e25ee | 35 | void regwrite(unsigned char c) { |
utaani | 0:2c051d5e25ee | 36 | cs = a0 = 0; |
utaani | 0:2c051d5e25ee | 37 | spi.write(c); |
utaani | 0:2c051d5e25ee | 38 | cs = 1; |
utaani | 0:2c051d5e25ee | 39 | } |
utaani | 0:2c051d5e25ee | 40 | |
utaani | 0:2c051d5e25ee | 41 | void datawrite(unsigned char c) { |
utaani | 0:2c051d5e25ee | 42 | cs = 0; |
utaani | 0:2c051d5e25ee | 43 | a0 = 1; |
utaani | 0:2c051d5e25ee | 44 | spi.write(c); |
utaani | 0:2c051d5e25ee | 45 | cs = 1; |
utaani | 0:2c051d5e25ee | 46 | } |
utaani | 0:2c051d5e25ee | 47 | |
utaani | 0:2c051d5e25ee | 48 | // set position (x, 8*y) |
utaani | 0:2c051d5e25ee | 49 | void locate(int x, int y) { |
utaani | 0:2c051d5e25ee | 50 | regwrite(0xb0 | (y & 0x0f)); // Page Address Set (see 2.4.3) |
utaani | 0:2c051d5e25ee | 51 | regwrite(0x10 | (x >> 4 & 0x0f)); // Column Address Set (see 2.4.4) |
utaani | 0:2c051d5e25ee | 52 | regwrite(x & 0x0f); |
utaani | 0:2c051d5e25ee | 53 | } |
utaani | 0:2c051d5e25ee | 54 | |
utaani | 0:2c051d5e25ee | 55 | void cls(void) { |
utaani | 0:2c051d5e25ee | 56 | int x, y; |
utaani | 0:2c051d5e25ee | 57 | for (y = 0; y < 8; y++) { |
utaani | 0:2c051d5e25ee | 58 | locate(0, y); |
utaani | 0:2c051d5e25ee | 59 | for (x = 0; x < 128; x++) datawrite(0x00); |
utaani | 0:2c051d5e25ee | 60 | } |
utaani | 0:2c051d5e25ee | 61 | } |
utaani | 0:2c051d5e25ee | 62 | |
utaani | 0:2c051d5e25ee | 63 | void plot(int x, int y) { |
utaani | 0:2c051d5e25ee | 64 | locate(x, y >> 3); |
utaani | 0:2c051d5e25ee | 65 | datawrite(1 << (y & 7)); |
utaani | 0:2c051d5e25ee | 66 | } |
utaani | 0:2c051d5e25ee | 67 | |
utaani | 0:2c051d5e25ee | 68 | void init() { |
utaani | 0:2c051d5e25ee | 69 | spi.format(8,0); // nazo |
utaani | 0:2c051d5e25ee | 70 | spi.frequency(10000000); // modify later |
utaani | 0:2c051d5e25ee | 71 | |
utaani | 0:2c051d5e25ee | 72 | // reset |
utaani | 0:2c051d5e25ee | 73 | wait_ms(200); |
utaani | 0:2c051d5e25ee | 74 | rst = 0; |
utaani | 0:2c051d5e25ee | 75 | wait_ms(200); |
utaani | 0:2c051d5e25ee | 76 | rst = 1; |
utaani | 0:2c051d5e25ee | 77 | |
utaani | 0:2c051d5e25ee | 78 | // initialize sequence |
utaani | 0:2c051d5e25ee | 79 | regwrite(0xaf); // display on (see 2.4.1) |
utaani | 0:2c051d5e25ee | 80 | regwrite(0x2f); // power control set (see 2.4.16) |
utaani | 0:2c051d5e25ee | 81 | regwrite(0x81); // set electronic volume mode (see 2.4.18) |
utaani | 0:2c051d5e25ee | 82 | // regwrite(0x1f); // electronic volume data 00-3f |
utaani | 0:2c051d5e25ee | 83 | regwrite(0x00); // electronic volume data 00-3f |
utaani | 0:2c051d5e25ee | 84 | regwrite(0x27); // V5 Volatge Regulator Internal Resister Ratio Set (see 2.4.17) |
utaani | 0:2c051d5e25ee | 85 | regwrite(0xa2); // LCD Bias Set ... 1/9 bias (see 2.4.11) |
utaani | 0:2c051d5e25ee | 86 | regwrite(0xc8); // Common Output Mode Select ... Reverse (see 2.4.15) |
utaani | 0:2c051d5e25ee | 87 | regwrite(0xa0); // ADC Select ... Normal (see 2.4.8) |
utaani | 0:2c051d5e25ee | 88 | regwrite(0xa4); // Display All Points ON/OFF ... normal (see 2.4.10) |
utaani | 0:2c051d5e25ee | 89 | regwrite(0xa6); // Display Normal/Reverse ... normal (see 2.4.9) |
utaani | 0:2c051d5e25ee | 90 | regwrite(0xac); // Static Indicator ... off (see 2.4.19) |
utaani | 0:2c051d5e25ee | 91 | regwrite(0x00); // off |
utaani | 0:2c051d5e25ee | 92 | regwrite(0x40); // Display Strat Line Set ... 0 (see 2.4.2) |
utaani | 0:2c051d5e25ee | 93 | regwrite(0xe0); // Write Mode Set |
utaani | 0:2c051d5e25ee | 94 | } |
utaani | 0:2c051d5e25ee | 95 | |
utaani | 0:2c051d5e25ee | 96 | void drawchar24(int x, int y, unsigned int c) { |
utaani | 0:2c051d5e25ee | 97 | unsigned char buf[24]; |
utaani | 0:2c051d5e25ee | 98 | char fname[20]; |
utaani | 0:2c051d5e25ee | 99 | int width,base; |
utaani | 0:2c051d5e25ee | 100 | |
utaani | 0:2c051d5e25ee | 101 | if((c >= 0x0020) && (c <= 0x00FE)) { |
utaani | 0:2c051d5e25ee | 102 | width=12; |
utaani | 0:2c051d5e25ee | 103 | base=0x0020; |
utaani | 0:2c051d5e25ee | 104 | sprintf(fname,"/local/002000FE.dat"); |
utaani | 0:2c051d5e25ee | 105 | } |
utaani | 0:2c051d5e25ee | 106 | else if((c >= 0x0100) && (c <= 0x05F3)) { |
utaani | 0:2c051d5e25ee | 107 | width=12; |
utaani | 0:2c051d5e25ee | 108 | base=0x0100; |
utaani | 0:2c051d5e25ee | 109 | sprintf(fname,"/local/010005F3.dat"); |
utaani | 0:2c051d5e25ee | 110 | } |
utaani | 0:2c051d5e25ee | 111 | else if((c >= 0x1E00) && (c <= 0x1F72)) { |
utaani | 0:2c051d5e25ee | 112 | width=12; |
utaani | 0:2c051d5e25ee | 113 | base=0x1E00; |
utaani | 0:2c051d5e25ee | 114 | sprintf(fname,"/local/1E001F72.dat"); |
utaani | 0:2c051d5e25ee | 115 | } |
utaani | 0:2c051d5e25ee | 116 | else if((c >= 0x2010) && (c <= 0x28FE)) { |
utaani | 0:2c051d5e25ee | 117 | width=12; |
utaani | 0:2c051d5e25ee | 118 | base=0x2010; |
utaani | 0:2c051d5e25ee | 119 | sprintf(fname,"/local/201028FE.dat"); |
utaani | 0:2c051d5e25ee | 120 | } |
utaani | 0:2c051d5e25ee | 121 | else if((c >= 0x3000) && (c <= 0x33DD)) { |
utaani | 0:2c051d5e25ee | 122 | width=24; |
utaani | 0:2c051d5e25ee | 123 | base=0x3000; |
utaani | 0:2c051d5e25ee | 124 | sprintf(fname,"/local/300033DD.dat"); |
utaani | 0:2c051d5e25ee | 125 | } |
utaani | 0:2c051d5e25ee | 126 | else if((c >= 0x4E00) && (c <= 0x9FA4)) { |
utaani | 0:2c051d5e25ee | 127 | width=24; |
utaani | 0:2c051d5e25ee | 128 | base=0x4E00; |
utaani | 0:2c051d5e25ee | 129 | sprintf(fname,"/local/4E009FA4.dat"); |
utaani | 0:2c051d5e25ee | 130 | } |
utaani | 0:2c051d5e25ee | 131 | else if((c >= 0xF900) && (c <= 0xFA26)) { |
utaani | 0:2c051d5e25ee | 132 | width=24; |
utaani | 0:2c051d5e25ee | 133 | base=0xF900; |
utaani | 0:2c051d5e25ee | 134 | sprintf(fname,"/local/F900FA26.dat"); |
utaani | 0:2c051d5e25ee | 135 | } |
utaani | 0:2c051d5e25ee | 136 | else if((c >= 0xFF00) && (c <= 0xFF5E)) { |
utaani | 0:2c051d5e25ee | 137 | width=24; |
utaani | 0:2c051d5e25ee | 138 | base=0xFF00; |
utaani | 0:2c051d5e25ee | 139 | sprintf(fname,"/local/FF00FF5E.dat"); |
utaani | 0:2c051d5e25ee | 140 | } |
utaani | 0:2c051d5e25ee | 141 | else if((c >= 0xFF60) && (c <= 0xFF9F)) { |
utaani | 0:2c051d5e25ee | 142 | width=12; |
utaani | 0:2c051d5e25ee | 143 | base=0xFF60; |
utaani | 0:2c051d5e25ee | 144 | sprintf(fname,"/local/FF60FF9F.dat"); |
utaani | 0:2c051d5e25ee | 145 | } |
utaani | 0:2c051d5e25ee | 146 | else if((c >= 0xFFE0) && (c <= 0xFFE6)) { |
utaani | 0:2c051d5e25ee | 147 | width=24; |
utaani | 0:2c051d5e25ee | 148 | base=0xFFE0; |
utaani | 0:2c051d5e25ee | 149 | sprintf(fname,"/local/FFE0FFE6.dat"); |
utaani | 0:2c051d5e25ee | 150 | } |
utaani | 0:2c051d5e25ee | 151 | else { |
utaani | 0:2c051d5e25ee | 152 | return; |
utaani | 0:2c051d5e25ee | 153 | } |
utaani | 0:2c051d5e25ee | 154 | |
utaani | 0:2c051d5e25ee | 155 | FILE *fp = fopen(fname,"rb"); |
utaani | 0:2c051d5e25ee | 156 | fseek(fp,(c-base) * width,SEEK_SET); |
utaani | 0:2c051d5e25ee | 157 | fread(buf, sizeof(unsigned char), width, fp); |
utaani | 0:2c051d5e25ee | 158 | fclose(fp); |
utaani | 0:2c051d5e25ee | 159 | |
utaani | 0:2c051d5e25ee | 160 | #ifdef DEBUG |
utaani | 0:2c051d5e25ee | 161 | int i; |
utaani | 0:2c051d5e25ee | 162 | pc.printf("DEBUG:%s:%04.4x -> ",fname,c); |
utaani | 0:2c051d5e25ee | 163 | for(i=0;i<width;i++) { |
utaani | 0:2c051d5e25ee | 164 | pc.printf("%02.2x ",buf[i]); |
utaani | 0:2c051d5e25ee | 165 | } |
utaani | 0:2c051d5e25ee | 166 | pc.printf("\r\n"); |
utaani | 0:2c051d5e25ee | 167 | #endif |
utaani | 0:2c051d5e25ee | 168 | |
utaani | 0:2c051d5e25ee | 169 | if(width == 24) { |
utaani | 0:2c051d5e25ee | 170 | locate(x,y); |
utaani | 0:2c051d5e25ee | 171 | datawrite(buf[0]); datawrite(buf[1]); datawrite(buf[2]); |
utaani | 0:2c051d5e25ee | 172 | datawrite(buf[3]); datawrite(buf[4]); datawrite(buf[5]); |
utaani | 0:2c051d5e25ee | 173 | datawrite(buf[6]); datawrite(buf[7]); datawrite(buf[8]); |
utaani | 0:2c051d5e25ee | 174 | datawrite(buf[9]); datawrite(buf[10]); datawrite(buf[11]); |
utaani | 0:2c051d5e25ee | 175 | locate(x,y+1); |
utaani | 0:2c051d5e25ee | 176 | datawrite(buf[12]>>4); datawrite(buf[13]>>4); datawrite(buf[14]>>4); |
utaani | 0:2c051d5e25ee | 177 | datawrite(buf[15]>>4); datawrite(buf[16]>>4); datawrite(buf[17]>>4); |
utaani | 0:2c051d5e25ee | 178 | datawrite(buf[18]>>4); datawrite(buf[19]>>4); datawrite(buf[20]>>4); |
utaani | 0:2c051d5e25ee | 179 | datawrite(buf[21]>>4); datawrite(buf[22]>>4); datawrite(buf[23]>>4); |
utaani | 0:2c051d5e25ee | 180 | } |
utaani | 0:2c051d5e25ee | 181 | else if(width == 12) { |
utaani | 0:2c051d5e25ee | 182 | locate(x,y); |
utaani | 0:2c051d5e25ee | 183 | datawrite(buf[0]); datawrite(buf[1]); datawrite(buf[2]); |
utaani | 0:2c051d5e25ee | 184 | datawrite(buf[3]); datawrite(buf[4]); datawrite(buf[5]); |
utaani | 0:2c051d5e25ee | 185 | locate(x,y+1); |
utaani | 0:2c051d5e25ee | 186 | datawrite(buf[6]); datawrite(buf[7]); datawrite(buf[8]); |
utaani | 0:2c051d5e25ee | 187 | datawrite(buf[9]); datawrite(buf[10]); datawrite(buf[11]); |
utaani | 0:2c051d5e25ee | 188 | } |
utaani | 0:2c051d5e25ee | 189 | } |
utaani | 0:2c051d5e25ee | 190 | /* |
utaani | 0:2c051d5e25ee | 191 | void drawtext(const char *s) { |
utaani | 0:2c051d5e25ee | 192 | unsigned char c; |
utaani | 0:2c051d5e25ee | 193 | while ((c = *s++) != '\0') drawchar(c); |
utaani | 0:2c051d5e25ee | 194 | } |
utaani | 0:2c051d5e25ee | 195 | */ |
utaani | 0:2c051d5e25ee | 196 | |
utaani | 0:2c051d5e25ee | 197 | int main() { |
utaani | 0:2c051d5e25ee | 198 | init(); |
utaani | 0:2c051d5e25ee | 199 | cls(); |
utaani | 0:2c051d5e25ee | 200 | locate(0, 0); |
utaani | 0:2c051d5e25ee | 201 | // http://www.unicode.org/charts/PDF/U3040.pdf |
utaani | 0:2c051d5e25ee | 202 | // http://ash.jp/code/unitbl21.htm |
utaani | 0:2c051d5e25ee | 203 | drawchar24(0,0,0x3053); // KO on UCS2 |
utaani | 0:2c051d5e25ee | 204 | drawchar24(12,0,0x3093); // N |
utaani | 0:2c051d5e25ee | 205 | drawchar24(24,0,0x306b); // NI |
utaani | 0:2c051d5e25ee | 206 | drawchar24(36,0,0x3061); // CHI |
utaani | 0:2c051d5e25ee | 207 | drawchar24(48,0,0x306F); // HA |
utaani | 0:2c051d5e25ee | 208 | drawchar24(0,2,0x65E5); // NI |
utaani | 0:2c051d5e25ee | 209 | drawchar24(12,2,0x672C); // HON |
utaani | 0:2c051d5e25ee | 210 | drawchar24(24,2,0x8A9E); // GO |
utaani | 0:2c051d5e25ee | 211 | drawchar24(36,2,0x8868); // HYO |
utaani | 0:2c051d5e25ee | 212 | drawchar24(48,2,0x793A); // JI |
utaani | 0:2c051d5e25ee | 213 | drawchar24(60,2,0x306E); // NO |
utaani | 0:2c051d5e25ee | 214 | drawchar24(72,2,0x30C6); // TE |
utaani | 0:2c051d5e25ee | 215 | drawchar24(84,2,0x30B9); // SU |
utaani | 0:2c051d5e25ee | 216 | drawchar24(96,2,0x30C8); // TO |
utaani | 0:2c051d5e25ee | 217 | drawchar24(108,2,0x3002);// MARU |
utaani | 0:2c051d5e25ee | 218 | drawchar24(0,4,0xFF21); // zenkaku-A |
utaani | 0:2c051d5e25ee | 219 | drawchar24(12,4,0xFF22); // zenkaku-B |
utaani | 0:2c051d5e25ee | 220 | drawchar24(24,4,0xFF23); // zenkaku-C |
utaani | 0:2c051d5e25ee | 221 | drawchar24(36,4,0xFF24); // zenkaku-D |
utaani | 0:2c051d5e25ee | 222 | drawchar24(48,4,0xFF25); // zenkaku-E |
utaani | 0:2c051d5e25ee | 223 | drawchar24(60,4,0xFF26); // zenkaku-F |
utaani | 0:2c051d5e25ee | 224 | drawchar24(72,4,0xFF27); // zenkaku-G |
utaani | 0:2c051d5e25ee | 225 | drawchar24(84,4,0xFF28); // zenkaku-H |
utaani | 0:2c051d5e25ee | 226 | drawchar24(96,4,0xFF29); // zenkaku-I |
utaani | 0:2c051d5e25ee | 227 | drawchar24(108,4,0xFF2A); // zenkaku-J |
utaani | 0:2c051d5e25ee | 228 | |
utaani | 0:2c051d5e25ee | 229 | while (1) {} |
utaani | 0:2c051d5e25ee | 230 | } |