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

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
tomvdb
Date:
Wed Feb 25 11:23:47 2015 +0000
Commit message:
basic example - bit banging the lcd

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 c2f29cde2516 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Feb 25 11:23:47 2015 +0000
@@ -0,0 +1,277 @@
+#include "mbed.h"
+
+/*
+1 vcc - 3v3
+2 gnd - gnd
+3 sce - A0
+4 rst - A1
+5 d/c - A2
+6 dn - A3
+7 sclk - A4
+8 led - 3v3
+*/
+
+DigitalOut LCD_PIN_CLOCK(A4); //sclk
+DigitalOut LCD_PIN_DATA(A3); // dn
+DigitalOut LCD_PIN_COMMAND(A2); // d/c
+DigitalOut LCD_PIN_RESET(A1); // rst
+DigitalOut LCD_PIN_ENABLE(A0); // sce
+
+#define LCD_CMD             0
+#define LCD_DATA            1
+
+static const uint8_t ASCII[][5] =
+{
+ {0x00, 0x00, 0x00, 0x00, 0x00} // 20  
+,{0x00, 0x00, 0x5f, 0x00, 0x00} // 21 !
+,{0x00, 0x07, 0x00, 0x07, 0x00} // 22 "
+,{0x14, 0x7f, 0x14, 0x7f, 0x14} // 23 #
+,{0x24, 0x2a, 0x7f, 0x2a, 0x12} // 24 $
+,{0x23, 0x13, 0x08, 0x64, 0x62} // 25 %
+,{0x36, 0x49, 0x55, 0x22, 0x50} // 26 &
+,{0x00, 0x05, 0x03, 0x00, 0x00} // 27 '
+,{0x00, 0x1c, 0x22, 0x41, 0x00} // 28 (
+,{0x00, 0x41, 0x22, 0x1c, 0x00} // 29 )
+,{0x14, 0x08, 0x3e, 0x08, 0x14} // 2a *
+,{0x08, 0x08, 0x3e, 0x08, 0x08} // 2b +
+,{0x00, 0x50, 0x30, 0x00, 0x00} // 2c ,
+,{0x08, 0x08, 0x08, 0x08, 0x08} // 2d -
+,{0x00, 0x60, 0x60, 0x00, 0x00} // 2e .
+,{0x20, 0x10, 0x08, 0x04, 0x02} // 2f /
+,{0x3e, 0x51, 0x49, 0x45, 0x3e} // 30 0
+,{0x00, 0x42, 0x7f, 0x40, 0x00} // 31 1
+,{0x42, 0x61, 0x51, 0x49, 0x46} // 32 2
+,{0x21, 0x41, 0x45, 0x4b, 0x31} // 33 3
+,{0x18, 0x14, 0x12, 0x7f, 0x10} // 34 4
+,{0x27, 0x45, 0x45, 0x45, 0x39} // 35 5
+,{0x3c, 0x4a, 0x49, 0x49, 0x30} // 36 6
+,{0x01, 0x71, 0x09, 0x05, 0x03} // 37 7
+,{0x36, 0x49, 0x49, 0x49, 0x36} // 38 8
+,{0x06, 0x49, 0x49, 0x29, 0x1e} // 39 9
+,{0x00, 0x36, 0x36, 0x00, 0x00} // 3a :
+,{0x00, 0x56, 0x36, 0x00, 0x00} // 3b ;
+,{0x08, 0x14, 0x22, 0x41, 0x00} // 3c <
+,{0x14, 0x14, 0x14, 0x14, 0x14} // 3d =
+,{0x00, 0x41, 0x22, 0x14, 0x08} // 3e >
+,{0x02, 0x01, 0x51, 0x09, 0x06} // 3f ?
+,{0x32, 0x49, 0x79, 0x41, 0x3e} // 40 @
+,{0x7e, 0x11, 0x11, 0x11, 0x7e} // 41 A
+,{0x7f, 0x49, 0x49, 0x49, 0x36} // 42 B
+,{0x3e, 0x41, 0x41, 0x41, 0x22} // 43 C
+,{0x7f, 0x41, 0x41, 0x22, 0x1c} // 44 D
+,{0x7f, 0x49, 0x49, 0x49, 0x41} // 45 E
+,{0x7f, 0x09, 0x09, 0x09, 0x01} // 46 F
+,{0x3e, 0x41, 0x49, 0x49, 0x7a} // 47 G
+,{0x7f, 0x08, 0x08, 0x08, 0x7f} // 48 H
+,{0x00, 0x41, 0x7f, 0x41, 0x00} // 49 I
+,{0x20, 0x40, 0x41, 0x3f, 0x01} // 4a J
+,{0x7f, 0x08, 0x14, 0x22, 0x41} // 4b K
+,{0x7f, 0x40, 0x40, 0x40, 0x40} // 4c L
+,{0x7f, 0x02, 0x0c, 0x02, 0x7f} // 4d M
+,{0x7f, 0x04, 0x08, 0x10, 0x7f} // 4e N
+,{0x3e, 0x41, 0x41, 0x41, 0x3e} // 4f O
+,{0x7f, 0x09, 0x09, 0x09, 0x06} // 50 P
+,{0x3e, 0x41, 0x51, 0x21, 0x5e} // 51 Q
+,{0x7f, 0x09, 0x19, 0x29, 0x46} // 52 R
+,{0x46, 0x49, 0x49, 0x49, 0x31} // 53 S
+,{0x01, 0x01, 0x7f, 0x01, 0x01} // 54 T
+,{0x3f, 0x40, 0x40, 0x40, 0x3f} // 55 U
+,{0x1f, 0x20, 0x40, 0x20, 0x1f} // 56 V
+,{0x3f, 0x40, 0x38, 0x40, 0x3f} // 57 W
+,{0x63, 0x14, 0x08, 0x14, 0x63} // 58 X
+,{0x07, 0x08, 0x70, 0x08, 0x07} // 59 Y
+,{0x61, 0x51, 0x49, 0x45, 0x43} // 5a Z
+,{0x00, 0x7f, 0x41, 0x41, 0x00} // 5b [
+,{0x02, 0x04, 0x08, 0x10, 0x20} // 5c ¥
+,{0x00, 0x41, 0x41, 0x7f, 0x00} // 5d ]
+,{0x04, 0x02, 0x01, 0x02, 0x04} // 5e ^
+,{0x40, 0x40, 0x40, 0x40, 0x40} // 5f _
+,{0x00, 0x01, 0x02, 0x04, 0x00} // 60 `
+,{0x20, 0x54, 0x54, 0x54, 0x78} // 61 a
+,{0x7f, 0x48, 0x44, 0x44, 0x38} // 62 b
+,{0x38, 0x44, 0x44, 0x44, 0x20} // 63 c
+,{0x38, 0x44, 0x44, 0x48, 0x7f} // 64 d
+,{0x38, 0x54, 0x54, 0x54, 0x18} // 65 e
+,{0x08, 0x7e, 0x09, 0x01, 0x02} // 66 f
+,{0x0c, 0x52, 0x52, 0x52, 0x3e} // 67 g
+,{0x7f, 0x08, 0x04, 0x04, 0x78} // 68 h
+,{0x00, 0x44, 0x7d, 0x40, 0x00} // 69 i
+,{0x20, 0x40, 0x44, 0x3d, 0x00} // 6a j 
+,{0x7f, 0x10, 0x28, 0x44, 0x00} // 6b k
+,{0x00, 0x41, 0x7f, 0x40, 0x00} // 6c l
+,{0x7c, 0x04, 0x18, 0x04, 0x78} // 6d m
+,{0x7c, 0x08, 0x04, 0x04, 0x78} // 6e n
+,{0x38, 0x44, 0x44, 0x44, 0x38} // 6f o
+,{0x7c, 0x14, 0x14, 0x14, 0x08} // 70 p
+,{0x08, 0x14, 0x14, 0x18, 0x7c} // 71 q
+,{0x7c, 0x08, 0x04, 0x04, 0x08} // 72 r
+,{0x48, 0x54, 0x54, 0x54, 0x20} // 73 s
+,{0x04, 0x3f, 0x44, 0x40, 0x20} // 74 t
+,{0x3c, 0x40, 0x40, 0x20, 0x7c} // 75 u
+,{0x1c, 0x20, 0x40, 0x20, 0x1c} // 76 v
+,{0x3c, 0x40, 0x30, 0x40, 0x3c} // 77 w
+,{0x44, 0x28, 0x10, 0x28, 0x44} // 78 x
+,{0x0c, 0x50, 0x50, 0x50, 0x3c} // 79 y
+,{0x44, 0x64, 0x54, 0x4c, 0x44} // 7a z
+,{0x00, 0x08, 0x36, 0x41, 0x00} // 7b {
+,{0x00, 0x00, 0x7f, 0x00, 0x00} // 7c |
+,{0x00, 0x41, 0x36, 0x08, 0x00} // 7d }
+,{0x10, 0x08, 0x08, 0x10, 0x08} // 7e ←
+,{0x00, 0x06, 0x09, 0x09, 0x06} // 7f →
+};
+
+static uint8_t bender [] = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8,
+0xFC, 0xFF, 0xDF, 0xAF, 0x55, 0x80, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00,
+0x55, 0x00, 0x55, 0x00, 0x55, 0x80, 0xD5, 0x80, 0xD5, 0xE0, 0xF5, 0x60, 0x75, 0x70, 0x75, 0x60,
+0x75, 0xE0, 0xD5, 0x80, 0xD5, 0x00, 0x55, 0x00, 0x55, 0x00, 0x57, 0x07, 0x5E, 0x3C, 0x70, 0xF0,
+0xE0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x03, 0x5F, 0xFF, 0xFF, 0xFF, 0xD7, 0xEE, 0xD5, 0xE8, 0xD5, 0xA0, 0xD5, 0x80,
+0xD5, 0xC0, 0xF5, 0xE0, 0xBD, 0xF8, 0xDF, 0xEE, 0x7F, 0x3B, 0x3F, 0x0F, 0x0F, 0x06, 0x06, 0x06,
+0x06, 0x06, 0x0C, 0x0C, 0x38, 0x38, 0xF1, 0xC1, 0xC3, 0x07, 0x07, 0x3C, 0x3D, 0xF8, 0xF5, 0xC0,
+0x55, 0x00, 0x55, 0x00, 0x55, 0x03, 0x57, 0x1E, 0x7C, 0xF0, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0xC7, 0xFF, 0xFD, 0x7A,
+0xDD, 0xFE, 0xFF, 0x77, 0x7F, 0x3C, 0x7E, 0x3F, 0x3F, 0x3F, 0x7F, 0xFF, 0x80, 0x80, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0F, 0x8F, 0xC4, 0xE0, 0x7D, 0x3F, 0x1F, 0x00, 0x00, 0x00,
+0x80, 0x80, 0xE1, 0xE7, 0x7F, 0x3E, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x01,
+0x57, 0x0F, 0x5C, 0x78, 0x70, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xE0, 0xF0, 0xBC, 0xDF, 0xEF,
+0xF7, 0xFF, 0xFF, 0xFF, 0x47, 0x03, 0x01, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xE0, 0x00, 0x01,
+0x07, 0x07, 0x0E, 0xCC, 0xCC, 0xFC, 0x7C, 0x3C, 0x1C, 0x0E, 0x07, 0x83, 0xC1, 0xE0, 0x70, 0x30,
+0x78, 0x1C, 0x5C, 0x0F, 0x57, 0x03, 0xD5, 0xC0, 0xD5, 0xE0, 0x75, 0x30, 0x35, 0xB8, 0xDD, 0xF8,
+0xFD, 0xF8, 0xFD, 0xB8, 0x35, 0x30, 0xF5, 0xC0, 0xD5, 0x03, 0x57, 0x0F, 0x5F, 0xBC, 0xF0, 0xF0,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF,
+0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFC, 0xF8, 0xF0, 0xF0, 0xF0, 0xE1,
+0xF1, 0xF0, 0x78, 0xB8, 0x5E, 0x2E, 0x57, 0x81, 0xD1, 0xE8, 0xF4, 0xB8, 0xFC, 0xBE, 0x77, 0xA3,
+0x55, 0x80, 0xD5, 0xC0, 0xF5, 0x78, 0x3D, 0xBE, 0xFF, 0xE6, 0xF3, 0xF9, 0x1D, 0x0D, 0x07, 0x07,
+0x0F, 0xF9, 0xF9, 0xF0, 0xF0, 0xB8, 0x19, 0x1F, 0xC6, 0xCE, 0xFB, 0xFB, 0x7F, 0xE8, 0xF5, 0xFE,
+0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x1F, 0x1F, 0x1F, 0x3B, 0x77, 0x7F, 0x7F, 0x6F, 0x7F, 0x7F,
+0x7F, 0x3F, 0x3F, 0x3B, 0x1D, 0x1C, 0x1D, 0x1E, 0x1F, 0x0E, 0x1F, 0x0F, 0x1F, 0x3F, 0x7D, 0xEE,
+0xFF, 0xFE, 0xF7, 0xEA, 0x7F, 0x7F, 0x7F, 0x3F, 0x1F, 0x1E, 0x7F, 0xE3, 0xC1, 0xE0, 0xF1, 0x73,
+0x1F, 0x1E, 0x9F, 0xFB, 0xF3, 0x60, 0x70, 0xFC, 0xDD, 0xEF, 0xD7, 0xE3, 0xD7, 0xE1, 0xD5, 0xF8,
+0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+};
+
+void lcdWrite(uint8_t dataOrCommand, uint8_t value)
+{
+  if (dataOrCommand)
+    LCD_PIN_COMMAND = 1;
+  else
+    LCD_PIN_COMMAND = 0;
+
+  LCD_PIN_ENABLE = 0;
+
+  int i;
+  for (i = 0; i < 8; i++)
+  {
+    LCD_PIN_CLOCK = 0;
+    if (value & 0x80)
+      LCD_PIN_DATA = 1;
+    else
+      LCD_PIN_DATA = 0;
+    value <<= 1;
+    LCD_PIN_CLOCK=1;
+
+  }
+
+  LCD_PIN_ENABLE = 1;
+}
+
+void lcdBender(void)
+{
+  for ( int i = 0; i < ( 84 * 48 ) / 8; i++)
+  {
+    lcdWrite(LCD_DATA, bender[i]);
+  }
+}
+
+void lcdInit()
+{
+    // Reset LCD
+  
+  LCD_PIN_RESET = 1;
+  wait_ms(10);
+  LCD_PIN_RESET = 0;
+  wait_ms(10);
+  LCD_PIN_RESET = 1;
+
+  // Initialize LCD state
+  lcdWrite(LCD_CMD, 0x21); // LCD Extended Commands.
+  lcdWrite(LCD_CMD, 0xB1); // Set LCD Vop (Contrast).
+  lcdWrite(LCD_CMD, 0x04); // Set Temp coefficent.
+  lcdWrite(LCD_CMD, 0x15); // LCD bias mode
+  lcdWrite(LCD_CMD, 0x20);
+  lcdWrite(LCD_CMD, 0x0C); // LCD in normal mode.    
+}
+
+void lcdXY( uint8_t x, uint8_t y)
+{
+  lcdWrite( 0, 0x80 | x);
+  lcdWrite( 0, 0x40 | y);
+}
+
+void lcdChar(char ch)
+{
+  lcdWrite( LCD_DATA, 0x00);
+  for ( int i = 0; i < 5; i++)
+  {
+    lcdWrite(LCD_DATA, ASCII[ch - 0x20][i]);
+  }
+  lcdWrite( LCD_DATA, 0x00);
+}
+
+void lcdGlyph( uint8_t glyph[] )
+{
+  lcdWrite( LCD_DATA, 0x00);
+  for ( int i = 0; i < 5; i++)
+  {
+    lcdWrite(LCD_DATA, glyph[i]);
+  }
+  lcdWrite( LCD_DATA, 0x00);  
+}
+
+void lcdClear(void)
+{
+  for ( int i = 0; i < ( 84 * 48 ) / 8; i++)
+  {
+    lcdWrite(LCD_DATA, 0x00);
+  }
+}
+
+void lcdStr( char *msg )
+{
+  while (*msg)
+  {
+    lcdChar(*msg++);
+  }
+}
+
+//------------------------------------
+// Hyperterminal configuration
+// 9600 bauds, 8-bit data, no parity
+//------------------------------------
+
+Serial pc(SERIAL_TX, SERIAL_RX);
+ 
+DigitalOut myled(LED1);
+ 
+int main() {
+  
+  lcdInit();
+  
+  lcdClear();
+  lcdXY(0,0);
+  lcdBender();  
+  
+ // lcdXY( 1, 2 );
+//  lcdStr( "Hello World");
+  
+  while(1) { 
+      wait(1);
+      myled = !myled;
+  }
+}
+ 
\ No newline at end of file
diff -r 000000000000 -r c2f29cde2516 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed Feb 25 11:23:47 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/9ad691361fac
\ No newline at end of file