'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 1 , 0 , 49
'Auto set fuse bit only for ATmega8
$prog &HFF , &H81 , &HD9 , &H00
'subs
Declare Sub Insert_num(byval Num As Byte , Byval X 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 X As Byte)
Declare Sub Insert_dot(byval X As Byte)
Declare Sub Insert_degree(byval X As Byte)
Declare Sub Insert_colon(byval X As Byte)
'custom chars
Deflcdchar 0 , 7 , 15 , 31 , 31 , 31 , 31 , 31 , 31 'up left
Deflcdchar 1 , 28 , 30 , 31 , 31 , 31 , 31 , 31 , 31 'up right
Deflcdchar 2 , 31 , 31 , 31 , 31 , 31 , 31 , 15 , 7 'dn left
Deflcdchar 3 , 31 , 31 , 31 , 31 , 31 , 31 , 30 , 28 'dn right
Deflcdchar 4 , 31 , 31 , 32 , 32 , 32 , 32 , 31 , 31 'UP DN
Deflcdchar 5 , 31 , 32 , 32 , 32 , 32 , 32 , 31 , 31 'up DN
Deflcdchar 6 , 32 , 32 , 32 , 32 , 32 , 32 , 31 , 31 'DN
Deflcdchar 7 , 31 , 31 , 32 , 32 , 32 , 32 , 32 , 32 'UP
Config Lcdpin = Pin , Rs = Portc.5 , E = 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 I As Word
Do
Call Insert_num(1 , 1 , "round")
Call Insert_num(2 , 5 , "round")
Call Insert_num(4 , 9 , "round")
Call Insert_num(5 , 13 , "round")
Call Insert_colon(8)
Wait 10 : Cls
Call Insert_num(1 , 1 , "flat")
Call Insert_num(2 , 5 , "flat")
Call Insert_num(4 , 9 , "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 , 5 , "flat")
Call Insert_num(5 , 9 , "flat")
Call Insert_dot(12)
Call Insert_num(7 , 13 , "flat")
Call Insert_degree(16)
Wait 10 : Cls
Lcd "Temp="
Call Insert_num(2 , 7 , "flat")
Call Insert_num(5 , 11 , "flat")
Call Insert_degree(14)
Locate 2 , 15 : Lcd "C"
Wait 10 : Cls
Loop
End
'_______________________________________________________________________________
Sub Insert_minus(byval X As Byte)
Locate 2 , X : Lcd Chr(7) ; Chr(7) ; Chr(7)
End Sub
'_______________________________________________________________________________
Sub Insert_dot(byval X As Byte)
Locate 2 , X : Lcd "."
End Sub
'_______________________________________________________________________________
Sub Insert_degree(byval X As Byte)
Locate 1 , X : Lcd Chr(223)
End Sub
'_______________________________________________________________________________
Sub Insert_colon(byval X As Byte)
Locate 1 , X : Lcd Chr(165)
Locate 2 , X : Lcd Chr(165)
End Sub
'_______________________________________________________________________________
Sub Insert_0_9999(byval Num As Word , Byval Font As String , Byval Justify As String)
Local A As Word , B As Word , C As Word
If Justify = "left" Then
If Num < 10 Then
Call Insert_num(num , 1 , Font)
End If
If Num >= 10 And Num <= 99 Then
A = Num Mod 10 : Call Insert_num(a , 5 , Font)
A = Num \ 10 : Call Insert_num(a , 1 , Font)
End If
If Num >= 100 And Num <= 999 Then
A = Num Mod 10 : B = Num \ 10 : Call Insert_num(a , 9 , Font)
A = B Mod 10 : Call Insert_num(a , 5 , Font)
A = B \ 10 : Call Insert_num(a , 1 , Font)
End If
If Num >= 1000 And Num <= 9999 Then
A = Num Mod 10 : B = Num \ 10 : Call Insert_num(a , 13 , Font)
A = B Mod 10 : C = B \ 10 : Call Insert_num(a , 9 , Font)
A = C Mod 10 : Call Insert_num(a , 5 , Font)
A = C \ 10 : Call Insert_num(a , 1 , 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
A = Num Mod 10 : Call Insert_num(a , 13 , Font)
A = Num \ 10 : Call Insert_num(a , 9 , Font)
End If
If Num >= 100 And Num <= 999 Then
A = Num Mod 10 : B = Num \ 10 : Call Insert_num(a , 13 , Font)
A = B Mod 10 : Call Insert_num(a , 9 , Font)
A = B \ 10 : Call Insert_num(a , 5 , Font)
End If
If Num >= 1000 And Num <= 9999 Then
A = Num Mod 10 : B = Num \ 10 : Call Insert_num(a , 13 , Font)
A = B Mod 10 : C = B \ 10 : Call Insert_num(a , 9 , Font)
A = C Mod 10 : Call Insert_num(a , 5 , Font)
A = C \ 10 : Call Insert_num(a , 1 , Font)
End If
End If
End Sub
'_______________________________________________________________________________
Sub Insert_num(byval Num As Byte , Byval X As Byte , Byval Font As String)
If Font = "flat" Then
Select Case Num
Case 0:
Locate 1 , X : Lcd Chr(255) ; Chr(7) ; Chr(255)
Locate 2 , X : Lcd Chr(255) ; Chr(6) ; Chr(255)
Case 1:
Locate 1 , X : Lcd Chr(7) ; Chr(255) ; Spc(1)
Locate 2 , X : Lcd Chr(6) ; Chr(255) ; Chr(6)
Case 2:
Locate 1 , X : Lcd Chr(4) ; Chr(4) ; Chr(255)
Locate 2 , X : Lcd Chr(255) ; Chr(6) ; Chr(6)
Case 3:
Locate 1 , X : Lcd Chr(4) ; Chr(4) ; Chr(255)
Locate 2 , X : Lcd Chr(6) ; Chr(6) ; Chr(255)
Case 4:
Locate 1 , X : Lcd Chr(255) ; Chr(6) ; Chr(255)
Locate 2 , X : Lcd Spc(1) ; Spc(1) ; Chr(255)
Case 5:
Locate 1 , X : Lcd Chr(255) ; Chr(4) ; Chr(4)
Locate 2 , X : Lcd Chr(6) ; Chr(6) ; Chr(255)
Case 6:
Locate 1 , X : Lcd Chr(255) ; Chr(4) ; Chr(4)
Locate 2 , X : Lcd Chr(255) ; Chr(6) ; Chr(255)
Case 7:
Locate 1 , X : Lcd Chr(7) ; Chr(7) ; Chr(255)
Locate 2 , X : Lcd Spc(1) ; Spc(1) ; Chr(255)
Case 8:
Locate 1 , X : Lcd Chr(255) ; Chr(4) ; Chr(255)
Locate 2 , X : Lcd Chr(255) ; Chr(6) ; Chr(255)
Case 9:
Locate 1 , X : Lcd Chr(255) ; Chr(4) ; Chr(255)
Locate 2 , X : Lcd Chr(6) ; Chr(6) ; Chr(255)
Case Else:
Locate 1 , X : Lcd Chr(255) ; Chr(255) ; Chr(255)
Locate 2 , X : Lcd Chr(255) ; Chr(255) ; Chr(255)
End Select
End If
If Font = "round" Then
Select Case Num
Case 0:
Locate 1 , X : Lcd Chr(0) ; Chr(7) ; Chr(1)
Locate 2 , X : Lcd Chr(2) ; Chr(6) ; Chr(3)
Case 1:
Locate 1 , X : Lcd Chr(7) ; Chr(1) ; Spc(1)
Locate 2 , X : Lcd Chr(6) ; Chr(255) ; Chr(6)
Case 2:
Locate 1 , X : Lcd Chr(4) ; Chr(4) ; Chr(1)
Locate 2 , X : Lcd Chr(2) ; Chr(6) ; Chr(6)
Case 3:
Locate 1 , X : Lcd Chr(4) ; Chr(4) ; Chr(1)
Locate 2 , X : Lcd Chr(6) ; Chr(6) ; Chr(3)
Case 4:
Locate 1 , X : Lcd Chr(0) ; Chr(6) ; Chr(1)
Locate 2 , X : Lcd Spc(1) ; Spc(1) ; Chr(3)
Case 5:
Locate 1 , X : Lcd Chr(0) ; Chr(4) ; Chr(4)
Locate 2 , X : Lcd Chr(6) ; Chr(6) ; Chr(3)
Case 6:
Locate 1 , X : Lcd Chr(0) ; Chr(4) ; Chr(4)
Locate 2 , X : Lcd Chr(2) ; Chr(6) ; Chr(3)
Case 7:
Locate 1 , X : Lcd Chr(7) ; Chr(7) ; Chr(1)
Locate 2 , X : Lcd Spc(1) ; Spc(1) ; Chr(3)
Case 8:
Locate 1 , X : Lcd Chr(0) ; Chr(4) ; Chr(1)
Locate 2 , X : Lcd Chr(2) ; Chr(6) ; Chr(3)
Case 9:
Locate 1 , X : Lcd Chr(0) ; Chr(4) ; Chr(1)
Locate 2 , X : Lcd Chr(6) ; Chr(6) ; Chr(3)
Case Else:
Locate 1 , X : Lcd Chr(255) ; Chr(255) ; Chr(255)
Locate 2 , X : Lcd Chr(255) ; Chr(255) ; Chr(255)
End Select
End If
End Sub
'_______________________________________________________________________________