'BigFont for 2x16 LCD By Behnam Zakizadeh @ 95.04.16 [2016]
'www.avr64.com

$regfile = "m8adef.dat"
$crystal = 1000000
$hwstack = 64
$swstack = 64
$framesize = 64

'optional
$projecttime = 96
$version , , 49

'Auto set fuse bit only for ATmega8
$prog &HFF , &H81 , &HD9 , &H00

'subs
Declare Sub Insert_num(byval Num As Byte , Byval As Byte , Byval Font As String)
Declare Sub Insert_0_9999(byval Num As Word , Byval Font As String , Byval Justify As String)
Declare Sub Insert_minus(byval As Byte)
Declare Sub Insert_dot(byval As Byte)
Declare Sub Insert_degree(byval As Byte)
Declare Sub Insert_colon(byval As Byte)

'custom chars
Deflcdchar , , 15 , 31 , 31 , 31 , 31 , 31 , 31         'up left
Deflcdchar , 28 , 30 , 31 , 31 , 31 , 31 , 31 , 31        'up right
Deflcdchar , 31 , 31 , 31 , 31 , 31 , 31 , 15 , 7         'dn left
Deflcdchar , 31 , 31 , 31 , 31 , 31 , 31 , 30 , 28        'dn right
Deflcdchar , 31 , 31 , 32 , 32 , 32 , 32 , 31 , 31        'UP DN
Deflcdchar , 31 , 32 , 32 , 32 , 32 , 32 , 31 , 31        'up DN
Deflcdchar , 32 , 32 , 32 , 32 , 32 , 32 , 31 , 31        'DN
Deflcdchar , 31 , 31 , 32 , 32 , 32 , 32 , 32 , 32        'UP

Config Lcdpin = Pin , Rs = Portc.5 , = Portc.4 , _
 Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0
Config Lcd = 16 * 2
Cursor Off Noblink
Cls

'*********************** main prog start here ************************

'test subs

Dim As Word

Do
   Call Insert_num(1 , , "round")
   Call Insert_num(2 , , "round")
   Call Insert_num(4 , , "round")
   Call Insert_num(5 , 13 , "round")
   Call Insert_colon(8)

   Wait 10 : Cls

   Call Insert_num(1 , , "flat")
   Call Insert_num(2 , , "flat")
   Call Insert_num(4 , , "flat")
   Call Insert_num(5 , 13 , "flat")
   Call Insert_colon(8)

   Wait 10 : Cls

   Call Insert_0_9999(0 , "flat" , "left")
   Wait 10 : Cls
   Call Insert_0_9999(15 , "flat" , "left")

   Wait 10 : Cls
   Call Insert_0_9999(236 , "flat" , "left")

   Wait 10 : Cls
   Call Insert_0_9999(4589 , "flat" , "left")
   Wait 10 : Cls
   Call Insert_0_9999(0 , "flat" , "right")
   Wait 10 : Cls
   Call Insert_0_9999(15 , "flat" , "right")

   Wait 10 : Cls
   Call Insert_0_9999(236 , "flat" , "right")
   Wait 10 : Cls
   Call Insert_0_9999(4589 , "flat" , "right")
   'For I = 1 To 200
   '   Call Insert_0_9999(i , "flat" , "left")
   'Next I

   Wait 10 : Cls

   'For I = 1 To 200
   '   Call Insert_0_9999(i , "flat" , "right")
   'Next I

   Wait 10 : Cls

   Call Insert_minus(1)
   Call Insert_num(2 , , "flat")
   Call Insert_num(5 , , "flat")
   Call Insert_dot(12)
   Call Insert_num(7 , 13 , "flat")
   Call Insert_degree(16)

   Wait 10 : Cls

   Lcd "Temp="
   Call Insert_num(2 , , "flat")
   Call Insert_num(5 , 11 , "flat")
   Call Insert_degree(14)
   Locate , 15 : Lcd "C"

   Wait 10 : Cls

Loop

End
'_______________________________________________________________________________

Sub Insert_minus(byval As Byte)
   Locate , : Lcd Chr(7) ; Chr(7) ; Chr(7)
End Sub
'_______________________________________________________________________________

Sub Insert_dot(byval As Byte)
   Locate , : Lcd "."
End Sub
'_______________________________________________________________________________

Sub Insert_degree(byval As Byte)
   Locate , : Lcd Chr(223)
End Sub
'_______________________________________________________________________________

Sub Insert_colon(byval As Byte)
   Locate , : Lcd Chr(165)
   Locate , : Lcd Chr(165)
End Sub
'_______________________________________________________________________________
Sub Insert_0_9999(byval Num As Word , Byval Font As String , Byval Justify As String)
   Local As Word , As Word , As Word

   If Justify = "left" Then
      If Num < 10 Then
         Call Insert_num(num , , Font)
      End If

      If Num >= 10 And Num <= 99 Then
         = Num Mod 10 : Call Insert_num(a , , Font)
         = Num \ 10 : Call Insert_num(a , , Font)
      End If

      If Num >= 100 And Num <= 999 Then
         = Num Mod 10 : = Num \ 10 : Call Insert_num(a , , Font)
         = Mod 10 : Call Insert_num(a , , Font)
         = \ 10 : Call Insert_num(a , , Font)
      End If

      If Num >= 1000 And Num <= 9999 Then
         = Num Mod 10 : = Num \ 10 : Call Insert_num(a , 13 , Font)
         = Mod 10 : = \ 10 : Call Insert_num(a , , Font)
         = Mod 10 : Call Insert_num(a , , Font)
         = \ 10 : Call Insert_num(a , , Font)
      End If
   End If
   If Justify = "right" Then
      If Num < 10 Then
         Call Insert_num(num , 13 , Font)
      End If

      If Num >= 10 And Num <= 99 Then
         = Num Mod 10 : Call Insert_num(a , 13 , Font)
         = Num \ 10 : Call Insert_num(a , , Font)
      End If

      If Num >= 100 And Num <= 999 Then
         = Num Mod 10 : = Num \ 10 : Call Insert_num(a , 13 , Font)
         = Mod 10 : Call Insert_num(a , , Font)
         = \ 10 : Call Insert_num(a , , Font)
      End If

      If Num >= 1000 And Num <= 9999 Then
         = Num Mod 10 : = Num \ 10 : Call Insert_num(a , 13 , Font)
         = Mod 10 : = \ 10 : Call Insert_num(a , , Font)
         = Mod 10 : Call Insert_num(a , , Font)
         = \ 10 : Call Insert_num(a , , Font)
      End If
   End If
End Sub
'_______________________________________________________________________________

Sub Insert_num(byval Num As Byte , Byval As Byte , Byval Font As String)
   If Font = "flat" Then
      Select Case Num
         Case 0:
            Locate , : Lcd Chr(255) ; Chr(7) ; Chr(255)
            Locate , : Lcd Chr(255) ; Chr(6) ; Chr(255)
         Case 1:
            Locate , : Lcd Chr(7) ; Chr(255) ; Spc(1)
            Locate , : Lcd Chr(6) ; Chr(255) ; Chr(6)
         Case 2:
            Locate , : Lcd Chr(4) ; Chr(4) ; Chr(255)
            Locate , : Lcd Chr(255) ; Chr(6) ; Chr(6)
         Case 3:
            Locate , : Lcd Chr(4) ; Chr(4) ; Chr(255)
            Locate , : Lcd Chr(6) ; Chr(6) ; Chr(255)
         Case 4:
            Locate , : Lcd Chr(255) ; Chr(6) ; Chr(255)
            Locate , : Lcd Spc(1) ; Spc(1) ; Chr(255)
         Case 5:
            Locate , : Lcd Chr(255) ; Chr(4) ; Chr(4)
            Locate , : Lcd Chr(6) ; Chr(6) ; Chr(255)
         Case 6:
            Locate , : Lcd Chr(255) ; Chr(4) ; Chr(4)
            Locate , : Lcd Chr(255) ; Chr(6) ; Chr(255)
         Case 7:
            Locate , : Lcd Chr(7) ; Chr(7) ; Chr(255)
            Locate , : Lcd Spc(1) ; Spc(1) ; Chr(255)
         Case 8:
            Locate , : Lcd Chr(255) ; Chr(4) ; Chr(255)
            Locate , : Lcd Chr(255) ; Chr(6) ; Chr(255)
         Case 9:
            Locate , : Lcd Chr(255) ; Chr(4) ; Chr(255)
            Locate , : Lcd Chr(6) ; Chr(6) ; Chr(255)
         Case Else:
            Locate , : Lcd Chr(255) ; Chr(255) ; Chr(255)
            Locate , : Lcd Chr(255) ; Chr(255) ; Chr(255)
      End Select
   End If
   If Font = "round" Then
      Select Case Num
          Case 0:
             Locate , : Lcd Chr(0) ; Chr(7) ; Chr(1)
             Locate , : Lcd Chr(2) ; Chr(6) ; Chr(3)
          Case 1:
             Locate , : Lcd Chr(7) ; Chr(1) ; Spc(1)
             Locate , : Lcd Chr(6) ; Chr(255) ; Chr(6)
          Case 2:
             Locate , : Lcd Chr(4) ; Chr(4) ; Chr(1)
             Locate , : Lcd Chr(2) ; Chr(6) ; Chr(6)
          Case 3:
             Locate , : Lcd Chr(4) ; Chr(4) ; Chr(1)
             Locate , : Lcd Chr(6) ; Chr(6) ; Chr(3)
          Case 4:
             Locate , : Lcd Chr(0) ; Chr(6) ; Chr(1)
             Locate , : Lcd Spc(1) ; Spc(1) ; Chr(3)
          Case 5:
             Locate , : Lcd Chr(0) ; Chr(4) ; Chr(4)
             Locate , : Lcd Chr(6) ; Chr(6) ; Chr(3)
          Case 6:
             Locate , : Lcd Chr(0) ; Chr(4) ; Chr(4)
             Locate , : Lcd Chr(2) ; Chr(6) ; Chr(3)
          Case 7:
             Locate , : Lcd Chr(7) ; Chr(7) ; Chr(1)
             Locate , : Lcd Spc(1) ; Spc(1) ; Chr(3)
          Case 8:
             Locate , : Lcd Chr(0) ; Chr(4) ; Chr(1)
             Locate , : Lcd Chr(2) ; Chr(6) ; Chr(3)
          Case 9:
             Locate , : Lcd Chr(0) ; Chr(4) ; Chr(1)
             Locate , : Lcd Chr(6) ; Chr(6) ; Chr(3)
          Case Else:
             Locate , : Lcd Chr(255) ; Chr(255) ; Chr(255)
             Locate , : Lcd Chr(255) ; Chr(255) ; Chr(255)
       End Select
   End If
End Sub

'_______________________________________________________________________________