SYMBOL DAT = 1 ; Pin number of DAT line
SYMBOL CLK = 0 ; Pin number of CLK line
SYMBOL DAT_PIN = pin1 ; Pin number of DAT line
SYMBOL CLK_PULSE_LENGTH = 1 ; 10uS
SYMBOL E_PULSE_LENGTH = 1 ; 10uS
SYMBOL RSCMDmask = %00000000 ; Select Command register
SYMBOL RSDATmask = %00001000 ; Select Data register
SYMBOL counter = b2
SYMBOL get = b9
SYMBOL outbyte = b10
SYMBOL dataOut = b11
SYMBOL bitNumber = b12
SYMBOL rsbit = b13
SYMBOL CLR = 2 ; Pin number of CLR line
SYMBOL CLR_PULSE_LENGTH = 1 ; 10uS
PowerOnReset:
GOSUB InitialiseLcd
Goto Main
END
Main:
outbyte = $80
gosub SendCmdByte
For counter = 0 to 4
lookup counter, ("Hello World"), outbyte
gosub SendDataByte
next counter
outbyte = "A"
gosub SendDataByte
goto main
InitialiseLcd:
FOR get = 0 TO 5
READ get,outbyte
GOSUB SendInitCmdByte
NEXT
' Nibble commands - To initialise 4-bit mode
EEPROM 0,( $33 ) ; %001?---- %001L---- Display Format
EEPROM 1,( $32 )
' Byte commands - To configure the LCD
EEPROM 2,( $28 ) ; %00101000 %001LNF00 Display Format
EEPROM 3,( $0C ) ; %00001100 %00001DCB Display On
EEPROM 4,( $06 ) ; %00000110 %000001IS Cursor Move
; L : 0 = 4-bit Mode 1 = 8-bit Mode
; N : 0 = 1 Line 1 = 2 Lines
; F : 0 = 5x7 Pixels 1 = N/A
; D : 0 = Display Off 1 = Display On
; C : 0 = Cursor Off 1 = Cursor On
; B : 0 = Cursor Steady 1 = Cursor Flash
; I : 0 = Dec Cursor 1 = Inc Cursor
; S : 0 = Cursor Move 1 = Display Shift
EEPROM 5,( $01 ) ; Clear Screen
RETURN
SendInitCmdByte:
PAUSE 15 ; Delay 15mS
SendCmdByte:
rsbit = RSCMDmask ; Send to Command register
SendDataByte:
dataOut = outbyte & %11110000 | rsbit
GOSUB TransferTo74LS164
dataOut = outbyte * %00010000 | rsbit
GOSUB TransferTo74LS164
rsbit = RSDATmask ; Send to Data register next
RETURN
TransferTo74LS164:
PULSOUT CLR,CLR_PULSE_LENGTH ; Clear 74LS164
HIGH DAT ; Transfer data
PULSOUT CLK,CLK_PULSE_LENGTH
FOR bitNumber = 0 TO 6
DAT_PIN = dataOut / $80
PULSOUT CLK,CLK_PULSE_LENGTH
dataOut = dataOut * 2
NEXT
PULSOUT DAT,E_PULSE_LENGTH ; Pulse E
RETURN ; Completed transfer