SPI Lcd8 (8-bit interface) Library

The mikroBasic PRO for 8051 provides a library for communication with Lcd (with HD44780 compliant controllers) in 8-bit mode via SPI interface.

For creating a custom set of Lcd characters use Lcd Custom Character Tool.

Note: Library uses the SPI module for communication. The user must initialize the SPI module before using the SPI Lcd Library.

Note: This Library is designed to work with mikroElektronika's Serial Lcd/Glcd Adapter Board pinout, see schematic at the bottom of this page for details.

External dependencies of SPI Lcd Library

The implementation of SPI Lcd Library routines is based on Port Expander Library routines.

External dependencies are the same as Port Expander Library external dependencies.

Library Routines

SPI_Lcd8_Config

Prototype

sub procedure SPI_Lcd8_Config(dim DeviceAddress as byte)

Returns

Nothing.

Description

Initializes the Lcd module via SPI interface.

Parameters :

  • DeviceAddress: spi expander hardware address, see schematic at the bottom of this page

Requires

SPExpanderCS and SPExpanderRST variables must be defined before using this function.

The SPI module needs to be initialized. See SPIx_Init and SPIx_Init_Advanced routines.

Example
' port expander pinout definition
dim SPExpanderCS as sbit at P1_1_bit
    SPExpanderRST as sbit at P1_0_bit
...
SPI1_Init()                                ' initialize SPI interface
SPI_Lcd8_Config(0)                         ' intialize Lcd in 8bit mode via SPIs

SPI_Lcd8_Out

Prototype

sub procedure SPI_Lcd8_Out(dim row as byte, dim column as byte, dim byref text as string[19])

Returns

Nothing.

Description

Prints text on Lcd starting from specified position. Both string variables and literals can be passed as a text.

Parameters :

  • row: starting position row number
  • column: starting position column number
  • text: text to be written

Requires

Lcd needs to be initialized for SPI communication, see SPI_Lcd8_Config routines.

Example
' Write text "Hello!" on Lcd starting from row 1, column 3:
SPI_Lcd8_Out(1, 3, "Hello!")

SPI_Lcd8_Out_Cp

Prototype

sub procedure SPI_Lcd8_Out_CP(dim text as string[19])

Returns

Nothing.

Description

Prints text on Lcd at current cursor position. Both string variables and literals can be passed as a text.

Parameters :

  • text: text to be written

Requires

Lcd needs to be initialized for SPI communication, see SPI_Lcd8_Config routines.

Example
' Write text "Here!" at current cursor position:
SPI_Lcd8_Out_CP("Here!")

SPI_Lcd8_Chr

Prototype

sub procedure SPI_Lcd8_Chr(dim Row as byte, dim Column as byte, dim Out_Char as byte)

Returns

Nothing.

Description

Prints character on Lcd at specified position. Both variables and literals can be passed as character.

Parameters :

  • row: writing position row number
  • column: writing position column number
  • out_char: character to be written

Requires

Lcd needs to be initialized for SPI communication, see SPI_Lcd8_Config routines.

Example
' Write character "i" at row 2, column 3:
SPI_Lcd8_Chr(2, 3, 'i')

SPI_Lcd8_Chr_Cp

Prototype

sub procedure SPI_Lcd8_Chr_CP(dim Out_Char as byte)

Returns

Nothing.

Description

Prints character on Lcd at current cursor position. Both variables and literals can be passed as character.

Parameters :

  • out_char: character to be written

Requires

Lcd needs to be initialized for SPI communication, see SPI_Lcd8_Config routines.

Example

Print “e” at current cursor position:

' Write character "e" at current cursor position:
SPI_Lcd8_Chr_Cp('e')

SPI_Lcd8_Cmd

Prototype

sub procedure SPI_Lcd8_Cmd(dim out_char as byte)

Returns

Nothing.

Description

Sends command to Lcd.

Parameters :

  • out_char: command to be sent

Note: Predefined constants can be passed to the function, see Available Lcd Commands.

Requires

Lcd needs to be initialized for SPI communication, see SPI_Lcd8_Config routines.

Example
' Clear Lcd display:
SPI_Lcd8_Cmd(_LCD_CLEAR)

Available Lcd Commands

Lcd Command Purpose
_LCD_FIRST_ROW Move cursor to the 1st row
_LCD_SECOND_ROW Move cursor to the 2nd row
_LCD_THIRD_ROW Move cursor to the 3rd row
_LCD_FOURTH_ROW Move cursor to the 4th row
_LCD_CLEAR Clear display
_LCD_RETURN_HOME Return cursor to home position, returns a shifted display to its original position. Display data RAM is unaffected.
_LCD_CURSOR_OFF Turn off cursor
_LCD_UNDERLINE_ON Underline cursor on
_LCD_BLINK_CURSOR_ON Blink cursor on
_LCD_MOVE_CURSOR_LEFT Move cursor left without changing display data RAM
_LCD_MOVE_CURSOR_RIGHT Move cursor right without changing display data RAM
_LCD_TURN_ON Turn Lcd display on
_LCD_TURN_OFF Turn Lcd display off
_LCD_SHIFT_LEFT Shift display left without changing display data RAM
_LCD_SHIFT_RIGHT Shift display right without changing display data RAM

Library Example

This example demonstrates how to communicate Lcd in 8-bit mode via the SPI module, using serial to parallel convertor MCP23S17.

program SPI_LCD8_Test

dim text as char[16]
dim counter as byte
' Port Expander module connections
dim SPExpanderRST as sbit at P1_0_bit
dim SPExpanderCS  as sbit at P1_1_bit
' End Port Expander module connections

sub procedure Move_Delay()                  ' Function used for text moving
  Delay_ms(500)                             ' You can change the moving speed here
end sub

main:
  text = "mikroE"

  SPI1_Init()                               ' Initialize SPI interface

  '  If Port Expander Library uses SPI2 module
  '  SPI2_Init()                            ' Initialize SPI module used with PortExpander

  SPI_Lcd8_Config(0)                        ' Intialize Lcd in 8bit mode via SPI
  SPI_Lcd8_Cmd(_LCD_CLEAR)                  ' Clear display
  SPI_Lcd8_Cmd(_LCD_CURSOR_OFF)             ' Turn cursor off
  SPI_Lcd8_Out(1,6, text)                   ' Print text to Lcd, 1st row, 6th column...
  SPI_Lcd8_Chr_CP("!")                      ' Append "!"
  SPI_Lcd8_Out(2,1, "mikroelektronika")     ' Print text to Lcd, 2nd row, 1st column...

  ' SPI_Lcd8_Out(3,1, text)              ' For Lcd modules with more than two rows
  ' SPI_Lcd8_Out(4,15, text)             ' For Lcd modules with more than two rows

  Delay_ms(2000)

  ' Moving text
  for counter = 0 to 3                      ' Move text to the right 4 times
      SPI_Lcd8_Cmd(_LCD_SHIFT_RIGHT)
      Move_Delay()
  next counter

  while TRUE                                ' Endless loop
    for counter = 0 to 6                    ' Move text to the left 7 times
      SPI_Lcd8_Cmd(_LCD_SHIFT_LEFT)
      Move_Delay()
    next counter

    for counter = 0 to 6                    ' Move text to the right 7 times
      SPI_Lcd8_Cmd(_LCD_SHIFT_RIGHT)
      Move_Delay()
    next counter
  wend
end.

HW Connection

SPI LCD8 HW connection

SPI LCD8 HW connection

Copyright (c) 2002-2013 mikroElektronika. All rights reserved.
What do you think about this topic ? Send us feedback!
Want more examples and libraries? 
Find them on LibStock - A place for the code