basic example for the nokia lcd 3310 on a nucleo (no spi needed, just 5 io pins)

Dependencies:   mbed

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?

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