SG12864A
Dependents: SG12864A_TestProgram
Revision 2:91c03e41c927, committed 2010-07-20
- Comitter:
- shintamainjp
- Date:
- Tue Jul 20 05:30:47 2010 +0000
- Parent:
- 1:aacd73a4e7ee
- Child:
- 3:86e7fba29623
- Commit message:
Changed in this revision
--- a/SG12864A.cpp Tue Jul 20 03:59:17 2010 +0000 +++ b/SG12864A.cpp Tue Jul 20 05:30:47 2010 +0000 @@ -7,10 +7,109 @@ #include "SG12864A.h" -#define setPixel(x,y) buffer[((COLUMNS * 2)* (y / 8)) + x] |= (1 << (y % 8)) -#define unsetPixel(x,y) buffer[((COLUMNS * 2)* (y / 8)) + x] &= ~(1 << (y % 8)) +#define setPixel(x,y) buffer[((COLUMNS * 2)* ((y) / 8)) + (x)] |= (1 << ((y) % 8)) +#define unsetPixel(x,y) buffer[((COLUMNS * 2)* ((y) / 8)) + (x)] &= ~(1 << ((y) % 8)) #define swap(a,b) {int c=a;a=b;b=c;} +const uint8_t SG12864A::font5x7_data[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, // (white space) + 0x00, 0x00, 0x5F, 0x00, 0x00, // ! + 0x00, 0x07, 0x00, 0x07, 0x00, // " + 0x14, 0x7F, 0x14, 0x7F, 0x14, // # + 0x24, 0x2A, 0x7F, 0x2A, 0x12, // $ + 0x23, 0x13, 0x08, 0x64, 0x62, // % + 0x36, 0x49, 0x55, 0x22, 0x50, // & + 0x00, 0x05, 0x03, 0x00, 0x00, // ' + 0x00, 0x1C, 0x22, 0x41, 0x00, // ( + 0x00, 0x41, 0x22, 0x1C, 0x00, // ) + 0x08, 0x2A, 0x1C, 0x2A, 0x08, // * + 0x08, 0x08, 0x3E, 0x08, 0x08, // + + 0x00, 0x50, 0x30, 0x00, 0x00, // , + 0x08, 0x08, 0x08, 0x08, 0x08, // - + 0x00, 0x60, 0x60, 0x00, 0x00, // . + 0x20, 0x10, 0x08, 0x04, 0x02, // / + 0x3E, 0x51, 0x49, 0x45, 0x3E, // 0 + 0x00, 0x42, 0x7F, 0x40, 0x00, // 1 + 0x42, 0x61, 0x51, 0x49, 0x46, // 2 + 0x21, 0x41, 0x45, 0x4B, 0x31, // 3 + 0x18, 0x14, 0x12, 0x7F, 0x10, // 4 + 0x27, 0x45, 0x45, 0x45, 0x39, // 5 + 0x3C, 0x4A, 0x49, 0x49, 0x30, // 6 + 0x01, 0x71, 0x09, 0x05, 0x03, // 7 + 0x36, 0x49, 0x49, 0x49, 0x36, // 8 + 0x06, 0x49, 0x49, 0x29, 0x1E, // 9 + 0x00, 0x36, 0x36, 0x00, 0x00, // : + 0x00, 0x56, 0x36, 0x00, 0x00, // ; + 0x00, 0x08, 0x14, 0x22, 0x41, // < + 0x14, 0x14, 0x14, 0x14, 0x14, // = + 0x41, 0x22, 0x14, 0x08, 0x00, // > + 0x02, 0x01, 0x51, 0x09, 0x06, // ? + 0x32, 0x49, 0x79, 0x41, 0x3E, // @ + 0x7E, 0x11, 0x11, 0x11, 0x7E, // A + 0x7F, 0x49, 0x49, 0x49, 0x36, // B + 0x3E, 0x41, 0x41, 0x41, 0x22, // C + 0x7F, 0x41, 0x41, 0x22, 0x1C, // D + 0x7F, 0x49, 0x49, 0x49, 0x41, // E + 0x7F, 0x09, 0x09, 0x01, 0x01, // F + 0x3E, 0x41, 0x41, 0x51, 0x32, // G + 0x7F, 0x08, 0x08, 0x08, 0x7F, // H + 0x00, 0x41, 0x7F, 0x41, 0x00, // I + 0x20, 0x40, 0x41, 0x3F, 0x01, // J + 0x7F, 0x08, 0x14, 0x22, 0x41, // K + 0x7F, 0x40, 0x40, 0x40, 0x40, // L + 0x7F, 0x02, 0x04, 0x02, 0x7F, // M + 0x7F, 0x04, 0x08, 0x10, 0x7F, // N + 0x3E, 0x41, 0x41, 0x41, 0x3E, // O + 0x7F, 0x09, 0x09, 0x09, 0x06, // P + 0x3E, 0x41, 0x51, 0x21, 0x5E, // Q + 0x7F, 0x09, 0x19, 0x29, 0x46, // R + 0x46, 0x49, 0x49, 0x49, 0x31, // S + 0x01, 0x01, 0x7F, 0x01, 0x01, // T + 0x3F, 0x40, 0x40, 0x40, 0x3F, // U + 0x1F, 0x20, 0x40, 0x20, 0x1F, // V + 0x7F, 0x20, 0x18, 0x20, 0x7F, // W + 0x63, 0x14, 0x08, 0x14, 0x63, // X + 0x03, 0x04, 0x78, 0x04, 0x03, // Y + 0x61, 0x51, 0x49, 0x45, 0x43, // Z + 0x00, 0x00, 0x7F, 0x41, 0x41, // [ + 0x02, 0x04, 0x08, 0x10, 0x20, // / + 0x41, 0x41, 0x7F, 0x00, 0x00, // ] + 0x04, 0x02, 0x01, 0x02, 0x04, // ^ + 0x40, 0x40, 0x40, 0x40, 0x40, // _ + 0x00, 0x01, 0x02, 0x04, 0x00, // ` + 0x20, 0x54, 0x54, 0x54, 0x78, // a + 0x7F, 0x48, 0x44, 0x44, 0x38, // b + 0x38, 0x44, 0x44, 0x44, 0x20, // c + 0x38, 0x44, 0x44, 0x48, 0x7F, // d + 0x38, 0x54, 0x54, 0x54, 0x18, // e + 0x08, 0x7E, 0x09, 0x01, 0x02, // f + 0x08, 0x14, 0x54, 0x54, 0x3C, // g + 0x7F, 0x08, 0x04, 0x04, 0x78, // h + 0x00, 0x44, 0x7D, 0x40, 0x00, // i + 0x20, 0x40, 0x44, 0x3D, 0x00, // j + 0x00, 0x7F, 0x10, 0x28, 0x44, // k + 0x00, 0x41, 0x7F, 0x40, 0x00, // l + 0x7C, 0x04, 0x18, 0x04, 0x78, // m + 0x7C, 0x08, 0x04, 0x04, 0x78, // n + 0x38, 0x44, 0x44, 0x44, 0x38, // o + 0x7C, 0x14, 0x14, 0x14, 0x08, // p + 0x08, 0x14, 0x14, 0x18, 0x7C, // q + 0x7C, 0x08, 0x04, 0x04, 0x08, // r + 0x48, 0x54, 0x54, 0x54, 0x20, // s + 0x04, 0x3F, 0x44, 0x40, 0x20, // t + 0x3C, 0x40, 0x40, 0x20, 0x7C, // u + 0x1C, 0x20, 0x40, 0x20, 0x1C, // v + 0x3C, 0x40, 0x30, 0x40, 0x3C, // w + 0x44, 0x28, 0x10, 0x28, 0x44, // x + 0x0C, 0x50, 0x50, 0x50, 0x3C, // y + 0x44, 0x64, 0x54, 0x4C, 0x44, // z + 0x00, 0x08, 0x36, 0x41, 0x00, // { + 0x00, 0x00, 0x7F, 0x00, 0x00, // | + 0x00, 0x41, 0x36, 0x08, 0x00, // } + 0x08, 0x08, 0x2A, 0x1C, 0x08, // -> + 0x08, 0x1C, 0x2A, 0x08, 0x08 // <- +}; + SG12864A::SG12864A(PinName di, PinName rw, PinName en, @@ -122,6 +221,43 @@ } } +void SG12864A::bufferDrawString(const uint8_t x, const uint8_t y, const char * str) { + char *p = (char *)str; + int cnt = 0; + while (*p) { + bufferDrawChar(x + (FONT_X * cnt), y, *p); + p++; + cnt++; + } +} + +void SG12864A::bufferDrawChar(const uint8_t x, const uint8_t y, const char c) { + if ((FONT_MIN_CODE <= c) &&(c <= FONT_MAX_CODE)) { + int aofs = (c - FONT_MIN_CODE) * FONT_X; + for (int i = 0; i < FONT_X; i++) { + uint8_t pat = font5x7_data[aofs + i]; + for (int j = 0; j < FONT_Y; j++) { + if (pat & (1 << j)) { + setPixel(x + i, y + j); + } else { + unsetPixel(x + i, y + j); + } + } + } + } else { + for (int i = 0; i < FONT_X; i++) { + uint8_t pat = (i % 2) ? 0x55 : 0xAA; + for (int j = 0; j < FONT_Y; j++) { + if (pat & (1 << j)) { + setPixel(x + i, y + j); + } else { + unsetPixel(x + i, y + j); + } + } + } + } +} + /** * High Level Interface. *
--- a/SG12864A.h Tue Jul 20 03:59:17 2010 +0000 +++ b/SG12864A.h Tue Jul 20 05:30:47 2010 +0000 @@ -40,10 +40,12 @@ void bufferDrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2); void bufferDrawBox(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2); void bufferFillBox(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2); + void bufferDrawString(const uint8_t x, const uint8_t y, const char * str); + void bufferDrawChar(const uint8_t x, const uint8_t y, const char c); void reset(void); void clear(void); - + void setDisplayOnOff(Target t, bool on); void setDisplayStartLine(Target t, uint8_t displayStartLine); void setPageAddress(Target t, uint8_t addr); @@ -53,9 +55,14 @@ void readData(Target t, uint8_t *c); static const int PIXEL_X = 128; static const int PIXEL_Y = 64; + static const uint8_t FONT_X = 5; + static const uint8_t FONT_Y = 7; private: static const int PAGES = 8; static const int COLUMNS = 64; + static const uint16_t FONT_MIN_CODE = 0x20; + static const uint16_t FONT_MAX_CODE = 0x7F; + static const uint8_t font5x7_data[]; uint8_t buffer[PAGES * COLUMNS * 2]; DigitalOut ioDI; DigitalOut ioRW;
--- a/main.cpp Tue Jul 20 03:59:17 2010 +0000 +++ b/main.cpp Tue Jul 20 05:30:47 2010 +0000 @@ -46,16 +46,21 @@ lcd.bufferClear(); lcd.bufferDrawLine(0, 0, SG12864A::PIXEL_X - 1, SG12864A::PIXEL_Y - 1); lcd.bufferDrawLine(0, SG12864A::PIXEL_Y - 1, SG12864A::PIXEL_X - 1, 0); + lcd.bufferDrawString(1, 1, "This is a test #1.\b"); lcd.bufferPush(); wait_ms(1000); + // lcd.bufferClear(); lcd.bufferDrawBox(0, 0, SG12864A::PIXEL_X - 1, SG12864A::PIXEL_Y - 1); + lcd.bufferDrawString(1, 2, "This is a test #2.\b"); lcd.bufferPush(); wait_ms(1000); + // lcd.bufferClear(); lcd.bufferFillBox(0, 0, SG12864A::PIXEL_X - 1, SG12864A::PIXEL_Y - 1); + lcd.bufferDrawString(1, 3, "This is a test #3.\b"); lcd.bufferPush(); wait_ms(1000); }