lcdcmd - Anobium/Great-Cow-BASIC-Help GitHub Wiki
Syntax:
LCDCMD value
Command Availability:
Available on all microcontrollers.
Explanation:
This command set LCD specific instructions to the LCD display. As shown in the table below.
INSTRUCTION | Decimal | Hexadecimal |
---|---|---|
Scroll display one character right (all lines) | 28 | 1E |
Scroll display one character left (all lines) | 24 | 18 |
Home (move cursor to top/left character position) | 2 | 2 |
Move cursor one character left | 16 | 10 |
Move cursor one character right | 20 | 14 |
Turn on visible underline cursor | 14 | 0E |
Turn on visible blinking-block cursor | 15 | 0F |
Make cursor invisible | 12 | 0C |
Blank the display (without clearing) | 8 | 08 |
Restore the display (with cursor hidden) | 12 | 0C |
Clear Screen | 1 | 01 |
Set cursor position (DDRAM address) | 128 + addr | 80+ addr |
Set pointer in character-generator RAM (CG RAM address) | 64 + addr | 40+ addr |
Example 1:
;Chip Settings
#chip 16F88,8
;Defines (Constants)
#define LCD_IO 4
#define LCD_RS PORTA.6
#define LCD_NO_RW
#define LCD_Enable PORTA.7
#define LCD_DB4 PORTB.4
#define LCD_DB5 PORTB.5
#define LCD_DB6 PORTB.6
#define LCD_DB7 PORTB.7
Locate 0,0
Print "Reset"
wait 1 s
cls
LCD_Command_Tests:
locate 0,8
print "123456"
'Scroll display one character right (all lines) 28
'
lcdcmd 28
wait 1 s
lcdcmd 28
wait 1 s
lcdcmd 28
wait 1 s
lcdcmd 28
wait 1 s
'Scroll display one character left (all lines) 24
'
lcdcmd 24
wait 1 s
lcdcmd 24
wait 1 s
lcdcmd 24
wait 1 s
lcdcmd 24
wait 1 s
'Home (move cursor to top/left character position) 2
'
lcdcursor flash
lcdcmd 2
wait 1 s
'Move cursor one character left 16
'
lcdcursor flash
locate 0,8
lcdcmd 16
wait 1 s
lcdcmd 16
wait 1 s
lcdcmd 16
wait 1 s
lcdcmd 16
wait 1 s
'Move cursor one character right 20
'
lcdcmd 20
wait 1 s
lcdcmd 20
wait 1 s
lcdcmd 20
wait 1 s
lcdcmd 20
wait 1 s
Example 2:
#chip 16F877A,20
#option Explicit
'Use LCD in 4 pin mode and define LCD pins
#define LCD_IO 4
#define LCD_RW PORTE.1
#define LCD_RS PORTE.0
#define LCD_Enable PORTE.2
#define LCD_DB4 PORTD.4
#define LCD_DB5 PORTD.5
#define LCD_DB6 PORTD.6
#define LCD_DB7 PORTD.7
;Here are various LCD commands which can be used.
;These are the LCD commands for the HD44780 controller
#define clrHome = 1 ;clear the display, home the cursor
#define home = 2 ;home the cursor only
#define RtoL = 4 ;print characters right to left
#define insR = 5 ;insert characters to right
#define LtoR = 6 ;print characters left to right
#define insL = 7 ;insert characters to left
#define lcdOff = 8 ;LCD screen off
#define lcdOn = 12 ;LCD screen on, no cursor
#define curOff = 12 ;an alias for the above
#define block = 13 ;LCD screen on, block cursor
#define under = 14 ;LCD screen on, underline cursor
#define undblk = 15 ;LCD screen on, blinking and underline cursor
#define CLeft = 16 ;cursor left
#define CRight = 20 ;cursor right
#define panR = 24 ;pan viewing window right
#define panL = 28 ;pan viewing window left
#define bus4 = 32 ;4-bit data bus mode
#define bus8 = 48 ;8-bit data bus mode
#define mode1 = 32 ;one-line mode (alias)
#define mode2 = 40 ;two-line mode
#define line1 = 128 ;go to start of line 1
#define line2 = 192 ;go to start of line 2
;----- Variables
dim char, msn, lsn, index, ii as byte
;----- Main Program
LoadEeprom ;load the EEprom with strings
do forever
printMsg(0) ;print first message
wait 3 S ;pause 3 seconds
printMsg(2) ;print next message
wait 3 S ;pause 3 seconds
repeat 5 ;blink it five times
LCDCmd(lcdOff) ;display off
wait 500 mS ;pause
LCDCmd(lcdOn) ;display on
wait 500 mS ;pause
end repeat
wait 1 S ;pause before next demo
;demonstrate panning
printMsg(4) ;print next message
wait 3 S ;pause 3 seconds
repeat 16
LCDCmd(panL) ;pan left a step at a time
wait 300 mS ;slow down to avoid blur
end repeat
repeat 16
LCDCmd(panR) ;then pan right
wait 300 mS
end repeat
wait 1 S ;pause before next demo
;demonstrate moving the cursor
printMsg(6) ;print next message
wait 3 S ;pause 3 seconds
LCDHome
LCDCmd(under) ;choose underline cursor
for ii = 0 to 15 ;move cursor across first line
LCDCmd(line1+ii)
wait 200 mS
next i
for ii = 0 to 15 ;move cursor across second line
LCDCmd(line2+ii)
wait 200 mS
next i
for ii = 15 to 0 step -1 ;move cursor back over second line
LCDCmd(line2+ii)
wait 200 mS
next i
for ii = 15 to 0 step -1 ;move cursor back over first line
LCDCmd(line1+ii)
wait 200 mS
next i
wait 3 S
;demonstrate blinking block cursor
printMsg(8) ;print next message
LCDHome ;home the cursor
LCDCmd(block) ;choose blinking block cursor
wait 4 S ;pause 4 seconds
LCDCmd(mode1) ;change to one long line mode
LCDHome ;home the cursor again
LCDCmd(curOff) ;and disable it
;demonstrate scrolling a lengthy one-line marquee
for ii = 0xd0 to 0xff ;print next message - the remaining EEPROM
EPread ii, char ;fetch directly from eeprom
print chr(char)
next i
wait 1 S
LCDHome ;home cursor once more
repeat 141 ;scroll message twice
LCDCmd(panR)
wait 250 mS
end repeat
wait 2 S
LCDCmd(mode2) ;change back to two line mode
CLS ;clear the screen
;demonstrate all of the characters
printMsg(11) ;print next message
for ii = 33 to 127 ;print first batch of ASCII characters
LCDCmd(line1+12) ;overwrite each character displayed
print chr(ii) ;this is the ASCII code
wait 500 mS
next i
for ii = 161 to 255 ;print next batch of ASCII characters
LCDCmd(line1+12)
print chr(ii)
wait 500 mS
next i
;say good-bye
LCDCmd(line2)
printMsg(11) ;print next message
LCDHome ;home the cursor
loop
end
;----- Print a message to the LCD
;The parameter 'row' points to the start of the string.
sub printMsg(in row as byte, in Optional StringLength As Byte = 15)
Locate 0, 0 ;get set for first line
for ii = 0 to StringLength
index = row*16+ii
EPread index, char ;fetch next character and
print chr(char) ;transmit to the LCD
next
Locate 1,0 ;get set for second line
for ii = 0 to StringLength
index = (row+1)*16+ii
EPread index, char ;fetch next character and
print chr(char) ;transmit to the LCD
next
end sub
sub loadEeprom
' Strings for EEPROM, Strings should be limited to 16 characters for the first 13 sstrings, then a long string to fill eeprom
WriteEeprom "First we'll show"
WriteEeprom "this message. "
WriteEeprom "Then we'll blink"
WriteEeprom "five times. "
WriteEeprom "Now lets pan "
WriteEeprom "left and right. "
WriteEeprom "Watch the line "
WriteEeprom "cursor move. "
WriteEeprom "A block cursor "
WriteEeprom "is available. "
WriteEeprom "Characters: "
WriteEeprom "Bye! "
WriteEeprom "in one line mode"
WriteEeprom "Next well scroll this long message as a marquee"
end sub
; Write to the device eeprom
sub WriteEeprom ( in Estring() )
Dim eeLocation as Byte 'if the EEPROM size was larger than 256 bytes then this would need to be a WORD
for eeLocation = 1 to len ( Estring )
HSersend Estring( eeLocation )
epwrite eeLocation, Estring( eeLocation )
next
end sub
Supported in <LCD.H>