Tom Van den Bon
/
nucleo_lcd3310
basic example for the nokia lcd 3310 on a nucleo (no spi needed, just 5 io pins)
main.cpp@0:c2f29cde2516, 2015-02-25 (annotated)
- Committer:
- tomvdb
- Date:
- Wed Feb 25 11:23:47 2015 +0000
- Revision:
- 0:c2f29cde2516
basic example - bit banging the lcd
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tomvdb | 0:c2f29cde2516 | 1 | #include "mbed.h" |
tomvdb | 0:c2f29cde2516 | 2 | |
tomvdb | 0:c2f29cde2516 | 3 | /* |
tomvdb | 0:c2f29cde2516 | 4 | 1 vcc - 3v3 |
tomvdb | 0:c2f29cde2516 | 5 | 2 gnd - gnd |
tomvdb | 0:c2f29cde2516 | 6 | 3 sce - A0 |
tomvdb | 0:c2f29cde2516 | 7 | 4 rst - A1 |
tomvdb | 0:c2f29cde2516 | 8 | 5 d/c - A2 |
tomvdb | 0:c2f29cde2516 | 9 | 6 dn - A3 |
tomvdb | 0:c2f29cde2516 | 10 | 7 sclk - A4 |
tomvdb | 0:c2f29cde2516 | 11 | 8 led - 3v3 |
tomvdb | 0:c2f29cde2516 | 12 | */ |
tomvdb | 0:c2f29cde2516 | 13 | |
tomvdb | 0:c2f29cde2516 | 14 | DigitalOut LCD_PIN_CLOCK(A4); //sclk |
tomvdb | 0:c2f29cde2516 | 15 | DigitalOut LCD_PIN_DATA(A3); // dn |
tomvdb | 0:c2f29cde2516 | 16 | DigitalOut LCD_PIN_COMMAND(A2); // d/c |
tomvdb | 0:c2f29cde2516 | 17 | DigitalOut LCD_PIN_RESET(A1); // rst |
tomvdb | 0:c2f29cde2516 | 18 | DigitalOut LCD_PIN_ENABLE(A0); // sce |
tomvdb | 0:c2f29cde2516 | 19 | |
tomvdb | 0:c2f29cde2516 | 20 | #define LCD_CMD 0 |
tomvdb | 0:c2f29cde2516 | 21 | #define LCD_DATA 1 |
tomvdb | 0:c2f29cde2516 | 22 | |
tomvdb | 0:c2f29cde2516 | 23 | static const uint8_t ASCII[][5] = |
tomvdb | 0:c2f29cde2516 | 24 | { |
tomvdb | 0:c2f29cde2516 | 25 | {0x00, 0x00, 0x00, 0x00, 0x00} // 20 |
tomvdb | 0:c2f29cde2516 | 26 | ,{0x00, 0x00, 0x5f, 0x00, 0x00} // 21 ! |
tomvdb | 0:c2f29cde2516 | 27 | ,{0x00, 0x07, 0x00, 0x07, 0x00} // 22 " |
tomvdb | 0:c2f29cde2516 | 28 | ,{0x14, 0x7f, 0x14, 0x7f, 0x14} // 23 # |
tomvdb | 0:c2f29cde2516 | 29 | ,{0x24, 0x2a, 0x7f, 0x2a, 0x12} // 24 $ |
tomvdb | 0:c2f29cde2516 | 30 | ,{0x23, 0x13, 0x08, 0x64, 0x62} // 25 % |
tomvdb | 0:c2f29cde2516 | 31 | ,{0x36, 0x49, 0x55, 0x22, 0x50} // 26 & |
tomvdb | 0:c2f29cde2516 | 32 | ,{0x00, 0x05, 0x03, 0x00, 0x00} // 27 ' |
tomvdb | 0:c2f29cde2516 | 33 | ,{0x00, 0x1c, 0x22, 0x41, 0x00} // 28 ( |
tomvdb | 0:c2f29cde2516 | 34 | ,{0x00, 0x41, 0x22, 0x1c, 0x00} // 29 ) |
tomvdb | 0:c2f29cde2516 | 35 | ,{0x14, 0x08, 0x3e, 0x08, 0x14} // 2a * |
tomvdb | 0:c2f29cde2516 | 36 | ,{0x08, 0x08, 0x3e, 0x08, 0x08} // 2b + |
tomvdb | 0:c2f29cde2516 | 37 | ,{0x00, 0x50, 0x30, 0x00, 0x00} // 2c , |
tomvdb | 0:c2f29cde2516 | 38 | ,{0x08, 0x08, 0x08, 0x08, 0x08} // 2d - |
tomvdb | 0:c2f29cde2516 | 39 | ,{0x00, 0x60, 0x60, 0x00, 0x00} // 2e . |
tomvdb | 0:c2f29cde2516 | 40 | ,{0x20, 0x10, 0x08, 0x04, 0x02} // 2f / |
tomvdb | 0:c2f29cde2516 | 41 | ,{0x3e, 0x51, 0x49, 0x45, 0x3e} // 30 0 |
tomvdb | 0:c2f29cde2516 | 42 | ,{0x00, 0x42, 0x7f, 0x40, 0x00} // 31 1 |
tomvdb | 0:c2f29cde2516 | 43 | ,{0x42, 0x61, 0x51, 0x49, 0x46} // 32 2 |
tomvdb | 0:c2f29cde2516 | 44 | ,{0x21, 0x41, 0x45, 0x4b, 0x31} // 33 3 |
tomvdb | 0:c2f29cde2516 | 45 | ,{0x18, 0x14, 0x12, 0x7f, 0x10} // 34 4 |
tomvdb | 0:c2f29cde2516 | 46 | ,{0x27, 0x45, 0x45, 0x45, 0x39} // 35 5 |
tomvdb | 0:c2f29cde2516 | 47 | ,{0x3c, 0x4a, 0x49, 0x49, 0x30} // 36 6 |
tomvdb | 0:c2f29cde2516 | 48 | ,{0x01, 0x71, 0x09, 0x05, 0x03} // 37 7 |
tomvdb | 0:c2f29cde2516 | 49 | ,{0x36, 0x49, 0x49, 0x49, 0x36} // 38 8 |
tomvdb | 0:c2f29cde2516 | 50 | ,{0x06, 0x49, 0x49, 0x29, 0x1e} // 39 9 |
tomvdb | 0:c2f29cde2516 | 51 | ,{0x00, 0x36, 0x36, 0x00, 0x00} // 3a : |
tomvdb | 0:c2f29cde2516 | 52 | ,{0x00, 0x56, 0x36, 0x00, 0x00} // 3b ; |
tomvdb | 0:c2f29cde2516 | 53 | ,{0x08, 0x14, 0x22, 0x41, 0x00} // 3c < |
tomvdb | 0:c2f29cde2516 | 54 | ,{0x14, 0x14, 0x14, 0x14, 0x14} // 3d = |
tomvdb | 0:c2f29cde2516 | 55 | ,{0x00, 0x41, 0x22, 0x14, 0x08} // 3e > |
tomvdb | 0:c2f29cde2516 | 56 | ,{0x02, 0x01, 0x51, 0x09, 0x06} // 3f ? |
tomvdb | 0:c2f29cde2516 | 57 | ,{0x32, 0x49, 0x79, 0x41, 0x3e} // 40 @ |
tomvdb | 0:c2f29cde2516 | 58 | ,{0x7e, 0x11, 0x11, 0x11, 0x7e} // 41 A |
tomvdb | 0:c2f29cde2516 | 59 | ,{0x7f, 0x49, 0x49, 0x49, 0x36} // 42 B |
tomvdb | 0:c2f29cde2516 | 60 | ,{0x3e, 0x41, 0x41, 0x41, 0x22} // 43 C |
tomvdb | 0:c2f29cde2516 | 61 | ,{0x7f, 0x41, 0x41, 0x22, 0x1c} // 44 D |
tomvdb | 0:c2f29cde2516 | 62 | ,{0x7f, 0x49, 0x49, 0x49, 0x41} // 45 E |
tomvdb | 0:c2f29cde2516 | 63 | ,{0x7f, 0x09, 0x09, 0x09, 0x01} // 46 F |
tomvdb | 0:c2f29cde2516 | 64 | ,{0x3e, 0x41, 0x49, 0x49, 0x7a} // 47 G |
tomvdb | 0:c2f29cde2516 | 65 | ,{0x7f, 0x08, 0x08, 0x08, 0x7f} // 48 H |
tomvdb | 0:c2f29cde2516 | 66 | ,{0x00, 0x41, 0x7f, 0x41, 0x00} // 49 I |
tomvdb | 0:c2f29cde2516 | 67 | ,{0x20, 0x40, 0x41, 0x3f, 0x01} // 4a J |
tomvdb | 0:c2f29cde2516 | 68 | ,{0x7f, 0x08, 0x14, 0x22, 0x41} // 4b K |
tomvdb | 0:c2f29cde2516 | 69 | ,{0x7f, 0x40, 0x40, 0x40, 0x40} // 4c L |
tomvdb | 0:c2f29cde2516 | 70 | ,{0x7f, 0x02, 0x0c, 0x02, 0x7f} // 4d M |
tomvdb | 0:c2f29cde2516 | 71 | ,{0x7f, 0x04, 0x08, 0x10, 0x7f} // 4e N |
tomvdb | 0:c2f29cde2516 | 72 | ,{0x3e, 0x41, 0x41, 0x41, 0x3e} // 4f O |
tomvdb | 0:c2f29cde2516 | 73 | ,{0x7f, 0x09, 0x09, 0x09, 0x06} // 50 P |
tomvdb | 0:c2f29cde2516 | 74 | ,{0x3e, 0x41, 0x51, 0x21, 0x5e} // 51 Q |
tomvdb | 0:c2f29cde2516 | 75 | ,{0x7f, 0x09, 0x19, 0x29, 0x46} // 52 R |
tomvdb | 0:c2f29cde2516 | 76 | ,{0x46, 0x49, 0x49, 0x49, 0x31} // 53 S |
tomvdb | 0:c2f29cde2516 | 77 | ,{0x01, 0x01, 0x7f, 0x01, 0x01} // 54 T |
tomvdb | 0:c2f29cde2516 | 78 | ,{0x3f, 0x40, 0x40, 0x40, 0x3f} // 55 U |
tomvdb | 0:c2f29cde2516 | 79 | ,{0x1f, 0x20, 0x40, 0x20, 0x1f} // 56 V |
tomvdb | 0:c2f29cde2516 | 80 | ,{0x3f, 0x40, 0x38, 0x40, 0x3f} // 57 W |
tomvdb | 0:c2f29cde2516 | 81 | ,{0x63, 0x14, 0x08, 0x14, 0x63} // 58 X |
tomvdb | 0:c2f29cde2516 | 82 | ,{0x07, 0x08, 0x70, 0x08, 0x07} // 59 Y |
tomvdb | 0:c2f29cde2516 | 83 | ,{0x61, 0x51, 0x49, 0x45, 0x43} // 5a Z |
tomvdb | 0:c2f29cde2516 | 84 | ,{0x00, 0x7f, 0x41, 0x41, 0x00} // 5b [ |
tomvdb | 0:c2f29cde2516 | 85 | ,{0x02, 0x04, 0x08, 0x10, 0x20} // 5c ¥ |
tomvdb | 0:c2f29cde2516 | 86 | ,{0x00, 0x41, 0x41, 0x7f, 0x00} // 5d ] |
tomvdb | 0:c2f29cde2516 | 87 | ,{0x04, 0x02, 0x01, 0x02, 0x04} // 5e ^ |
tomvdb | 0:c2f29cde2516 | 88 | ,{0x40, 0x40, 0x40, 0x40, 0x40} // 5f _ |
tomvdb | 0:c2f29cde2516 | 89 | ,{0x00, 0x01, 0x02, 0x04, 0x00} // 60 ` |
tomvdb | 0:c2f29cde2516 | 90 | ,{0x20, 0x54, 0x54, 0x54, 0x78} // 61 a |
tomvdb | 0:c2f29cde2516 | 91 | ,{0x7f, 0x48, 0x44, 0x44, 0x38} // 62 b |
tomvdb | 0:c2f29cde2516 | 92 | ,{0x38, 0x44, 0x44, 0x44, 0x20} // 63 c |
tomvdb | 0:c2f29cde2516 | 93 | ,{0x38, 0x44, 0x44, 0x48, 0x7f} // 64 d |
tomvdb | 0:c2f29cde2516 | 94 | ,{0x38, 0x54, 0x54, 0x54, 0x18} // 65 e |
tomvdb | 0:c2f29cde2516 | 95 | ,{0x08, 0x7e, 0x09, 0x01, 0x02} // 66 f |
tomvdb | 0:c2f29cde2516 | 96 | ,{0x0c, 0x52, 0x52, 0x52, 0x3e} // 67 g |
tomvdb | 0:c2f29cde2516 | 97 | ,{0x7f, 0x08, 0x04, 0x04, 0x78} // 68 h |
tomvdb | 0:c2f29cde2516 | 98 | ,{0x00, 0x44, 0x7d, 0x40, 0x00} // 69 i |
tomvdb | 0:c2f29cde2516 | 99 | ,{0x20, 0x40, 0x44, 0x3d, 0x00} // 6a j |
tomvdb | 0:c2f29cde2516 | 100 | ,{0x7f, 0x10, 0x28, 0x44, 0x00} // 6b k |
tomvdb | 0:c2f29cde2516 | 101 | ,{0x00, 0x41, 0x7f, 0x40, 0x00} // 6c l |
tomvdb | 0:c2f29cde2516 | 102 | ,{0x7c, 0x04, 0x18, 0x04, 0x78} // 6d m |
tomvdb | 0:c2f29cde2516 | 103 | ,{0x7c, 0x08, 0x04, 0x04, 0x78} // 6e n |
tomvdb | 0:c2f29cde2516 | 104 | ,{0x38, 0x44, 0x44, 0x44, 0x38} // 6f o |
tomvdb | 0:c2f29cde2516 | 105 | ,{0x7c, 0x14, 0x14, 0x14, 0x08} // 70 p |
tomvdb | 0:c2f29cde2516 | 106 | ,{0x08, 0x14, 0x14, 0x18, 0x7c} // 71 q |
tomvdb | 0:c2f29cde2516 | 107 | ,{0x7c, 0x08, 0x04, 0x04, 0x08} // 72 r |
tomvdb | 0:c2f29cde2516 | 108 | ,{0x48, 0x54, 0x54, 0x54, 0x20} // 73 s |
tomvdb | 0:c2f29cde2516 | 109 | ,{0x04, 0x3f, 0x44, 0x40, 0x20} // 74 t |
tomvdb | 0:c2f29cde2516 | 110 | ,{0x3c, 0x40, 0x40, 0x20, 0x7c} // 75 u |
tomvdb | 0:c2f29cde2516 | 111 | ,{0x1c, 0x20, 0x40, 0x20, 0x1c} // 76 v |
tomvdb | 0:c2f29cde2516 | 112 | ,{0x3c, 0x40, 0x30, 0x40, 0x3c} // 77 w |
tomvdb | 0:c2f29cde2516 | 113 | ,{0x44, 0x28, 0x10, 0x28, 0x44} // 78 x |
tomvdb | 0:c2f29cde2516 | 114 | ,{0x0c, 0x50, 0x50, 0x50, 0x3c} // 79 y |
tomvdb | 0:c2f29cde2516 | 115 | ,{0x44, 0x64, 0x54, 0x4c, 0x44} // 7a z |
tomvdb | 0:c2f29cde2516 | 116 | ,{0x00, 0x08, 0x36, 0x41, 0x00} // 7b { |
tomvdb | 0:c2f29cde2516 | 117 | ,{0x00, 0x00, 0x7f, 0x00, 0x00} // 7c | |
tomvdb | 0:c2f29cde2516 | 118 | ,{0x00, 0x41, 0x36, 0x08, 0x00} // 7d } |
tomvdb | 0:c2f29cde2516 | 119 | ,{0x10, 0x08, 0x08, 0x10, 0x08} // 7e ← |
tomvdb | 0:c2f29cde2516 | 120 | ,{0x00, 0x06, 0x09, 0x09, 0x06} // 7f → |
tomvdb | 0:c2f29cde2516 | 121 | }; |
tomvdb | 0:c2f29cde2516 | 122 | |
tomvdb | 0:c2f29cde2516 | 123 | static uint8_t bender [] = { |
tomvdb | 0:c2f29cde2516 | 124 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, |
tomvdb | 0:c2f29cde2516 | 125 | 0xFC, 0xFF, 0xDF, 0xAF, 0x55, 0x80, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00, |
tomvdb | 0:c2f29cde2516 | 126 | 0x55, 0x00, 0x55, 0x00, 0x55, 0x80, 0xD5, 0x80, 0xD5, 0xE0, 0xF5, 0x60, 0x75, 0x70, 0x75, 0x60, |
tomvdb | 0:c2f29cde2516 | 127 | 0x75, 0xE0, 0xD5, 0x80, 0xD5, 0x00, 0x55, 0x00, 0x55, 0x00, 0x57, 0x07, 0x5E, 0x3C, 0x70, 0xF0, |
tomvdb | 0:c2f29cde2516 | 128 | 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
tomvdb | 0:c2f29cde2516 | 129 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
tomvdb | 0:c2f29cde2516 | 130 | 0x00, 0x00, 0x00, 0x03, 0x5F, 0xFF, 0xFF, 0xFF, 0xD7, 0xEE, 0xD5, 0xE8, 0xD5, 0xA0, 0xD5, 0x80, |
tomvdb | 0:c2f29cde2516 | 131 | 0xD5, 0xC0, 0xF5, 0xE0, 0xBD, 0xF8, 0xDF, 0xEE, 0x7F, 0x3B, 0x3F, 0x0F, 0x0F, 0x06, 0x06, 0x06, |
tomvdb | 0:c2f29cde2516 | 132 | 0x06, 0x06, 0x0C, 0x0C, 0x38, 0x38, 0xF1, 0xC1, 0xC3, 0x07, 0x07, 0x3C, 0x3D, 0xF8, 0xF5, 0xC0, |
tomvdb | 0:c2f29cde2516 | 133 | 0x55, 0x00, 0x55, 0x00, 0x55, 0x03, 0x57, 0x1E, 0x7C, 0xF0, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x00, |
tomvdb | 0:c2f29cde2516 | 134 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
tomvdb | 0:c2f29cde2516 | 135 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0xC7, 0xFF, 0xFD, 0x7A, |
tomvdb | 0:c2f29cde2516 | 136 | 0xDD, 0xFE, 0xFF, 0x77, 0x7F, 0x3C, 0x7E, 0x3F, 0x3F, 0x3F, 0x7F, 0xFF, 0x80, 0x80, 0x00, 0x00, |
tomvdb | 0:c2f29cde2516 | 137 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0F, 0x8F, 0xC4, 0xE0, 0x7D, 0x3F, 0x1F, 0x00, 0x00, 0x00, |
tomvdb | 0:c2f29cde2516 | 138 | 0x80, 0x80, 0xE1, 0xE7, 0x7F, 0x3E, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x01, |
tomvdb | 0:c2f29cde2516 | 139 | 0x57, 0x0F, 0x5C, 0x78, 0x70, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
tomvdb | 0:c2f29cde2516 | 140 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xE0, 0xF0, 0xBC, 0xDF, 0xEF, |
tomvdb | 0:c2f29cde2516 | 141 | 0xF7, 0xFF, 0xFF, 0xFF, 0x47, 0x03, 0x01, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xE0, 0x00, 0x01, |
tomvdb | 0:c2f29cde2516 | 142 | 0x07, 0x07, 0x0E, 0xCC, 0xCC, 0xFC, 0x7C, 0x3C, 0x1C, 0x0E, 0x07, 0x83, 0xC1, 0xE0, 0x70, 0x30, |
tomvdb | 0:c2f29cde2516 | 143 | 0x78, 0x1C, 0x5C, 0x0F, 0x57, 0x03, 0xD5, 0xC0, 0xD5, 0xE0, 0x75, 0x30, 0x35, 0xB8, 0xDD, 0xF8, |
tomvdb | 0:c2f29cde2516 | 144 | 0xFD, 0xF8, 0xFD, 0xB8, 0x35, 0x30, 0xF5, 0xC0, 0xD5, 0x03, 0x57, 0x0F, 0x5F, 0xBC, 0xF0, 0xF0, |
tomvdb | 0:c2f29cde2516 | 145 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, |
tomvdb | 0:c2f29cde2516 | 146 | 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFC, 0xF8, 0xF0, 0xF0, 0xF0, 0xE1, |
tomvdb | 0:c2f29cde2516 | 147 | 0xF1, 0xF0, 0x78, 0xB8, 0x5E, 0x2E, 0x57, 0x81, 0xD1, 0xE8, 0xF4, 0xB8, 0xFC, 0xBE, 0x77, 0xA3, |
tomvdb | 0:c2f29cde2516 | 148 | 0x55, 0x80, 0xD5, 0xC0, 0xF5, 0x78, 0x3D, 0xBE, 0xFF, 0xE6, 0xF3, 0xF9, 0x1D, 0x0D, 0x07, 0x07, |
tomvdb | 0:c2f29cde2516 | 149 | 0x0F, 0xF9, 0xF9, 0xF0, 0xF0, 0xB8, 0x19, 0x1F, 0xC6, 0xCE, 0xFB, 0xFB, 0x7F, 0xE8, 0xF5, 0xFE, |
tomvdb | 0:c2f29cde2516 | 150 | 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
tomvdb | 0:c2f29cde2516 | 151 | 0x00, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x1F, 0x1F, 0x1F, 0x3B, 0x77, 0x7F, 0x7F, 0x6F, 0x7F, 0x7F, |
tomvdb | 0:c2f29cde2516 | 152 | 0x7F, 0x3F, 0x3F, 0x3B, 0x1D, 0x1C, 0x1D, 0x1E, 0x1F, 0x0E, 0x1F, 0x0F, 0x1F, 0x3F, 0x7D, 0xEE, |
tomvdb | 0:c2f29cde2516 | 153 | 0xFF, 0xFE, 0xF7, 0xEA, 0x7F, 0x7F, 0x7F, 0x3F, 0x1F, 0x1E, 0x7F, 0xE3, 0xC1, 0xE0, 0xF1, 0x73, |
tomvdb | 0:c2f29cde2516 | 154 | 0x1F, 0x1E, 0x9F, 0xFB, 0xF3, 0x60, 0x70, 0xFC, 0xDD, 0xEF, 0xD7, 0xE3, 0xD7, 0xE1, 0xD5, 0xF8, |
tomvdb | 0:c2f29cde2516 | 155 | 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, |
tomvdb | 0:c2f29cde2516 | 156 | }; |
tomvdb | 0:c2f29cde2516 | 157 | |
tomvdb | 0:c2f29cde2516 | 158 | void lcdWrite(uint8_t dataOrCommand, uint8_t value) |
tomvdb | 0:c2f29cde2516 | 159 | { |
tomvdb | 0:c2f29cde2516 | 160 | if (dataOrCommand) |
tomvdb | 0:c2f29cde2516 | 161 | LCD_PIN_COMMAND = 1; |
tomvdb | 0:c2f29cde2516 | 162 | else |
tomvdb | 0:c2f29cde2516 | 163 | LCD_PIN_COMMAND = 0; |
tomvdb | 0:c2f29cde2516 | 164 | |
tomvdb | 0:c2f29cde2516 | 165 | LCD_PIN_ENABLE = 0; |
tomvdb | 0:c2f29cde2516 | 166 | |
tomvdb | 0:c2f29cde2516 | 167 | int i; |
tomvdb | 0:c2f29cde2516 | 168 | for (i = 0; i < 8; i++) |
tomvdb | 0:c2f29cde2516 | 169 | { |
tomvdb | 0:c2f29cde2516 | 170 | LCD_PIN_CLOCK = 0; |
tomvdb | 0:c2f29cde2516 | 171 | if (value & 0x80) |
tomvdb | 0:c2f29cde2516 | 172 | LCD_PIN_DATA = 1; |
tomvdb | 0:c2f29cde2516 | 173 | else |
tomvdb | 0:c2f29cde2516 | 174 | LCD_PIN_DATA = 0; |
tomvdb | 0:c2f29cde2516 | 175 | value <<= 1; |
tomvdb | 0:c2f29cde2516 | 176 | LCD_PIN_CLOCK=1; |
tomvdb | 0:c2f29cde2516 | 177 | |
tomvdb | 0:c2f29cde2516 | 178 | } |
tomvdb | 0:c2f29cde2516 | 179 | |
tomvdb | 0:c2f29cde2516 | 180 | LCD_PIN_ENABLE = 1; |
tomvdb | 0:c2f29cde2516 | 181 | } |
tomvdb | 0:c2f29cde2516 | 182 | |
tomvdb | 0:c2f29cde2516 | 183 | void lcdBender(void) |
tomvdb | 0:c2f29cde2516 | 184 | { |
tomvdb | 0:c2f29cde2516 | 185 | for ( int i = 0; i < ( 84 * 48 ) / 8; i++) |
tomvdb | 0:c2f29cde2516 | 186 | { |
tomvdb | 0:c2f29cde2516 | 187 | lcdWrite(LCD_DATA, bender[i]); |
tomvdb | 0:c2f29cde2516 | 188 | } |
tomvdb | 0:c2f29cde2516 | 189 | } |
tomvdb | 0:c2f29cde2516 | 190 | |
tomvdb | 0:c2f29cde2516 | 191 | void lcdInit() |
tomvdb | 0:c2f29cde2516 | 192 | { |
tomvdb | 0:c2f29cde2516 | 193 | // Reset LCD |
tomvdb | 0:c2f29cde2516 | 194 | |
tomvdb | 0:c2f29cde2516 | 195 | LCD_PIN_RESET = 1; |
tomvdb | 0:c2f29cde2516 | 196 | wait_ms(10); |
tomvdb | 0:c2f29cde2516 | 197 | LCD_PIN_RESET = 0; |
tomvdb | 0:c2f29cde2516 | 198 | wait_ms(10); |
tomvdb | 0:c2f29cde2516 | 199 | LCD_PIN_RESET = 1; |
tomvdb | 0:c2f29cde2516 | 200 | |
tomvdb | 0:c2f29cde2516 | 201 | // Initialize LCD state |
tomvdb | 0:c2f29cde2516 | 202 | lcdWrite(LCD_CMD, 0x21); // LCD Extended Commands. |
tomvdb | 0:c2f29cde2516 | 203 | lcdWrite(LCD_CMD, 0xB1); // Set LCD Vop (Contrast). |
tomvdb | 0:c2f29cde2516 | 204 | lcdWrite(LCD_CMD, 0x04); // Set Temp coefficent. |
tomvdb | 0:c2f29cde2516 | 205 | lcdWrite(LCD_CMD, 0x15); // LCD bias mode |
tomvdb | 0:c2f29cde2516 | 206 | lcdWrite(LCD_CMD, 0x20); |
tomvdb | 0:c2f29cde2516 | 207 | lcdWrite(LCD_CMD, 0x0C); // LCD in normal mode. |
tomvdb | 0:c2f29cde2516 | 208 | } |
tomvdb | 0:c2f29cde2516 | 209 | |
tomvdb | 0:c2f29cde2516 | 210 | void lcdXY( uint8_t x, uint8_t y) |
tomvdb | 0:c2f29cde2516 | 211 | { |
tomvdb | 0:c2f29cde2516 | 212 | lcdWrite( 0, 0x80 | x); |
tomvdb | 0:c2f29cde2516 | 213 | lcdWrite( 0, 0x40 | y); |
tomvdb | 0:c2f29cde2516 | 214 | } |
tomvdb | 0:c2f29cde2516 | 215 | |
tomvdb | 0:c2f29cde2516 | 216 | void lcdChar(char ch) |
tomvdb | 0:c2f29cde2516 | 217 | { |
tomvdb | 0:c2f29cde2516 | 218 | lcdWrite( LCD_DATA, 0x00); |
tomvdb | 0:c2f29cde2516 | 219 | for ( int i = 0; i < 5; i++) |
tomvdb | 0:c2f29cde2516 | 220 | { |
tomvdb | 0:c2f29cde2516 | 221 | lcdWrite(LCD_DATA, ASCII[ch - 0x20][i]); |
tomvdb | 0:c2f29cde2516 | 222 | } |
tomvdb | 0:c2f29cde2516 | 223 | lcdWrite( LCD_DATA, 0x00); |
tomvdb | 0:c2f29cde2516 | 224 | } |
tomvdb | 0:c2f29cde2516 | 225 | |
tomvdb | 0:c2f29cde2516 | 226 | void lcdGlyph( uint8_t glyph[] ) |
tomvdb | 0:c2f29cde2516 | 227 | { |
tomvdb | 0:c2f29cde2516 | 228 | lcdWrite( LCD_DATA, 0x00); |
tomvdb | 0:c2f29cde2516 | 229 | for ( int i = 0; i < 5; i++) |
tomvdb | 0:c2f29cde2516 | 230 | { |
tomvdb | 0:c2f29cde2516 | 231 | lcdWrite(LCD_DATA, glyph[i]); |
tomvdb | 0:c2f29cde2516 | 232 | } |
tomvdb | 0:c2f29cde2516 | 233 | lcdWrite( LCD_DATA, 0x00); |
tomvdb | 0:c2f29cde2516 | 234 | } |
tomvdb | 0:c2f29cde2516 | 235 | |
tomvdb | 0:c2f29cde2516 | 236 | void lcdClear(void) |
tomvdb | 0:c2f29cde2516 | 237 | { |
tomvdb | 0:c2f29cde2516 | 238 | for ( int i = 0; i < ( 84 * 48 ) / 8; i++) |
tomvdb | 0:c2f29cde2516 | 239 | { |
tomvdb | 0:c2f29cde2516 | 240 | lcdWrite(LCD_DATA, 0x00); |
tomvdb | 0:c2f29cde2516 | 241 | } |
tomvdb | 0:c2f29cde2516 | 242 | } |
tomvdb | 0:c2f29cde2516 | 243 | |
tomvdb | 0:c2f29cde2516 | 244 | void lcdStr( char *msg ) |
tomvdb | 0:c2f29cde2516 | 245 | { |
tomvdb | 0:c2f29cde2516 | 246 | while (*msg) |
tomvdb | 0:c2f29cde2516 | 247 | { |
tomvdb | 0:c2f29cde2516 | 248 | lcdChar(*msg++); |
tomvdb | 0:c2f29cde2516 | 249 | } |
tomvdb | 0:c2f29cde2516 | 250 | } |
tomvdb | 0:c2f29cde2516 | 251 | |
tomvdb | 0:c2f29cde2516 | 252 | //------------------------------------ |
tomvdb | 0:c2f29cde2516 | 253 | // Hyperterminal configuration |
tomvdb | 0:c2f29cde2516 | 254 | // 9600 bauds, 8-bit data, no parity |
tomvdb | 0:c2f29cde2516 | 255 | //------------------------------------ |
tomvdb | 0:c2f29cde2516 | 256 | |
tomvdb | 0:c2f29cde2516 | 257 | Serial pc(SERIAL_TX, SERIAL_RX); |
tomvdb | 0:c2f29cde2516 | 258 | |
tomvdb | 0:c2f29cde2516 | 259 | DigitalOut myled(LED1); |
tomvdb | 0:c2f29cde2516 | 260 | |
tomvdb | 0:c2f29cde2516 | 261 | int main() { |
tomvdb | 0:c2f29cde2516 | 262 | |
tomvdb | 0:c2f29cde2516 | 263 | lcdInit(); |
tomvdb | 0:c2f29cde2516 | 264 | |
tomvdb | 0:c2f29cde2516 | 265 | lcdClear(); |
tomvdb | 0:c2f29cde2516 | 266 | lcdXY(0,0); |
tomvdb | 0:c2f29cde2516 | 267 | lcdBender(); |
tomvdb | 0:c2f29cde2516 | 268 | |
tomvdb | 0:c2f29cde2516 | 269 | // lcdXY( 1, 2 ); |
tomvdb | 0:c2f29cde2516 | 270 | // lcdStr( "Hello World"); |
tomvdb | 0:c2f29cde2516 | 271 | |
tomvdb | 0:c2f29cde2516 | 272 | while(1) { |
tomvdb | 0:c2f29cde2516 | 273 | wait(1); |
tomvdb | 0:c2f29cde2516 | 274 | myled = !myled; |
tomvdb | 0:c2f29cde2516 | 275 | } |
tomvdb | 0:c2f29cde2516 | 276 | } |
tomvdb | 0:c2f29cde2516 | 277 |