Big characters on HD44780 4x20


Closed Thread
Results 1 to 24 of 24

Hybrid View

  1. #1
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default

    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.

  2. #2
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default

    Doh! i miss this line...

    But of course it's not what I want!
    So what do you want? smaller only ?
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  3. #3
    Join Date
    Jan 2007
    Posts
    13


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by mister_e View Post
    Doh! i miss this line...



    So what do you want? smaller only ?
    Simply better! I'm working on it, in about 1 hour I will post the result!

  4. #4
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default

    Maybe not FAR BETTER but interesting...
    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
    I'm still working on something...
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  5. #5
    Join Date
    Jan 2007
    Posts
    13


    Did you find this post helpful? Yes | No

    Default

    I think this is quite good:

    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 "only" 1002 words and about 900 words w/o the little "show" in Main.

  6. #6
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by erpalma View Post
    I think this is quite good:

    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
            GOSUB COMBO1
            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:
            GOSUB COMBO2
            LCDOUT comm, ($C4 + OFFSET), $FF
            LCDOUT comm, ($95 + OFFSET), $05, $00, $00, $00
            LCDOUT comm, ($D5 + OFFSET), $FF, $01, $01, $01
            RETURN
    Numero3:
            GOSUB COMBO2
            LCDOUT comm, ($C2 + OFFSET), $01, $01, $FF
            LCDOUT comm, ($96 + OFFSET), $00, $00, $FF
            GOSUB COMBO3
            RETURN 
    Numero4:
            lcdout comm, ($81 + OFFSET), $FF
            GOSUB COMBO1
            GOSUB COMBO4
            GOSUB COMBO5
            return      
    Numero5:
            LCDOUT COMM, ($81 + OFFSET), $05, $00, $00, $00
            GOSUB COMBO6
            GOSUB COMBO4
            GOSUB COMBO3
            RETURN    
    Numero6:
            LCDOUT COMM, ($81 + OFFSET), $05, $00, $00
            GOSUB COMBO6
            LCDOUT COMM, ($95 + OFFSET), $FF, $00, $00, $04
            GOSUB COMBO7
            RETURN
    Numero7:
            GOSUB COMBO2
            LCDOUT COMM, ($C3 + OFFSET), $01, $FF
            LCDOUT COMM, ($97 + OFFSET), $00, $FF
            GOSUB COMBO5
            RETURN
    Numero8:
            GOSUB COMBO8
            LCDOUT COMM, ($C1 + OFFSET), $02, $01, $01, $03
            LCDOUT COMM, ($95 + OFFSET), $05, $00, $00, $04
            GOSUB COMBO7
            RETURN       
    Numero9:
            GOSUB COMBO8
            LCDOUT COMM, ($C1 + OFFSET), $02, $01, $01, $FF
            GOSUB COMBO5
            LCDOUT COMM, ($D6 + OFFSET), $01, $01, $03
            RETURN
    COMBO1:
            LCDOUT COMM, ($C1 + OFFSET), $FF, COMM, ($C4 + OFFSET), $FF
            RETURN
    COMBO2:
            LCDOUT comm, ($81 + OFFSET), $00, $00, $00, $04
            RETURN
    COMBO3:
            LCDOUT comm, ($D5 + OFFSET), $01, $01, $01, $03
            RETURN
    COMBO4:
            LCDOUT comm, ($95 + OFFSET), $00, $00, $00, $FF
            RETURN
    COMBO5:
            LCDOUT comm, ($D8 + OFFSET), $FF
            RETURN
    COMBO6:
            LCDOUT COMM, ($C1 + OFFSET), $FF
            RETURN
    COMBO7:
            LCDOUT COMM, ($D5 + OFFSET), $02, $01, $01, $03
            RETURN
    COMBO8:
            LCDOUT COMM, ($81 + OFFSET), $05, $00, $00, $04
            RETURN
    It's "only" 1002 words and about 900 words w/o the little "show" in Main.
    I combined a few of your lcdout statement into gosub's. See how much (if any) code space that saves/uses.

  7. #7
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default

    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
    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
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  8. #8
    Join Date
    Jan 2007
    Posts
    13


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by skimask View Post
    I combined a few of your lcdout statement into gosub's. See how much (if any) code space that saves/uses.
    Your code is 1162 words instead of 1324 on 16F648A.
    Last edited by erpalma; - 4th January 2007 at 11:28.

Similar Threads

  1. Only the first 8 characters.
    By timseven in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 22nd September 2009, 01:43
  2. Big big big memory or tiny SDs!
    By Ron Marcus in forum Off Topic
    Replies: 9
    Last Post: - 25th May 2007, 18:02
  3. Led scrolling display: How to mirror characters?
    By mahia2005 in forum mel PIC BASIC Pro
    Replies: 3
    Last Post: - 11th May 2007, 03:25
  4. LCD 16 characters inline: only first 8 work
    By Mugel in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 20th October 2006, 22:07
  5. LCD 4x20 HD44780
    By inteco in forum mel PIC BASIC
    Replies: 13
    Last Post: - 27th June 2006, 16:52

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts