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 .
Revision 0:2c051d5e25ee, committed 2009-12-04
- Comitter:
- utaani
- Date:
- Fri Dec 04 11:41:55 2009 +0000
- Commit message:
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r 2c051d5e25ee main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Dec 04 11:41:55 2009 +0000 @@ -0,0 +1,230 @@ +// AD-12864-SPI test program +// About AD-12864-SPI, see http://www.aitendo.co.jp/product/1622. + +// Pin allocation +// 1 p21 #CS1 with 10k ohm pull-up +// 2 p22 #RESET with 10k ohm pull-up +// 3 p23 A0 ... 0:command 1:data +// 4 p13 SCK +// 5 p11 MOSI +// 6 Vdd +// 7 Vss +// 8 NC LED_A + +// Japanese Character Version: +// UTF Font from e-font http://openlab.ring.gr.jp/efont/unicode/ +// and row-col convert with information from: +// http://todotani.cocolog-nifty.com/blog/2009/07/arduino-d98c.html +// Font data file based on +// http://todotani.cocolog-nifty.com/blog/files/glcdfont_12_ucs2.zip +// make binary and split binary + +#include "mbed.h" + +DigitalOut cs(p21); +DigitalOut rst(p22); +DigitalOut a0(p23); +SPI spi(p11, p12, p13); // mosi, miso, sclk + +LocalFileSystem local("local"); + +#ifdef DEBUG +Serial pc(USBTX, USBRX); // tx, rx +#endif + +void regwrite(unsigned char c) { + cs = a0 = 0; + spi.write(c); + cs = 1; +} + +void datawrite(unsigned char c) { + cs = 0; + a0 = 1; + spi.write(c); + cs = 1; +} + +// set position (x, 8*y) +void locate(int x, int y) { + regwrite(0xb0 | (y & 0x0f)); // Page Address Set (see 2.4.3) + regwrite(0x10 | (x >> 4 & 0x0f)); // Column Address Set (see 2.4.4) + regwrite(x & 0x0f); +} + +void cls(void) { + int x, y; + for (y = 0; y < 8; y++) { + locate(0, y); + for (x = 0; x < 128; x++) datawrite(0x00); + } +} + +void plot(int x, int y) { + locate(x, y >> 3); + datawrite(1 << (y & 7)); +} + +void init() { + spi.format(8,0); // nazo + spi.frequency(10000000); // modify later + + // reset + wait_ms(200); + rst = 0; + wait_ms(200); + rst = 1; + + // initialize sequence + regwrite(0xaf); // display on (see 2.4.1) + regwrite(0x2f); // power control set (see 2.4.16) + regwrite(0x81); // set electronic volume mode (see 2.4.18) +// regwrite(0x1f); // electronic volume data 00-3f + regwrite(0x00); // electronic volume data 00-3f + regwrite(0x27); // V5 Volatge Regulator Internal Resister Ratio Set (see 2.4.17) + regwrite(0xa2); // LCD Bias Set ... 1/9 bias (see 2.4.11) + regwrite(0xc8); // Common Output Mode Select ... Reverse (see 2.4.15) + regwrite(0xa0); // ADC Select ... Normal (see 2.4.8) + regwrite(0xa4); // Display All Points ON/OFF ... normal (see 2.4.10) + regwrite(0xa6); // Display Normal/Reverse ... normal (see 2.4.9) + regwrite(0xac); // Static Indicator ... off (see 2.4.19) + regwrite(0x00); // off + regwrite(0x40); // Display Strat Line Set ... 0 (see 2.4.2) + regwrite(0xe0); // Write Mode Set +} + +void drawchar24(int x, int y, unsigned int c) { + unsigned char buf[24]; + char fname[20]; + int width,base; + + if((c >= 0x0020) && (c <= 0x00FE)) { + width=12; + base=0x0020; + sprintf(fname,"/local/002000FE.dat"); + } + else if((c >= 0x0100) && (c <= 0x05F3)) { + width=12; + base=0x0100; + sprintf(fname,"/local/010005F3.dat"); + } + else if((c >= 0x1E00) && (c <= 0x1F72)) { + width=12; + base=0x1E00; + sprintf(fname,"/local/1E001F72.dat"); + } + else if((c >= 0x2010) && (c <= 0x28FE)) { + width=12; + base=0x2010; + sprintf(fname,"/local/201028FE.dat"); + } + else if((c >= 0x3000) && (c <= 0x33DD)) { + width=24; + base=0x3000; + sprintf(fname,"/local/300033DD.dat"); + } + else if((c >= 0x4E00) && (c <= 0x9FA4)) { + width=24; + base=0x4E00; + sprintf(fname,"/local/4E009FA4.dat"); + } + else if((c >= 0xF900) && (c <= 0xFA26)) { + width=24; + base=0xF900; + sprintf(fname,"/local/F900FA26.dat"); + } + else if((c >= 0xFF00) && (c <= 0xFF5E)) { + width=24; + base=0xFF00; + sprintf(fname,"/local/FF00FF5E.dat"); + } + else if((c >= 0xFF60) && (c <= 0xFF9F)) { + width=12; + base=0xFF60; + sprintf(fname,"/local/FF60FF9F.dat"); + } + else if((c >= 0xFFE0) && (c <= 0xFFE6)) { + width=24; + base=0xFFE0; + sprintf(fname,"/local/FFE0FFE6.dat"); + } + else { + return; + } + + FILE *fp = fopen(fname,"rb"); + fseek(fp,(c-base) * width,SEEK_SET); + fread(buf, sizeof(unsigned char), width, fp); + fclose(fp); + + #ifdef DEBUG + int i; + pc.printf("DEBUG:%s:%04.4x -> ",fname,c); + for(i=0;i<width;i++) { + pc.printf("%02.2x ",buf[i]); + } + pc.printf("\r\n"); + #endif + + if(width == 24) { + locate(x,y); + datawrite(buf[0]); datawrite(buf[1]); datawrite(buf[2]); + datawrite(buf[3]); datawrite(buf[4]); datawrite(buf[5]); + datawrite(buf[6]); datawrite(buf[7]); datawrite(buf[8]); + datawrite(buf[9]); datawrite(buf[10]); datawrite(buf[11]); + locate(x,y+1); + datawrite(buf[12]>>4); datawrite(buf[13]>>4); datawrite(buf[14]>>4); + datawrite(buf[15]>>4); datawrite(buf[16]>>4); datawrite(buf[17]>>4); + datawrite(buf[18]>>4); datawrite(buf[19]>>4); datawrite(buf[20]>>4); + datawrite(buf[21]>>4); datawrite(buf[22]>>4); datawrite(buf[23]>>4); + } + else if(width == 12) { + locate(x,y); + datawrite(buf[0]); datawrite(buf[1]); datawrite(buf[2]); + datawrite(buf[3]); datawrite(buf[4]); datawrite(buf[5]); + locate(x,y+1); + datawrite(buf[6]); datawrite(buf[7]); datawrite(buf[8]); + datawrite(buf[9]); datawrite(buf[10]); datawrite(buf[11]); + } +} +/* +void drawtext(const char *s) { + unsigned char c; + while ((c = *s++) != '\0') drawchar(c); +} +*/ + +int main() { + init(); + cls(); + locate(0, 0); + // http://www.unicode.org/charts/PDF/U3040.pdf + // http://ash.jp/code/unitbl21.htm + drawchar24(0,0,0x3053); // KO on UCS2 + drawchar24(12,0,0x3093); // N + drawchar24(24,0,0x306b); // NI + drawchar24(36,0,0x3061); // CHI + drawchar24(48,0,0x306F); // HA + drawchar24(0,2,0x65E5); // NI + drawchar24(12,2,0x672C); // HON + drawchar24(24,2,0x8A9E); // GO + drawchar24(36,2,0x8868); // HYO + drawchar24(48,2,0x793A); // JI + drawchar24(60,2,0x306E); // NO + drawchar24(72,2,0x30C6); // TE + drawchar24(84,2,0x30B9); // SU + drawchar24(96,2,0x30C8); // TO + drawchar24(108,2,0x3002);// MARU + drawchar24(0,4,0xFF21); // zenkaku-A + drawchar24(12,4,0xFF22); // zenkaku-B + drawchar24(24,4,0xFF23); // zenkaku-C + drawchar24(36,4,0xFF24); // zenkaku-D + drawchar24(48,4,0xFF25); // zenkaku-E + drawchar24(60,4,0xFF26); // zenkaku-F + drawchar24(72,4,0xFF27); // zenkaku-G + drawchar24(84,4,0xFF28); // zenkaku-H + drawchar24(96,4,0xFF29); // zenkaku-I + drawchar24(108,4,0xFF2A); // zenkaku-J + + while (1) {} +}
diff -r 000000000000 -r 2c051d5e25ee mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Fri Dec 04 11:41:55 2009 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/49a220cc26e0