Doh! i miss this line...
So what do you want? smaller only ?But of course it's not what I want!
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.
OK, a 0000-9999 up-counter, 746 Word on a 16F877A
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=0xFC Dx=0x14 CustChar dt Comm,64,31,31,31,31,0,0,0,0 ; Cust Char #0 dt Comm,72,0,0,0,0,31,31,31,31 ; Cust Char #1 dt Comm,80,31,31,31,15,7,3,1,0 ; Cust Char #2 dt Comm,88,31,31,31,30,28,24,16,0 ; Cust Char #3 dt Comm,96,0,16,24,28,30,31,31,31 ; Cust Char #4 dt Comm,104,0,1,3,7,15,31,31,31 ; Cust Char #5 dt Comm,112,31,31,31,31,31,31,31,31 ; Cust Char #6 dt Comm,120,0,0,0,14,31,31,31,14 ; Cust Char #7 dt EOL ; end of Custom character Zero dt 5,0xFF,0xFF,4,EOL dt 0xFF,Comm,Dx,Comm,Dx,0xFF,EOL dt 0XFF,Comm,Dx,Comm,Dx,0xFF,EOL dt 2,0xff,0xff,3,EOL dt 5 One dt Comm,Dx,5,0xff,EOL dt Comm,Dx,Comm,Dx,0xff,EOL dt Comm,Dx,Comm,Dx,0xff,EOL dt Comm,Dx,Comm,Dx,0xff,EOL dt 5;3 Two dt 0,0,0,4,EOL dt Comm,Dx,Comm,Dx,Comm,Dx,0xff,EOL dt 5,0,0,0,EOL dt 0xff,1,1,1,EOL dt 5 Three dt 0,0,0,4,EOL dt Comm,Dx,1,1,0xff,EOL dt Comm,Dx,0,0,0xff,EOL dt 1,1,1,3,EOL dt 5 Four dt 0xff,EOL dt 0xff,Comm,Dx,Comm,Dx,0xff,EOL dt 0,0,0,0xff,EOL dt Comm,Dx,Comm,Dx,Comm,Dx,0xff,EOL dt 5 Five dt 5,0,0,0,EOL dt 0xff,EOL dt 0,0,0,4,EOL dt 1,1,1,3,EOL dt 5 Six dt Comm,Dx,5,0,0,EOL dt 0xff,EOL dt 0xff,0,0,4,EOL dt 2,1,1,3,EOL dt 5 Seven dt 0,0,0,0xff,EOL dt Comm,Dx,Comm,Dx,1,0xff,EOL dt Comm,Dx,Comm,Dx,0,0xff,EOL dt Comm,Dx,Comm,Dx,Comm,Dx,0xff,EOL dt 5 Eight dt 5,0,0,4,EOL dt 2,1,1,3,EOL dt 5,0,0,4,EOL dt 2,1,1,3,EOL dt 5 Nine dt 5,0,0,4,EOL dt 2,1,1,0xff,EOL dt Comm,Dx, Comm,Dx,Comm,Dx,0xff,EOL dt Comm,Dx,1,1,3,EOL dt 5 Punto dt EOL dt EOL dt EOL dt 7,EOL dt 2 endasm VariableDefinition: CustChar con EXT Zero con EXT One con EXT Two con EXT Three con EXT Four CON EXT Five CON EXT Six CON EXT Seven CON EXT Eight CON EXT Nine CON EXT Punto 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 CounterA var word CounterB var byte Number var byte Pattern var word[11] pattern[0]=zero pattern[1]=one Pattern[2]=two pattern[3]=three pattern[4]=four Pattern[5]=Five Pattern[6]=Six Pattern[7]=Seven pattern[8]=eight pattern[9]=Nine pattern[10]=Punto pause 500 DumpCustChar: addr=0 char=0 repeat lcdout char reaDCODE custchar+addr,char addr=addr+1 until char=eol Main: countera=0 repeat offset=0 lcdout comm,clr counterb=3 repeat number=countera dig counterb gosub displaynumber counterb=counterb-1 until counterb=255 pause 10 countera=countera+1 until countera>9999 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
Last edited by mister_e; - 4th January 2007 at 00:41.
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Your code is wonderful! Now I'm going to understand it! This is one of my first programs with pics! I have so much to learn! Assembly for example is still far away from me!And I need to experiment all the features of picbasic! I'd like to learn something more about eeprom code storage (not in 16f84a
)!
Bookmarks