LCD Display module 12864ZW (ST7920). This is a simple serial (SPI) interface demo using Freescale KL25Z and LCD module. One of the possible manuals can be found at: http://www.digole.com/images/file/Digole_12864_LCD.pdf

Files at this revision

API Documentation at this revision

Comitter:
batrado
Date:
Fri Feb 14 07:33:58 2014 +0000
Parent:
0:01ba9e985849
Commit message:
????? ?????? ?? ??????? ?? ?????????? ?? LCD 12864ZW.

Changed in this revision

12864ZW.cpp Show diff for this revision Revisions of this file
12864ZW_DEMO/12864ZW.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r 01ba9e985849 -r b7d7b8522b73 12864ZW.cpp
--- a/12864ZW.cpp	Fri Feb 14 07:30:55 2014 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,118 +0,0 @@
-/*
-  ST7920 12864ZB LCD module via the clock synchronized serial interface.
-
-  Data sheet for 12864ZB lcd display module:
-    http://www.digole.com/images/file/Digole_12864_LCD.pdf
-  
-  LCD Pin Configurations:
-    |-----|------|--------|-------|
-    | LCD | DESCRIPTIONS  | KL25Z |
-    | PIN |SERIAL|PARALLEL|  PIN  |
-    | ----|------|--------|-------|
-    | VSS | GND  |  GND   | GND   |
-    | VDD | 5V   |  5V    | 5V    |
-    | RS  | CS   |  RS    | PTC17 |
-    | R/W | SID  |  RW    | PTD2  |
-    | E   | SCLK |  E     | PTD1  |
-    | BLA | 5V   |  5V    | 5V    |
-    | BLK | GND  |  GND   | GND   |
-    |-----|------|--------|-------|
-
- */
-
-#include "mbed.h"
-
-SPI spi(PTD2, PTD3, PTD1); // The default format is set to 8-bits, mode 0, and a clock frequency of 1MHz
-
-DigitalOut PinRS(PTC17);
-
-/*
-  Timing Diagram of Serial Mode Data Transfer on p.20
-
- |-------------------|------------------------|------------------------|
- |  Synchronizing    | 1-st Byte Higher data  |  2-nd Byte Lower data  |
- |-------------------|------------------------|------------------------|
- | 1 1 1 1 1 RW RS 0 | D7 D6 D5 D4  0  0  0  0| D3 D2 D1 D0  0  0  0  0|
- |-------------------|------------------------|------------------------|
-*/
-
-void InstructionRegsiter(uint8_t inst)
-{
-    spi.write(0xf8);        // Sync.    - 1  1  1  1  1  0  0  0
-    spi.write(inst & 0xf0); // HighData - D7 D6 D5 D4 0  0  0  0
-    spi.write(inst << 4);   // LowData  - D3 D2 D1 D0 0  0  0  0
-    // According to table "Instruction Set 1: (RE=0: Basic Instruction)" on p.10
-    if (inst == 0x01) {
-        wait_ms(1.6);
-    } else {
-        wait_us(72);
-    }
-}
-
-void DataRegister(uint8_t data)
-{
-    spi.write(0xfa);        // Sync.    - 1  1  1  1  1  0  1  0
-    spi.write(data & 0xf0); // HighData - D7 D6 D5 D4 0  0  0  0
-    spi.write(data << 4);   // LowData  - D3 D2 D1 D0 0  0  0  0
-    wait_us(72);
-}
-
-// Manual p.28
-void ResetLCD()
-{
-    //Function set [DL=1 8-bit interface; DL=0 4-bit interface;
-    //              RE=1: extended instruction; RE=0: basic instruction]
-    // RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
-    //  0  0   0   0   1  DL   X  RE   0   0
-    InstructionRegsiter(0x30);
-    wait_us(100);
-    //Function set [DL=1 8-bit interface; DL=0 4-bit interface;
-    //              RE=1: extended instruction; RE=0: basic instruction]
-    // RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
-    //  0  0   0   0   1  DL   X  RE   0   0
-    InstructionRegsiter(0x30);
-    wait_us(47);
-    // DisplayControl [D=1: Display ON; C=1: Cursor ON; B=1: Character Blink ON]
-    // RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
-    //  0  0   0   0   0   0   1   D   C   B
-    InstructionRegsiter(0x0c);
-    wait_us(100);
-    // Display Clear
-    InstructionRegsiter(0x01);
-    wait_ms(10);
-    //Set cursor position and display shift when doing write or read operation
-    // RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
-    //  0  0   0   0   0   0   0   1 I/D   S
-    InstructionRegsiter(0x06);
-}
-
-int main()
-{   
-    // For a minimal system with only one ST7920 and one MPU, only SCLK and SID pins are necessary.
-    // CS pin should pull to high.
-    PinRS = 1;
-
-    ResetLCD();
-    
-    while (true) {
-        InstructionRegsiter(0x01); // Display Clear, AC = 0
-        InstructionRegsiter(0x80); 
-        // List the build in font 1/2 - Table 6 on p.8
-        for (uint8_t r = 0x00; r < 0x04; r++) {
-            for (uint8_t c = 0x00; c < 0x10; c++) {
-                DataRegister(r<<4|c);
-            }
-        }
-        wait_ms(2000);
-
-        InstructionRegsiter(0x01); // Display Clear, AC = 0      
-        InstructionRegsiter(0x80); 
-        // List the build in font 2/2 - Table 6 on p.8
-        for (uint8_t r = 0x04; r < 0x08; r++) {
-            for (uint8_t c = 0x00; c < 0x10; c++) {
-                DataRegister(r<<4|c);
-            }
-        }            
-        wait_ms(2000);
-    }
-}
\ No newline at end of file
diff -r 01ba9e985849 -r b7d7b8522b73 12864ZW_DEMO/12864ZW.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/12864ZW_DEMO/12864ZW.cpp	Fri Feb 14 07:33:58 2014 +0000
@@ -0,0 +1,118 @@
+/*
+  ST7920 12864ZB LCD module via the clock synchronized serial interface.
+
+  Data sheet for 12864ZB lcd display module:
+    http://www.digole.com/images/file/Digole_12864_LCD.pdf
+  
+  LCD Pin Configurations:
+    |-----|------|--------|-------|
+    | LCD | DESCRIPTIONS  | KL25Z |
+    | PIN |SERIAL|PARALLEL|  PIN  |
+    | ----|------|--------|-------|
+    | VSS | GND  |  GND   | GND   |
+    | VDD | 5V   |  5V    | 5V    |
+    | RS  | CS   |  RS    | PTC17 |
+    | R/W | SID  |  RW    | PTD2  |
+    | E   | SCLK |  E     | PTD1  |
+    | BLA | 5V   |  5V    | 5V    |
+    | BLK | GND  |  GND   | GND   |
+    |-----|------|--------|-------|
+
+ */
+
+#include "mbed.h"
+
+SPI spi(PTD2, PTD3, PTD1); // The default format is set to 8-bits, mode 0, and a clock frequency of 1MHz
+
+DigitalOut PinRS(PTC17);
+
+/*
+  Timing Diagram of Serial Mode Data Transfer on p.20
+
+ |-------------------|------------------------|------------------------|
+ |  Synchronizing    | 1-st Byte Higher data  |  2-nd Byte Lower data  |
+ |-------------------|------------------------|------------------------|
+ | 1 1 1 1 1 RW RS 0 | D7 D6 D5 D4  0  0  0  0| D3 D2 D1 D0  0  0  0  0|
+ |-------------------|------------------------|------------------------|
+*/
+
+void InstructionRegsiter(uint8_t inst)
+{
+    spi.write(0xf8);        // Sync.    - 1  1  1  1  1  0  0  0
+    spi.write(inst & 0xf0); // HighData - D7 D6 D5 D4 0  0  0  0
+    spi.write(inst << 4);   // LowData  - D3 D2 D1 D0 0  0  0  0
+    // According to table "Instruction Set 1: (RE=0: Basic Instruction)" on p.10
+    if (inst == 0x01) {
+        wait_ms(1.6);
+    } else {
+        wait_us(72);
+    }
+}
+
+void DataRegister(uint8_t data)
+{
+    spi.write(0xfa);        // Sync.    - 1  1  1  1  1  0  1  0
+    spi.write(data & 0xf0); // HighData - D7 D6 D5 D4 0  0  0  0
+    spi.write(data << 4);   // LowData  - D3 D2 D1 D0 0  0  0  0
+    wait_us(72);
+}
+
+// Manual p.28
+void ResetLCD()
+{
+    //Function set [DL=1 8-bit interface; DL=0 4-bit interface;
+    //              RE=1: extended instruction; RE=0: basic instruction]
+    // RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
+    //  0  0   0   0   1  DL   X  RE   0   0
+    InstructionRegsiter(0x30);
+    wait_us(100);
+    //Function set [DL=1 8-bit interface; DL=0 4-bit interface;
+    //              RE=1: extended instruction; RE=0: basic instruction]
+    // RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
+    //  0  0   0   0   1  DL   X  RE   0   0
+    InstructionRegsiter(0x30);
+    wait_us(47);
+    // DisplayControl [D=1: Display ON; C=1: Cursor ON; B=1: Character Blink ON]
+    // RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
+    //  0  0   0   0   0   0   1   D   C   B
+    InstructionRegsiter(0x0c);
+    wait_us(100);
+    // Display Clear
+    InstructionRegsiter(0x01);
+    wait_ms(10);
+    //Set cursor position and display shift when doing write or read operation
+    // RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
+    //  0  0   0   0   0   0   0   1 I/D   S
+    InstructionRegsiter(0x06);
+}
+
+int main()
+{   
+    // For a minimal system with only one ST7920 and one MPU, only SCLK and SID pins are necessary.
+    // CS pin should pull to high.
+    PinRS = 1;
+
+    ResetLCD();
+    
+    while (true) {
+        InstructionRegsiter(0x01); // Display Clear, AC = 0
+        InstructionRegsiter(0x80); 
+        // List the build in font 1/2 - Table 6 on p.8
+        for (uint8_t r = 0x00; r < 0x04; r++) {
+            for (uint8_t c = 0x00; c < 0x10; c++) {
+                DataRegister(r<<4|c);
+            }
+        }
+        wait_ms(2000);
+
+        InstructionRegsiter(0x01); // Display Clear, AC = 0      
+        InstructionRegsiter(0x80); 
+        // List the build in font 2/2 - Table 6 on p.8
+        for (uint8_t r = 0x04; r < 0x08; r++) {
+            for (uint8_t c = 0x00; c < 0x10; c++) {
+                DataRegister(r<<4|c);
+            }
+        }            
+        wait_ms(2000);
+    }
+}
\ No newline at end of file