0% found this document useful (0 votes)
188 views14 pages

CG Rom

CG rom

Uploaded by

vijaysataw
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
188 views14 pages

CG Rom

CG rom

Uploaded by

vijaysataw
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 14

LCD Serial Backpack App Note No.

2
Getting Graphic:
Defining Custom LCD Characters
Bl ock graphi cs add new symbol s
and enabl e ani mated effects
ALPHANUMERI C LCDS ar e i nexpensi ve and
easy to use. But there are ti mes when youd l i ke
to add some gr aphi cal pi zzazz to your di spl ay
wi thout the expense and code over head of a
graphi cs di spl ay.
Wi th a l i ttl e i ngenui ty, you may fi nd that the
bl ock-gr aphi cs capabi l i ti es of standar d LCDs
can fi l l the bi l l wi thout busti ng your budget.
Thi s appl i cati on note wi l l show you how to:
Defi ne and use custom characters.
Create si mpl e ani mati ons.
Redefi ne vi si bl e symbol s for compl ex
ani mati ons.
Background. Thi s appl i cati on note i s i ntended
pr i mar i l y for di spl ays equi pped wi th the LCD
Ser i al Backpack

, a daughter boar d that gi ves


14-pi n al phanumeri c LCDs an easy-to-use seri al
i nter face. However , the pr i nci pl es descr i bed
here appl y to standard LCD modul es as wel l .
Character-Generator ROM and RAM. When
you send the ASCI I code for a character l i ke A
to an LCD modul e, the modul es control l er l ooks
up the appr opr i ate 5x8-pi xel patter n i n ROM
(read-onl y memory) and di spl ays that pattern on
the LCD. That char acter -gener ator ROM
contai ns 192 bi t maps cor r espondi ng to the
al phabet, number s, punctuati on, Japanese
Kanji characters, and Greek symbol s.
The ROM i s par t of the mai n LCD contr ol l er
(e.g., HD44780, KS0066, etc.), i s mask -
pr ogr ammed, and cannot be changed by the
user . The manufactur er s do offer al ter nati ve
symbol s sets i n ROM for Eur opean and Asi an
l anguages, but most U.S. di stri butors stock onl y
the standar d char acter set shown i n the LCD
Seri al Backpack manual .
Al phanumer i c LCD contr ol l er s do not al l ow
you to turn i ndi vi dual pi xel s on or offthey just
l et you pi ck a parti cul ar pattern (correspondi ng
to an ASCI I code) and di spl ay i t on the screen.
I f you cant change the ROM and you cant
contr ol pi xel s, how do you cr eate gr aphi cs on
these LCDs? Easy. Ther es a 64-byte hunk of
RAM (r andom-access memor y) that the LCD
contr ol l er uses i n the same way as char acter -
gener ator (CG) ROM. When the contr ol l er
r ecei ves an ASCI I code i n the r ange thats
mapped to the CG RAM, i t uses the bi t patterns
stor ed ther e to di spl ay a patter n on the LCD.
The mai n di fference i s that you can wri te to CG
RAM, ther eby defi ni ng your own gr aphi c
symbol s.
Scott Edwards Electronics / LCD App Note No. 2
2
Use this worksheet to design custom-character bitmaps for alphanumeric LCDs. Color in
the squares representing black pixels. Then, for each row, add the numbers from the tops
of each column in which theres a colored-in square. Write the result in the Data (value)
blank. These are the byte values you will download to CG RAM to create your symbols.
Custom-Symbol Worksheet
Bit Map Data
(value)
1 2 4 8 16
1 2 4 8 16
1 2 4 8 16
1 2 4 8 16
Bit Map Data
(value)
1 2 4 8 16
1 2 4 8 16
1 2 4 8 16
1 2 4 8 16
Figure 2.1 Worksheet for calculating custom-character bitmaps.
Each byte of CG RAM i s mapped to a fi ve-bi t
hori zontal row of pi xel s, and LCD characters are
typi cal l y ei ght r ows hi gh, so 64 bytes of CG
RAM i s enough to defi ne ei ght custom
char acter s. These char acter s cor r espond to
ASCI I codes 0 through 7, whi ch normal l y serve
as contr ol codes for mar ki ng the begi nni ng of a
ser i al tr ansmi ssi on or r i ngi ng the bel l on a
ter mi nal . Si nce these have no meani ng to an
LCD modul e, the desi gner s appr opr i ated them
for CG RAM.
When an LCD i s fi r st power ed up, CG RAM
contai ns r andom bi tsgar bage. LCDs wi th
newer LCD Ser i al Backpacks ar e i ni ti al i zed
wi th a set of wedge- and bl ock-shaped symbol s
that can be used to draw l arge characters on 4-
Scott Edwards Electronics / LCD App Note No. 2
3
l i ne di spl ays; see app note 1 i n thi s ser i es.
Ei ther way, you may over wr i te the CG RAM
wi th your own symbol s.
Writing to CG RAM. As the Backpack manual
shows, wr i ti ng to CG RAM i s a l ot l i ke movi ng
the cursor to a parti cul ar posi ti on on the di spl ay
and di spl ayi ng char acter s at that new l ocati on.
The steps are:
Send the i nstructi on-prefi x byte (254). For
non-Backpack users, thi s i s the same as
setti ng the RS bi t for the next byte. Wi th the
Backpack, RS i s automati cal l y reset after
one byte.
Set the CG RAM address by sendi ng a byte
from 64 to 127 (l ocati ons 063 i n CG RAM).
Send bytes wi th the bi t patterns for your
symbol (s). The LCD control l er automati cal l y
i ncrements CG RAM addresses, just as i t
does cursor posi ti ons on the di spl ay.
To l eave CG RAM, send the i nstructi on
prefi x (byte 254) fol l owed by a val i d di spl ay
address (e.g. 128, 1st character of 1st l i ne);
the cl ear-screen i nstructi on (byte 1); or the
home i nstructi on (byte 2). Now bytes are
once agai n bei ng wri tten to the vi si bl e
porti on of the di spl ay.
The Backpack manual shows an exampl e that
defi nes char acter 0 as a di amond shape and
di spl ays a r ow of di amonds acr oss the scr een.
Fi gur e 2.1 i s a wor ksheet to hel p you cal cul ate
bi t patter ns for your own symbol s. Fi gur e 2.2
shows an exampl e symbol , whi l e l i sti ngs 2.1
thr ough 2.3 ar e PBASI C (Stamps I and I I ) and
QBASI C exampl es that defi ne and use these
symbol s.
Bit Map Data
(value)
1 2 4 8 16
14
16
16
31
27
27
31
0
Figure 2.2 Example custom symbol.
Simple Animation. You can cr eate a sor t of
ani mati on by rapi dl y pri nti ng a seri es of custom
characters at the same screen posi ti on. Program
l i sti ngs 2.4 through 2.6 (BS1, BS2 and QBASI C)
defi ne a rotati ng sti ck symbol usi ng four graphi c
characters and spi n thi s symbol i n the mi ddl e
of the second l i ne of the di spl ay.
Animation in Multiple Locations. Theres a
useful si de effect to the way the LCD control l er
uses CG RAM. Normal l y, we defi ne a pattern i n
CG RAM, then pri nt the character. But you can
al so change the CG RAM for characters that are
al ready on the screen, and thei r appearance wi l l
change. Thi s opens up two neat possi bi l i ti es:
You can create ani mati ons wi th more frames
than the ei ght CG RAM l ocati ons. Si nce new
bi t patterns are l oaded from an external
computer, the onl y l i mi t on the number of
frames i s that computers storage capaci ty.
You can ani mate mul ti pl e screen l ocati ons
si mul taneousl y. Just pri nt the graphi cs
character you want to ani mate i n mul ti pl e
screen l ocati ons, then cycl e di fferent bi t
patterns through i ts CG RAM. Al l i nstances
of that character wi l l change.
Li sti ngs 2.7 through 2.9 show an exampl e of thi s
ki nd of ani mati on i n BS1, BS2 and QBASI C
programs. The second l i ne of the di spl ay i s fi l l ed
wi th char acter 0, then that char acter i s
r edefi ned i n an expandi ng-box patter n. The
resul t i s 16 si mul taneous ani mati ons.
Sources
Scot t E d wa r d s E l ect r on i cs (SE E )
manufactur es and sel l s the LCD Ser i al
Backpack

, a daughter boar d that gi ves 14-pi n


al phanumer i c LCDs an easy-to-use ser i al
i n ter face. Th e Back pack au tomati cal l y
i ni ti al i zes the LCD, r ecei ves ser i al data at a
user -sel ectabl e r ate of 2400 or 9600 baud and
conver ts r ecei ved data i nto LCD-compati bl e
par al l el output. The Backpack suppor ts al l
standar d al phanumer i c LCDs up to 80
characters total (4x20 or 2x40).
Scott Edwards Electronics / LCD App Note No. 2
4
The Backpack i s avai l abl e by i tsel f for
i nstal l ati on on a user -suppl i ed LCD, or
pr ei nstal l ed to one of sever al hi gh-qual i ty
super twi st LCDs. See the catal og for cur r ent
offeri ngs.
SEE al so offers 4x40 seri al LCD modul es wi th
addi ti onal ter mi nal -emul ati on and speci al -
featur es i ncl udi ng automati c l ar ge-number
di spl ay.
You may downl oad a cur r ent SEE catal og
fr om the customer -suppor t FTP ar chi ve:
ftp.nutsvol ts.com, i n pub/nutsvol ts/scott. Or
contact
Scott Edwards Electronics
PO Box 160
Si erra Vi sta, AZ 85635
ph: 520-459-4802 fax: 520-459-0623
' Listing 2.1: GRPHIX1.BAS
' (Defining custom graphics symbols with LCD Backpack & BS1)
' This program demonstrates how to define and use custom
' symbols through the LCD Serial Backpack. The symbol patterns
' are loaded into the LCD from the Stamp's EEPROM. Thereafter,
' whenever you send an ASCII value of 0 - 7 to the LCD, it
' displays the custom symbol defined (until power is turned off).
SYMBOL lcd = 0 ' Serial output to LCD.
SYMBOL I = 254 ' Instruction prefix for LCD.
SYMBOL lcdCls = 1 ' Clear-screen instruction for LCD.
SYMBOL cgRAM = 64 ' Starting point of CG RAM.
SYMBOL line2 = 192 ' Position: start of 2nd line.
SYMBOL count = b11 ' Counter for EEPROM addressing.
SYMBOL char = b10 ' EEPROM byte.
' Custom-character definitions stored as bit patterns in the
' Stamp's EEPROM. Each character is made up of 8 bytes. Each byte
' represents a row of 5 pixels (only the lowest 5 bits are
' actually used). Comments at the end of each EEPROM entry show
' the appearance of the corresponding graphic.
EEPROM (0,4,2,31,2,4,0,0) ' right arrow
EEPROM (0,4,8,31,8,4,0,0) ' left arrow
EEPROM (4,14,21,4,4,0,0,0) ' up arrow
EEPROM (0,0,0,4,4,21,14,4) ' down arrow
EEPROM (8,20,20,8,5,6,5,5) ' single-character "OK"
EEPROM (14,17,17,31,27,27,31,0) ' locked
EEPROM (14,16,16,31,27,27,31,0) ' unlocked
EEPROM (17,18,23,9,19,4,7,0) ' single-character "1/2"
' =====Program begins by downloading custom character patterns
' from EEPROM after a 1-second delay for LCD initialization.
pause 1000 ' Wait a second
serout lcd,n2400,(I,cgRAM) ' Point to character-generator RAM.
for count = 0 to 63 ' For each of 8 chars x 8 bit rows.
read count,char ' Get the bit pattern from EEPROM.
serout lcd,n2400,(char) ' Write the data to LCD CG RAM.
next
Scott Edwards Electronics / LCD App Note No. 2
5
serout lcd,n2400,(I,lcdCls) ' Clear the LCD.
serout lcd,n2400,("CUSTOM GRAPHICS") ' Label top line.
' ============= DEMO PROGRAM ============
' Move to line 2, show custom-character symbols.
serout lcd,n2400,(I,line2)
for count = 0 to 7
serout lcd,n2400,(count," ") ' Print character, then a space.
next
end
' Listing 2.2: GRPHIX1.BS2
' (Defining custom graphics symbols with LCD Backpack & BS2)
' This program demonstrates how to define and use custom
' symbols through the LCD Serial Backpack. The symbol patterns
' are loaded into the LCD from the Stamp's EEPROM. Thereafter,
' whenever you send an ASCII value of 0 - 7 to the LCD, it
' displays the custom symbol defined (until power is turned off).
' Install a jumper at BPS on Backpack for 9600 baud operation
lcd con 0 ' Serial output to LCD.
I con 254 ' Instruction prefix for LCD.
lcdCls con 1 ' Clear-screen instruction for LCD.
cgRAM con 64 ' Starting point of CG RAM.
line2 con 192 ' Position: start of 2nd line.
N9600 con $4054 ' 9600 baud output to Backpack.
cnt var byte ' Counter for EEPROM addressing.
char var byte ' EEPROM byte.
' Custom-character definitions stored as bit patterns in the
' Stamp's EEPROM. Each character is made up of 8 bytes. Each byte
' represents a row of 5 pixels (only the lowest 5 bits are
' actually used). Comments at the end of each EEPROM entry show
' the appearance of the corresponding graphic.
RA data 0,4,2,31,2,4,0,0 ' right arrow
LA data 0,4,8,31,8,4,0,0 ' left arrow
UA data 4,14,21,4,4,0,0,0 ' up arrow
DA data 0,0,0,4,4,21,14,4 ' down arrow
OK data 8,20,20,8,5,6,5,5 ' single-character "OK"
LK data 14,17,17,31,27,27,31,0 ' locked
UL data 14,16,16,31,27,27,31,0 ' unlocked
HF data 17,18,23,9,19,4,7,0 ' single-character "1/2"
' =====Program begins by downloading custom character patterns
' from EEPROM after a 1-second delay for LCD initialization.
pause 1000 ' Wait a second
serout lcd,n9600,[I,cgRAM] ' Point to character-generator RAM.
for cnt = 0 to 63 ' For each of 8 chars x 8 bit rows.
read cnt,char ' Get the bit pattern from EEPROM.
Scott Edwards Electronics / LCD App Note No. 2
6
serout lcd,n9600,[char] ' Write the data to LCD CG RAM.
next
serout lcd,n9600,[I,lcdCls] ' Clear the LCD.
serout lcd,n9600,["CUSTOM GRAPHICS"] ' Label top line.
' ============= DEMO PROGRAM ============
' Move to line 2, show custom-character symbols.
serout lcd,n9600,[I,line2]
for cnt = 0 to 7
serout lcd,n9600,[cnt," "] ' Print character, then a space.
next
end
' Listing 2.3: QGRPHX1.BAS
' (Defining custom graphics with LCD Backpack and QBASIC)
' This program demonstrates how to define and use custom
' symbols through the LCD Serial Backpack. The symbol
' patterns are loaded into the LCD from data tables at the
' end of this QBASIC program. Once the symbols are downloaded,
' they can be displayed by sending an ASCII value of 0 - 7.
' Symbols are stored in the LCD's cg RAM, so they stay in
' memory until LCD power is turned off.
' Install a jumper at BPS on the Backpack to configure it
' for 9600 baud. Connect serial input to PC COM1 (or change
' "OPEN" instruction to other COM port below).
CONST I = 254 ' Instruction prefix for LCD.
CONST lcdCls = 1 ' Clear-screen instruction for LCD.
CONST cgRAM = 64 ' Starting point of CG RAM.
CONST line2 = 192 ' Position: start of 2nd line.
CLS : PRINT "Running custom-graphics demo for LCD Serial Backpack..."
' Set up the serial port: COM1, baud, parity, data bits, stop bits,
' disable all handshaking (CD, CS, DS, OP).
OPEN "com1:9600,N,8,1,CD0,CS0,DS0,OP0" FOR OUTPUT AS #1
PRINT #1, CHR$(I); CHR$(cgRAM); ' Point to CG RAM.
' Write the bit patterns stored in DATA statements below
' into the LCD's CG RAM.
FOR count = 1 TO 64 ' For each of 8 chars x 8 bit rows.
READ char% ' Get the bit pattern from DATA.
PRINT #1, CHR$(char%); ' Write the data to LCD CG RAM.
NEXT
PRINT #1, CHR$(I); CHR$(lcdCls); ' Clear the LCD.
SLEEP 1 ' Delay a second.
PRINT #1, "CUSTOM GRAPHICS"; ' Print label.
PRINT #1, CHR$(I); CHR$(line2); ' Move to line 2.
Scott Edwards Electronics / LCD App Note No. 2
7
FOR count = 0 TO 7
PRINT #1, CHR$(count); " "; ' Print custom symbols 0-7.
NEXT
END
' Custom-character definitions stored as bit patterns in the
' DATA statements. Each character is made up of 8 bytes. Each byte
' represents a row of 5 pixels (only the lowest 5 bits are
' actually used). Comments before each DATA entry describe the
' appearance of the corresponding graphic.
' right arrow:
DATA 0,4,2,31,2,4,0,0
' left arrow:
DATA 0,4,8,31,8,4,0,0
' up arrow:
DATA 4,14,21,4,4,0,0,0
' down arrow:
DATA 0,0,0,4,4,21,14,4
' single-character "OK"
DATA 8,20,20,8,5,6,5,5
' locked (padlock closed)
DATA 14,17,17,31,27,27,31,0
' unlocked (padlock open)
DATA 14,16,16,31,27,27,31,0
' single-character "1/2"
DATA 17,18,23,9,19,4,7,0
' Listing 2.4: ANIM1.BAS (Animation demo with LCD Backpack & BS1)
' This program demonstrates how to create animation by cycling
' through custom graphics characters at a single screen location.
SYMBOL lcd = 0 ' Serial output to LCD.
SYMBOL I = 254 ' Instruction prefix for LCD.
SYMBOL lcdCls = 1 ' Clear-screen instruction for LCD.
SYMBOL cgRAM = 64 ' Starting point of CG RAM.
SYMBOL animPos = 199 ' Position: middle of 2nd line.
SYMBOL char = b11 ' Pointer to animation 'frame.'
SYMBOL count = b10 ' Counter for EEPROM addressing.
' Custom-character definitions stored as bit patterns in the
' Stamp's EEPROM. Each character is made up of 8 bytes. Each byte
' represents a row of 5 pixels (only the lowest 5 bits are
' actually used). Comments at the end of each EEPROM entry show
' the appearance of the corresponding graphic.
EEPROM (4,4,4,4,4,0,0,0) ' |
EEPROM (16,8,4,2,1,0,0,0) ' \
EEPROM (0,0,31,0,0,0,0,0) ' -
EEPROM (1,2,4,8,16,0,0,0) ' /
Scott Edwards Electronics / LCD App Note No. 2
8
' =====Program begins by downloading custom character patterns
' from EEPROM after a 1-second delay for LCD initialization.
pause 1000 ' Wait a second
serout lcd,n2400,(I,cgRAM) ' Point to character-generator RAM.
for count = 0 to 31 ' For each of 8 chars x 8 bit rows.
read count,char ' Get the bit pattern from EEPROM.
serout lcd,n2400,(char) ' Write the data to LCD CG RAM.
next
serout lcd,n2400,(I,lcdCls) ' Clear the LCD.
serout lcd,n2400,(" ANIMATION") ' Label top line.
' ============= DEMO PROGRAM LOOP ============
again:
serout lcd,n2400,(I,animPos,char) ' Move to line 2, show char.
char = char + 1 // 4 ' Next character, range 0-3.
pause 50 ' Short pause.
goto again ' Repeat endlessly.
' Listing 2.5: ANIM1.BS2 (Animation demo with LCD Backpack & BS2)
' This program demonstrates how to create animation by cycling
' through custom graphics characters at a single screen location.
' Install a jumper at BPS on Backpack for 9600 baud operation.
lcd con 0 ' Serial output to LCD.
I con 254 ' Instruction prefix for LCD.
lcdCls con 1 ' Clear-screen instruction for LCD.
cgRAM con 64 ' Starting point of CG RAM.
animPos con 199 ' Position: middle of 2nd line.
n9600 con $4054 ' 9600 baud.
char var byte ' Pointer to animation 'frame.'
cnt var byte ' Counter for EEPROM addressing.
' Custom-character definitions stored as bit patterns in the
' Stamp's EEPROM. Each character is made up of 8 bytes. Each byte
' represents a row of 5 pixels (only the lowest 5 bits are
' actually used). Comments at the end of each EEPROM entry show
' the appearance of the corresponding graphic.
one data 4,4,4,4,4,0,0,0 ' |
two data 16,8,4,2,1,0,0,0 ' \
three data 0,0,31,0,0,0,0,0 ' -
four data 1,2,4,8,16,0,0,0 ' /
' =====Program begins by downloading custom character patterns
' from EEPROM after a 1-second delay for LCD initialization.
pause 1000 ' Wait a second
serout lcd,n9600,[I,cgRAM] ' Point to character-generator RAM.
for cnt = 0 to 31 ' For each of 8 chars x 8 bit rows.
Scott Edwards Electronics / LCD App Note No. 2
9
read cnt,char ' Get the bit pattern from EEPROM.
serout lcd,n9600,[char] ' Write the data to LCD CG RAM.
next
serout lcd,n9600,[I,lcdCls] ' Clear the LCD.
serout lcd,n9600,[" ANIMATION"] ' Label top line.
' ============= DEMO PROGRAM LOOP ============
again:
serout lcd,n9600,[I,animPos,char] ' Move to line 2, show char.
char = char + 1 // 4 ' Next character, range 0-3.
pause 75 ' Short pause.
goto again ' Repeat endlessly.
' Listing 2.6: QANIM1.BAS (Animation demo with LCD Backpack & QBASIC)
' This program demonstrates how to create animation by cycling
' through custom graphics characters at a single screen location.
' Install a jumper at BPS on the Backpack to configure it
' for 9600 baud. Connect serial input to PC COM1 (or change
' "OPEN" instruction to other COM port below).
CONST I = 254 ' Instruction prefix for LCD.
CONST lcdCls = 1 ' Clear-screen instruction for LCD.
CONST cgRAM = 64 ' Starting point of CG RAM.
CONST animPos = 199 ' Position: middle of 2nd line.
CLS : PRINT "Running animation demo for LCD Serial Backpack..."
PRINT "Press ctrl-BREAK to end"
' Set up the serial port: COM1, baud, parity, data bits, stop bits,
' disable all handshaking (CD, CS, DS, OP).
OPEN "com1:9600,N,8,1,CD0,CS0,DS0,OP0" FOR OUTPUT AS #1
PRINT #1, CHR$(I); CHR$(cgRAM); ' Point to CG RAM.
' Write the bit patterns stored in DATA statements below
' into the LCD's CG RAM.
FOR count = 1 TO 32 ' For each of 8 chars x 8 bit rows.
READ char% ' Get the bit pattern from DATA.
PRINT #1, CHR$(char%); ' Write the data to LCD CG RAM.
NEXT
PRINT #1, CHR$(I); CHR$(lcdCls); ' Clear the LCD.
SLEEP 1 ' Delay a second.
PRINT #1, " ANIMATION"; ' Print label.
again:
' Move to middle of line 2 and show animation symbol.
PRINT #1, CHR$(I); CHR$(animPos); CHR$(char%);
char% = (char% + 1) MOD 4 ' Next character, range 0-3.
PLAY "P16" ' Play silent note to pause.
GOTO again ' Repeat endlessly (until Break).
END
Scott Edwards Electronics / LCD App Note No. 2
10
' Custom-character definitions stored as bit patterns in the
' DATA statements. Each character is made up of 8 bytes. Each byte
' represents a row of 5 pixels (only the lowest 5 bits are
' actually used). Comments before each DATA entry describe the
' appearance of the corresponding graphic.
' symbol: |
DATA 4,4,4,4,4,0,0,0
' symbol: \
DATA 16,8,4,2,1,0,0,0
' symbol: -
DATA 0,0,31,0,0,0,0,0
' symbol: /
DATA 1,2,4,8,16,0,0,0
' Listing 2.7: ANIM2.BAS (Animation demo with LCD Backpack & BS1)
' This program demonstrates how to create animation by cycling
' different bit patterns through a single cg RAM location.
' This lets you animate multiple screen locations simultaneously.
SYMBOL lcd = 0 ' Serial output to LCD.
SYMBOL I = 254 ' Instruction prefix for LCD.
SYMBOL lcdCls = 1 ' Clear-screen instruction for LCD.
SYMBOL cgRAM = 64 ' Starting point of CG RAM.
SYMBOL line2 = 192 ' Position: middle of 2nd line.
SYMBOL frame = b11 ' Pointer to animation 'frame.'
SYMBOL count = b10 ' Counter for EEPROM addressing.
SYMBOL cgStart = b9 ' Location of cgRAM data in EEPROM.
SYMBOL cgEnd = b8 ' End of cgRAM data in EEPROM.
SYMBOL cgData = b7 ' Individual byte of cgRAM data.
' Custom-character definitions stored as bit patterns in the
' Stamp's EEPROM. Each character is made up of 8 bytes. Each byte
' represents a row of 5 pixels (only the lowest 5 bits are
' actually used). It's hard to simulate these patterns in text,
' but the progression of patterns is meant to look like an
' expanding square that starts as a dot and grows.
EEPROM (0,0,0,4,0,0,0,0) ' Dot.
EEPROM (0,0,10,4,10,0,0,0) ' larger..
EEPROM (0,0,14,10,14,0,0,0) ' larger..
EEPROM (0,21,10,21,10,21,0,0) ' larger..
EEPROM (0,31,17,17,17,31,0,0) ' larger..
EEPROM (0,21,0,17,0,21,0,0) ' larger.
' =====Program begins by clearing the screen after a 1-second
' delay for LCD initialization. It then downloads first graphic,
' labels the top line of the screen, and prints 15 character 0s
' across the second line. The character 0s will be animated.
pause 1000 ' Wait a second
Scott Edwards Electronics / LCD App Note No. 2
11
serout lcd,n2400,(I,lcdCls) ' Clear the LCD.
frame = 0: gosub newPattern
serout lcd,n2400,(" ANIMATION") ' Label top line.
serout lcd,n2400,(I,line2) ' Move to 2nd line.
for frame = 0 to 15
serout lcd,n2400,(0) ' Print character 0 across 2nd line.
next
' ============= DEMO PROGRAM LOOP ============
again:
frame = frame + 1 // 6 ' Next pattern, range 0-5.
gosub newPattern ' Change character-0 pattern.
pause 100 ' Short pause.
goto again ' Repeat endlessly.
' ============= RELOAD CUSTOM CHARACTER PATTERN ============
' This subroutine accepts a frame value from 0 to 5 and writes the
' corresponding data from Stamp EEPROM into the cg RAM location for
' LCD character 0 (not "0" but ASCII 0; the pattern that prints
' when you send a byte containing %00000000 to the LCD). This causes
' any screen location containing character 0 to change appearance
' to match the new pattern! The technique lets you animate multiple
' screen locations simultaneously.
newPattern:
cgStart = frame * 8 ' First bit pattern to load.
cgEnd = cgStart + 7 ' Last bit pattern to load.
serout lcd,n2400,(I,cgRAM) ' Point to character 0 of cgRAM.
for count = cgStart to cgEnd ' For each of eight bit patterns..
read count,cgData ' Get the bit pattern from EEPROM..
serout lcd,n2400,(cgData) ' Write the data to LCD CG RAM.
next
serout lcd,n2400,(I,128) ' Return to display RAM, top line.
return
' Listing 2.8: ANIM2.BS2 (Animation demo with LCD Backpack & BS2)
' This program demonstrates how to create animation by cycling
' different bit patterns through a single cg RAM location.
' This lets you animate multiple screen locations simultaneously.
' Install a jumper at BPS on Backpack for 9600 baud operation.
lcd con 0 ' Serial output to LCD.
I con 254 ' Instruction prefix for LCD.
lcdCls con 1 ' Clear-screen instruction for LCD.
cgRAM con 64 ' Starting point of CG RAM.
n9600 con $4054 ' 9600 baud.
line2 con 192 ' Position: middle of 2nd line.
frame var byte ' Pointer to animation 'frame.'
Scott Edwards Electronics / LCD App Note No. 2
12
cnt var byte ' Counter for EEPROM addressing.
cgStart var byte ' Location of cgRAM data in EEPROM.
cgEnd var byte ' End of cgRAM data in EEPROM.
cgData var byte ' Individual byte of cgRAM data.
' Custom-character definitions stored as bit patterns in the
' Stamp's EEPROM. Each character is made up of 8 bytes. Each byte
' represents a row of 5 pixels (only the lowest 5 bits are
' actually used). It's hard to simulate these patterns in text,
' but the progression of patterns is meant to look like an
' expanding square that starts as a dot and grows.
frame1 data 0,0,0,4,0,0,0,0 ' Dot.
frame2 data 0,0,10,4,10,0,0,0 ' larger..
frame3 data 0,0,14,10,14,0,0,0 ' larger..
frame4 data 0,21,10,21,10,21,0,0 ' larger..
frame5 data 0,31,17,17,17,31,0,0 ' larger..
frame6 data 0,21,0,17,0,21,0,0 ' larger.
' =====Program begins by clearing the screen after a 1-second
' delay for LCD initialization. It then downloads first graphic,
' labels the top line of the screen, and prints 15 character 0s
' across the second line. The character 0s will be animated.
pause 1000 ' Wait a second
serout lcd,n9600,[I,lcdCls] ' Clear the LCD.
frame = 0: gosub newPattern
serout lcd,n9600,[" ANIMATION"] ' Label top line.
serout lcd,n9600,[I,line2] ' Move to 2nd line.
for frame = 0 to 15
serout lcd,n9600,[0] ' Print character 0 across 2nd line.
next
' ============= DEMO PROGRAM LOOP ============
again:
frame = frame + 1 // 6 ' Next pattern, range 0-5.
gosub newPattern ' Change character-0 pattern.
pause 150 ' Short pause.
goto again ' Repeat endlessly.
' ============= RELOAD CUSTOM CHARACTER PATTERN ============
' This subroutine accepts a frame value from 0 to 5 and writes the
' corresponding data from Stamp EEPROM into the cg RAM location for
' LCD character 0 (not "0" but ASCII 0; the pattern that prints
' when you send a byte containing %00000000 to the LCD). This causes
' any screen location containing character 0 to change appearance
' to match the new pattern! The technique lets you animate multiple
' screen locations simultaneously.
newPattern:
cgStart = frame * 8 ' First bit pattern to load.
cgEnd = cgStart + 7 ' Last bit pattern to load.
serout lcd,n9600,[I,cgRAM] ' Point to character 0 of cgRAM.
Scott Edwards Electronics / LCD App Note No. 2
13
for cnt = cgStart to cgEnd ' For each of eight bit patterns..
read cnt,cgData ' Get the bit pattern from EEPROM..
serout lcd,n9600,[cgData] ' Write the data to LCD CG RAM.
next
serout lcd,n9600,[I,128] ' Return to display RAM, top line.
return
' Listing 2.9: QANIM2.BAS (Animation demo with LCD Backpack & QBASIC)
' This program demonstrates how to create animation by cycling
' different bit patterns through a single cg RAM location.
' This lets you animate multiple screen locations simultaneously.
' Install a jumper at BPS on the Backpack to configure it
' for 9600 baud. Connect serial input to PC COM1 (or change
' "OPEN" instruction to other COM port below).
DECLARE SUB newPattern (frame%)
CONST lcd = 0 ' Serial output to LCD.
CONST I = 254 ' Instruction prefix for LCD.
CONST lcdCls = 1 ' Clear-screen instruction for LCD.
CONST cgRAM = 64 ' Starting point of CG RAM.
CONST line2 = 192 ' Position: start of 2nd line.
CONST home = 128 ' Position: start of 1st line.
DIM SHARED bitPats(47) AS INTEGER ' Storage for bit patterns.
CLS : PRINT "Running animation demo for LCD Serial Backpack..."
PRINT "Press ctrl-BREAK to end"
FOR count% = 0 TO 47 ' For each of 6 chars x 8 bit rows.'
READ bitPats(count%) ' Get the bit pattern from DATA..
NEXT ' ..and store it in bitPats array.
' Set up the serial port: COM1, baud, parity, data bits, stop bits,
' disable all handshaking (CD, CS, DS, OP).
OPEN "com1:9600,N,8,1,CD0,CS0,DS0,OP0" FOR OUTPUT AS #1
PRINT #1, CHR$(I); CHR$(lcdCls); ' Clear the LCD.
SLEEP 1 ' Delay a second.
PRINT #1, " ANIMATION"; ' Print label.
count% = 0: newPattern (count%) ' Set bit pattern.
PRINT #1, CHR$(I); CHR$(line2); ' Move to 2nd line.
FOR count% = 1 TO 16 ' Print 16 ASCII-0
PRINT #1, CHR$(0); ' ..graphics across
NEXT ' ..line 2.
count% = 0 ' Clear count.
again:
count% = (count% + 1) MOD 6 ' Cycle count, 0-5.
newPattern (count%) ' Change bit pattern to animate.
PLAY "P16" ' Play silent note to pause.
GOTO again
Scott Edwards Electronics / LCD App Note No. 2
14
' Custom-character definitions stored as bit patterns in the
' DATA statements. Each character is made up of 8 bytes. Each byte
' represents a row of 5 pixels (only the lowest 5 bits are
' actually used). It's hard to simulate these patterns in text,
' but the progression of patterns is meant to look like an
' expanding square that starts as a dot and grows.
DATA 0,0,0,4,0,0,0,0
DATA 0,0,10,4,10,0,0,0
DATA 0,0,14,10,14,0,0,0
DATA 0,21,10,21,10,21,0,0
DATA 0,31,17,17,17,31,0,0
DATA 0,21,0,17,0,21,0,0
SUB newPattern (frame%)
' Given a frame number from 0 to 5, select the appropriate 8 bytes
' of bit patterns stored in bitPats array and write those bytes to
' the LCD's cg RAM.
cgStart% = frame% * 8
cgEnd% = cgStart% + 7
PRINT #1, CHR$(I); CHR$(cgRAM); ' Point to cg RAM.
FOR count% = cgStart% TO cgEnd% ' Write the bit pattern.
PRINT #1, CHR$(bitPats(count%));
NEXT
PRINT #1, CHR$(I); CHR$(home); ' Cursor to line 1, char 0.
END SUB

You might also like