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
Revision 1:b7d7b8522b73, committed 2014-02-14
- 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