OK then i'll try with my favourite 16F84A![]()
OK everybody, the code shrinking competition start RIGHT NOW!
OK then i'll try with my favourite 16F84A![]()
OK everybody, the code shrinking competition start RIGHT NOW!
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Doh! i miss this line...
So what do you want? smaller only ?But of course it's not what I want!
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Maybe not FAR BETTER but interesting...
I'm still working on something...Code:Clr CON 1 Comm Con $FE LINE1 con $80 ;2 LINE2 con $c0 LINE3 con $94 LINE4 con $d4 Dx con $14 offset var byte Begin: Pause 500 LCDOUT $FE,$40,$1F,$1F,$1F,$1F,$1F,$1F,$1F,$1F ' Cust Char #0 LCDOUT $FE,$48,$1F,$1F,$1F,$1F,$00,$00,$00,$00 ' Cust Char #1 LCDOUT $FE,$50,$00,$00,$00,$00,$1F,$1F,$1F,$1F ' Cust Char #2 LCDOUT $FE,$58,$00,$00,$00,$00,$00,$0E,$0E,$0E ' Cust Char #3 LCDOUT $FE,$60,$00,$00,$00,$00,$00,$1F,$1F,$1F ' Cust Char #4 LCDOUT $FE,$68,$1F,$1F,$1F,$00,$00,$00,$00,$00 ' Cust Char #5 LCDOUT $FE,$70,$00,$01,$03,$07,$0F,$1F,$1F,$1F ' Cust Char #6 LCDOUT $FE,$78,$00,$00,$00,$00,$00,$00,$01,$03 ' Cust Char #7 Main: offset=0 LCDOUT comm, clr lcdout comm, line1, "T", _ COMM, LINE2, "E", _ COMM, LINE3, "S", _ COMM, LINE4, "T" offset=2 PAUSE 1000 GOSUB NUMERO2 PAUSE 1000 GOSUB NUMERO1 PAUSE 1000 GOSUB NUMERO3 PAUSE 2000 GOTO MAIN Numero1: LCDOUT COMM,LINE1+offset,7,6,0,_ COMM,LINE2+offset+2,0,_ COMM,LINE3+offset+2,0,_ COMM,LINE4+offset+2,0 offset=offset+4 RETURN Numero2: LCDOUT COMM,(LINE1+offset),1,1,1,0,_ COMM,(LINE2+offset),2,2,2,0,_ COMM,(LINE3+offset),0,1,1,1,_ COMM,(LINE4+offset),0,2,2,2 offset=offset+5 RETURN Numero3: LCDOUT COMM,LINE1+offset,1,1,1,0,_ COMM,LINE2+offset+1, 4, 4, 0,_ COMM,LINE3+offset+1, 5, 5, 0,_ COMM,LINE4+offset,$02, $02, $02, $00 offset=offset+5 RETURN
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
I think this is quite good:
It's "only" 1002 words and about 900 words w/o the little "show" in Main.Code:DEFINE OSC 12 define LCD_LINES 4 Clr CON 1 Comm Con $FE LINE1 con 2 LINE2 con $c0 LINE3 con $94 LINE4 con $d4 Offset VAR BYTE Begin: Pause 500 LCDOUT 254,64,31,31,31,31,0,0,0,0 ' Cust Char #0 LCDOUT 254,72,0,0,0,0,31,31,31,31 ' Cust Char #1 LCDOUT 254,80,31,31,31,15,7,3,1,0 ' Cust Char #2 LCDOUT 254,88,31,31,31,30,28,24,16,0 ' Cust Char #3 LCDOUT 254,96,0,16,24,28,30,31,31,31 ' Cust Char #4 LCDOUT 254,104,0,1,3,7,15,31,31,31 ' Cust Char #5 LCDOUT 254,112,31,31,31,31,31,31,31,31 ' Cust Char #6 LCDOUT 254,120,0,0,0,14,31,31,31,14 ' Cust Char #7 Main: LCDOUT comm, clr lcdout comm, line1, "T", COMM, LINE2, "E", COMM, LINE3, "S", COMM, LINE4, "T" OFFSET=0 gOSUB NUMERO0 OFFSET=5 GOSUB NUMERO1 OFFSET=10 GOSUB NUMERO2 OFFSET=15 GOSUB NUMERO3 PAUSE 9000 LCDOUT COMM, CLR OFFSET=0 GOSUB NUMERO4 OFFSET=5 GOSUB NUMERO5 OFFSET=10 GOSUB NUMERO6 OFFSET=15 GOSUB NUMERO7 PAUSE 9000 LCDOUT COMM, CLR OFFSET=0 GOSUB NUMERO8 OFFSET=5 GOSUB NUMERO9 OFFSET=5 GOSUB PUNTO OFFSET=10 GOSUB NUMERO0 PAUSE 9000 GOTO MAIN END Punto: LCDOUT Comm, ($D9 + OFFSET), $07 return Numero0: LCDOUT COMM, ($81 + OFFSET), $05, $FF, $FF, $04 LCDOUT COMM, ($C1 + OFFSET), $FF, COMM, ($C4 + OFFSET), $FF LCDOUT COMM, ($95 + OFFSET), $FF, COMM, ($98 + OFFSET), $FF LCDOUT COMM, ($D5 + OFFSET), $02, $FF, $FF, $03 RETURN Numero1: lcdout comm, ($82 + OFFSET), $05, $FF lcdout comm, ($C3 + OFFSET), $FF lcdout comm, ($97 + OFFSET), $FF lcdout comm, ($D7 + OFFSET), $FF RETURN Numero2: LCDOUT comm, ($81 + OFFSET), $00, $00, $00, $04 LCDOUT comm, ($C4 + OFFSET), $FF LCDOUT comm, ($95 + OFFSET), $05, $00, $00, $00 LCDOUT comm, ($D5 + OFFSET), $FF, $01, $01, $01 RETURN Numero3: LCDOUT comm, ($81 + OFFSET), $00, $00, $00, $04 LCDOUT comm, ($C2 + OFFSET), $01, $01, $FF LCDOUT comm, ($96 + OFFSET), $00, $00, $FF LCDOUT comm, ($D5 + OFFSET), $01, $01, $01, $03 RETURN Numero4: lcdout comm, ($81 + OFFSET), $FF lcdout COMM, ($C1 + OFFSET), $FF, COMM, ($C4 + OFFSET), $FF lcdout COmm, ($95 + OFFSET), $00, $00, $00, $FF lcdout comm, ($D8 + OFFSET), $FF return Numero5: LCDOUT COMM, ($81 + OFFSET), $05, $00, $00, $00 LCDOUT COMM, ($C1 + OFFSET), $FF LCDOUT COMM, ($95 + OFFSET), $00, $00, $00, $04 LCDOUT COMM, ($D5 + OFFSET), $01, $01, $01, $03 RETURN Numero6: LCDOUT COMM, ($81 + OFFSET), $05, $00, $00 LCDOUT COMM, ($C1 + OFFSET), $FF LCDOUT COMM, ($95 + OFFSET), $FF, $00, $00, $04 LCDOUT COMM, ($D5 + OFFSET), $02, $01, $01, $03 RETURN Numero7: LCDOUT COMM, ($81 + OFFSET), $00, $00, $00, $FF LCDOUT COMM, ($C3 + OFFSET), $01, $FF LCDOUT COMM, ($97 + OFFSET), $00, $FF LCDOUT COMM, ($D8 + OFFSET), $FF RETURN Numero8: LCDOUT COMM, ($81 + OFFSET), $05, $00, $00, $04 LCDOUT COMM, ($C1 + OFFSET), $02, $01, $01, $03 LCDOUT COMM, ($95 + OFFSET), $05, $00, $00, $04 LCDOUT COMM, ($D5 + OFFSET), $02, $01, $01, $03 RETURN Numero9: LCDOUT COMM, ($81 + OFFSET), $05, $00, $00, $04 LCDOUT COMM, ($C1 + OFFSET), $02, $01, $01, $FF LCDOUT COMM, ($98 + OFFSET), $FF LCDOUT COMM, ($D6 + OFFSET), $01, $01, $03 RETURN
It's really bad the poor 16F84A don't support some interesting MPASM feature. Well i admit that i discovered this totally at the end... anyways, here's something 532 Bytes working on a 16F877
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 16F84ACode: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![]()
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Bookmarks