SG12864A

Dependents:   SG12864A_TestProgram

Files at this revision

API Documentation at this revision

Comitter:
shintamainjp
Date:
Tue Jul 20 05:30:47 2010 +0000
Parent:
1:aacd73a4e7ee
Child:
3:86e7fba29623
Commit message:

Changed in this revision

SG12864A.cpp Show annotated file Show diff for this revision Revisions of this file
SG12864A.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- 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);
     }