Code:
DEFINE LOADER_USED 1
Define OSC 4
DEFINE LCD_DREG PORTD ' LCD data port
DEFINE LCD_DBIT 4 ' LCD data starting bit 0 or 4
DEFINE LCD_RSREG PORTD ' LCD register select port
DEFINE LCD_RSBIT 2 ' LCD register select bit
DEFINE LCD_EREG PORTD ' LCD enable port
DEFINE LCD_EBIT 3 ' LCD enable bit
DEFINE LCD_BITS 4 ' LCD bus size 4 or 8
DEFINE LCD_LINES 4 ' Number lines on LCD
DEFINE LCD_COMMANDUS 2000 ' Command delay time in us
DEFINE LCD_DATAUS 50 ' Data delay time in us
goto VariableDefinition
asm
Comm=0xFE
EOL=0xFF
Dx=0x14
CustChar
dt Comm,0x40,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F ; Cust Char #0
dt Comm,0x48,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x00 ; Cust Char #1
dt Comm,0x50,0x00,0x00,0x00,0x00,0x1F,0x1F,0x1F,0x1F ; Cust Char #2
dt Comm,0x58,0x00,0x00,0x00,0x00,0x00,0x0E,0x0E,0x0E ; Cust Char #3
dt Comm,0x60,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x1F ; Cust Char #4
dt Comm,0x68,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00 ; Cust Char #5
dt Comm,0x70,0x00,0x01,0x03,0x07,0x0F,0x1F,0x1F,0x1F ; Cust Char #6
dt Comm,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03 ; Cust Char #7
dt EOL ; end of Custom character
One dt 7,6,0,EOL
dt Comm,Dx,Comm,Dx,0,EOL
dt Comm,Dx,Comm,Dx,0,EOL
dt Comm,Dx,Comm,Dx,0,EOL
dt 4
Two dt 1,1,1,0,EOL
dt 2,2,2,0,EOL
dt 0,1,1,1,EOL
dt 0,2,2,2,EOL
dt 5
Three dt 1,1,1,0,EOL
dt Comm,Dx,4,4,0,EOL
dt Comm,Dx,5,5,0,EOL
dt 2,2,2,0,EOL
dt 5
endasm
VariableDefinition:
CustChar con EXT
One con EXT
Two con EXT
Three con EXT
Clr CON 1
Comm Con EXT
EOL con EXT
Dx con EXT
Line var byte[4]
line[0]=$80
line[1]=$C0
line[2]=$94
line[3]=$D4
offset var byte
index var byte
Char var byte
ActualLine var byte
Addr var word
Number var byte
Pattern var word[10]
pattern[1]=one
Pattern[2]=two
pattern[3]=three
pause 500
DumpCustChar:
addr=0
char=0
repeat
lcdout char
reaDCODE custchar+addr,char
addr=addr+1
until char=eol
Main:
offset=0
LCDOUT comm, clr
pause 500
lcdout comm, line[0], "T", _
COMM, LINE[1], "E", _
COMM, LINE[2], "S", _
COMM, LINE[3], "T"
offset=2
pause 500
number=3 : gosub displaynumber
pause 500
number=1 : gosub displaynumber
pause 500
number=2 : gosub displaynumber
pause 500
number=1 : gosub displaynumber
pause 500
GOTO MAIN
DisplayNumber:
actualline=0
index=0
lcdout comm,line[actualline]+offset
Loop:
readcode pattern[number]+index,char
if char!=eol then
if actualline<4 then
lcdout char
else
offset=offset+char
Goto GetOut
endif
else
actualline=actualline+1
if actualline<4 then lcdout comm,line[actualline]+offset
endif
index=index+1
goto loop
GetOut:
RETURN
I'll try your own... and see how much i could Shrink it to do the same thing. Forgive me, i won't try with a 16F84A
Bookmarks