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 .

Dependencies:   mbed

Committer:
utaani
Date:
Fri Dec 04 11:41:55 2009 +0000
Revision:
0:2c051d5e25ee

        

Who changed what in which revision?

UserRevisionLine numberNew 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 }