'=========================================================================
'CNK12864-13003B 0.96" 128x64 mono GLCD Module Test
'
' BY Kim, Inkeun ( HL3LZV ) 2014.05.24.
'=========================================================================
'++ LCD type: FSTN/Positive/Transmissive
'++ Module size(WxHxT):28.5mm x 20mm x 2.9mm
'++ Display view area(WxH): 26.5mm x 14mm
'++ Resolution: 128x64 , View angle:6 O'clock
'++ Driver IC : UC1701
'++ Backlight : 3.1v / White
'-------------------------------------------------------------------------
' Interface => 4 Wire Spi(Sda, Sclk, A0, Cs) + / Rst
' SDA= PB.0 , SCLK = PB.1 , A0 = PB.2 , RST = PB.3 , CS = PB.4
' VDD => 3.3V
' Capacidance => C1 ( pin1 <-> Pin6 ) => 0.1uF
' C2 ( pin2 <-> Pin3 ) => 1uF
' C3 ( pin4 <-> Pin5 ) => 1uF
'-------------------------------------------------------------------------
' Pin1 = VLCD(C1+), Pin2 = C2+, Pin3 = C2-, Pin4 = C3-, Pin5 = C3+
' Pin6 = VSS(C1-) , Pin7 = VDD, Pin8 = SDA, Pin9 = SCLK, Pin10= A0
' Pin11= /RST, Pin12= /CS , RED = B/L LED A , BLACK= B/L LED K
'=========================================================================
$regfile = "m8def.dat"
$crystal = 8000000
'
Config Pinb.0 = Output 'Serial DATA '
Config Pinb.1 = Output 'SCLK
Config Pinb.2 = Output 'A0 ( Low-> command / High-> Data )
Config Pinb.3 = Output 'Reset
Config Pinb.4 = Output 'CS ( Active Low )
'
A0 Alias Portb.2 'Command or Data
Rs Alias Portb.3 'Reset LCD
Cs Alias Portb.4 'Chip enable
'
'------------------------------------------------------------------------
Declare Sub Setlcdline(byval Yy As Byte) '0 ~ 63
Declare Sub Setlcdpage(byval Page As Byte) '0 ~ 7
Declare Sub Setlcdcol(byval Xx As Byte ) '0 ~ 127
Declare Sub Setlcdswreset
Declare Sub Setlcdvolt(byval V5 As Byte ) 'V_LCD Contrast 0~7
Declare Sub Setlcdvolm(byval Vol As Byte ) 'Contrast 0 ~ 63
Declare Sub Setlcdinit 'Initializing LCD
Declare Sub Setlcdclear(byval Zz As Byte) '0~255, 0=> clear, 255=> fill all dots
Declare Sub Lcdouttext 'Display TEXT on GLCD
Declare Sub Printfont '8 x 6 Font GLCD Out Sub routine
'-------------------------------
Dim Iii As Byte
Dim Xxx As Byte
Dim Jjj As Byte
Dim Kkk As Byte
Dim Vvv As Byte
Dim Vvv2 As Byte
Dim Lenght As Byte
Dim Loops As Byte
Dim Sign As String * 1
Dim Vvv1 As Byte
Dim Xx1 As Byte
Dim Text As String * 21
'-------------------------------------------------------------------------
Config Spi = Soft , Dout = Pinb.0 , Ss = None , Clock = Pinb.1
Spiinit
'----- LCD Hardware RESET ---------------------------------------------
Waitms 500 'Wait for voltage circuit stable
Rs = 1 : A0 = 1 : Cs = 1 'pull up control pins
Rs = 0 : Waitms 100 : Rs = 1 'Reset
'
'---- INIT LCD ----------------------------------------------------------
Call Setlcdinit 'initializing GLCD
'
'---- CLEAR LCD ----------------------------------------------------------
Call Setlcdclear(0)
'
Do
'=== Demo 1 => Display Strings =========================================
'
Setlcdpage 0 : Setlcdcol 0 : Text = "LINE 1 1234567890 11" : Lcdouttext : Wait 1
Setlcdpage 1 : Setlcdcol 0 : Text = "LINE 2 2345678901 22" : Lcdouttext : Wait 1
Setlcdpage 2 : Setlcdcol 0 : Text = "LINE 3 3456789012 33" : Lcdouttext : Wait 1
Setlcdpage 3 : Setlcdcol 0 : Text = "LINE 4 4567890123 44" : Lcdouttext : Wait 2
Setlcdpage 4 : Setlcdcol 0 : Text = "LINE 5 5678901234 55" : Lcdouttext : Wait 1
Setlcdpage 5 : Setlcdcol 0 : Text = "LINE 6 6789012345 66" : Lcdouttext : Wait 1
Setlcdpage 6 : Setlcdcol 0 : Text = "LINE 7 7890123456 77" : Lcdouttext : Wait 1
Setlcdpage 7 : Setlcdcol 0 : Text = "LINE 8 8901234567 88" : Lcdouttext : Wait 3
'
Setlcdclear 0 : Wait 2 'clear screen
'
'=== Demo 2 => Display "HL3LZV" from upper left to lowwer right =========
For Iii = 0 To 7
For Jjj = 0 To 99 Step 25
Setlcdpage Iii : Setlcdcol Jjj : Text = "HL3LZV" : Lcdouttext
Wait 1
Setlcdpage Iii : Setlcdcol Jjj : Text = " " : Lcdouttext
Next Jjj
Next Iii
'
'=== Demo 3 => Clear Screen =============================================
Setlcdclear 0 : Wait 2 'clear screen
Setlcdclear 255 : Wait 2 'fill all screen with dots
Setlcdclear 8 : Wait 2 'fill with &B00001000
Setlcdclear &B10001100 : Wait 2 'fill with &b01100110 (102)
Setlcdclear 0 : Wait 2 'clear screen
'
Loop
End
'
' ======== Sub routines ====================================================
Sub Setlcdline(byval Yy As Byte)
Vvv = &B01000000 + Yy 'start line set => ( 0 ~ 63 )
A0 = 0 : Cs = 0 : Spiout Vvv , 1 : Cs = 1 : A0 = 1
End Sub Setlcdline(byval Yy As Byte)
'--------------------------------------------
Sub Setlcdpage(byval Page As Byte)
Vvv = &B10110000 + Page ' Page =>(&B1011CCCC, 0000=>1page ~0111=>8page )
A0 = 0 : Cs = 0 : Spiout Vvv , 1 : Cs = 1 : A0 = 1
End Sub Setlcdpage(byval Page As Byte)
'--------------------------------------------
Sub Setlcdcol(byval Xx As Byte)
Vvv = Xx : Vvv1 = Xx
Shift Vvv , Right , 4 : Vvv = Vvv
Vvv = &B00010000 + Vvv
Shift Vvv1 , Left , 4 : Shift Vvv1 , Right , 4
' Vvv = Vvv1 + 16
' Setting Column address upper bit (&B0001CCCC, &H8:0000 )
A0 = 0 : Cs = 0 : Spiout Vvv1 , 1 : Spiout Vvv , 1 : Cs = 1 : A0 = 1
' Setting Column address lower bit (&B0000CCCC,&H3 : 0000 )
' A0 = 0 : Cs = 0 : Spiout Vvv1 , 1 : Cs = 1 : A0 = 1
End Sub Setlcdcol(byval Xx As Byte)
'----------------------------------------------
Sub Setlcdswreset ' LCD Software Reset => &B11100010
Vvv = &B11100010
A0 = 0 : Cs = 0 : Spiout Vvv , 1 : Waitms 500 : Cs = 1 : A0 = 1
End Sub Setlcdswreset
'----------------------------------------------
Sub Setlcdvolt(byval V5 As Byte ) ' &B00100ccc ( 0 ~ 7 )
Vvv = &B00100000 + V5
A0 = 0 : Cs = 0 : Spiout Vvv , 1 : Cs = 1 : A0 = 1
End Sub Setlcdvolt(byval V5 As Byte )
'----------------------------------------------
Sub Setlcdvolm(byval Vol As Byte )
Vvv = Vol : Vvv1 = &B10000001 ' The Electrinic Volume => 2byte
A0 = 0 : Cs = 0 : Spiout Vvv1 , 1 : Spiout Vvv , 1 : Cs = 1 : A0 = 1
End Sub Setlcdvolm(byval Vol As Byte )
'----------------------------------------------
Sub Setlcdinit
Call Setlcdswreset
' LCD Display start line (&B01CCCCCC, 0 ~ 63 )
Vvv = &H40
A0 = 0 : Cs = 0 : Spiout Vvv , 1 : Cs = 1 : A0 = 1
' LCD ADC Select => Normal=&B10100000, Reverse=&B10100001 )
Vvv = &HA0
A0 = 0 : Cs = 0 : Spiout Vvv , 1 : Cs = 1 : A0 = 1
' Commom output mode => &B11000000=> Normal,&B11001000=>:reverse )
Vvv = &HC8
A0 = 0 : Cs = 0 : Spiout Vvv , 1 : Cs = 1 : A0 = 1
' Set Inverse Display (&B1010011C, &HA6= Not Mirror )
Vvv = &B10100110
A0 = 0 : Cs = 0 : Spiout Vvv , 1 : Cs = 1 : A0 = 1
' LCD Bias Setting 1/9 bias (&B1010001C, 0=> 1/9 , 1=> 1/7 )
Vvv = &B10100010
A0 = 0 : Cs = 0 : Spiout Vvv , 1 : Cs = 1 : A0 = 1
' Power Control Setting => (&00101CCC, 111=>Booster,Vreg,V/F all ON )
Vvv = &B00101111
A0 = 0 : Cs = 0 : Spiout Vvv , 1 : Cs = 1 : A0 = 1
' Set Booster Ratio => (2 Byte => &hF8, &H00 x4 )
Vvv = &HF8 : Vvv1 = &H00
A0 = 0 : Cs = 0 : Spiout Vvv , 1 : Spiout Vvv1 , 1 : Cs = 1 : A0 = 1
Call Setlcdvolt(4)
Call Setlcdvolm(36)
' Display On => 'On => &B10101111, Off=> &B10101110
Vvv = &B10101111
A0 = 0 : Cs = 0 : Spiout Vvv , 1 : Cs = 1 : A0 = 1
' No indicator
Vvv = &HAC : Vvv1 = &H00 : Vvv2 = &HAF
A0 = 0 : Cs = 0 : Spiout Vvv , 1 : Spiout Vvv1 , 1 : Spiout Vvv2 , 1 : Cs = 1 : A0 = 1
Call Setlcdclear(0)
Call Setlcdcol(0) '0~ 127
Call Setlcdpage(0) '0 ~ 7
End Sub Setlcdinit
'-----------------------------------------------------------
Sub Setlcdclear(byval Zz As Byte)
For Jjj = 0 To 7
Setlcdpage Jjj
For Iii = 0 To 127
Setlcdpage Jjj : Setlcdcol Iii
Vvv = Zz
A0 = 1 : Cs = 0 : Spiout Vvv , 1 : Cs = 1 : A0 = 1
Next Iii
Next Jjj
End Sub Setlcdclear(byval Zz As Byte)
'------------------------------------------------------------
Sub Printfont
For Kkk = 0 To 5
Read Xxx
A0 = 1 : Cs = 0 : Spiout Xxx , 1 : Cs = 1 : A0 = 1
Next Kkk
End Sub Printfont
'------------------------------------------------------------
Sub Lcdouttext
Lenght = Len(text)
For Loops = 1 To Lenght
Sign = Mid(text , Loops , 1)
If Sign = " " Then Restore 10:
If Sign = "0" Then Restore 0:
If Sign = "1" Then Restore 1:
If Sign = "2" Then Restore 2:
If Sign = "3" Then Restore 3:
If Sign = "4" Then Restore 4:
If Sign = "5" Then Restore 5:
If Sign = "6" Then Restore 6:
If Sign = "7" Then Restore 7:
If Sign = "8" Then Restore 8:
If Sign = "9" Then Restore 9:
If Sign = "A" Or Sign = "a" Then Restore A:
If Sign = "B" Or Sign = "b" Then Restore B:
If Sign = "C" Or Sign = "c" Then Restore C:
If Sign = "D" Or Sign = "d" Then Restore D:
If Sign = "E" Or Sign = "e" Then Restore E:
If Sign = "F" Or Sign = "f" Then Restore F:
If Sign = "G" Or Sign = "g" Then Restore G:
If Sign = "H" Or Sign = "h" Then Restore H:
If Sign = "I" Or Sign = "i" Then Restore I:
If Sign = "J" Or Sign = "j" Then Restore J:
If Sign = "K" Or Sign = "k" Then Restore K:
If Sign = "L" Or Sign = "l" Then Restore L:
If Sign = "M" Or Sign = "m" Then Restore M:
If Sign = "N" Or Sign = "n" Then Restore N:
If Sign = "O" Or Sign = "o" Then Restore O:
If Sign = "P" Or Sign = "p" Then Restore P:
If Sign = "Q" Or Sign = "q" Then Restore Q:
If Sign = "R" Or Sign = "r" Then Restore R:
If Sign = "S" Or Sign = "s" Then Restore S:
If Sign = "T" Or Sign = "t" Then Restore T:
If Sign = "U" Or Sign = "u" Then Restore U:
If Sign = "V" Or Sign = "v" Then Restore V:
If Sign = "W" Or Sign = "w" Then Restore W:
If Sign = "X" Or Sign = "x" Then Restore X:
If Sign = "Y" Or Sign = "y" Then Restore Y:
If Sign = "Z" Or Sign = "z" Then Restore Z:
Printfont
Next Loops
End Sub Lcdouttext
'=========================================================
'
10:
Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00
0:
Data &H00 , &H3E , &H41 , &H41 , &H41 , &H3E
1:
Data &H00 , &H00 , &H41 , &H7F , &H40 , &H00
2:
Data &H00 , &H42 , &H61 , &H51 , &H49 , &H46
3:
Data &H00 , &H22 , &H41 , &H49 , &H49 , &H36
4:
Data &H00 , &H18 , &H14 , &H52 , &H7F , &H50
5:
Data &H00 , &H4F , &H49 , &H49 , &H49 , &H31
6:
Data &H00 , &H3E , &H49 , &H49 , &H49 , &H32
7:
Data &H00 , &H03 , &H01 , &H71 , &H09 , &H07
8:
Data &H00 , &H36 , &H49 , &H49 , &H49 , &H36
9:
Data &H00 , &H26 , &H49 , &H49 , &H49 , &H3E
A:
Data &H00 , &H78 , &H16 , &H11 , &H16 , &H78
B:
Data &H00 , &H7F , &H49 , &H49 , &H49 , &H36
C:
Data &H00 , &H3E , &H41 , &H41 , &H41 , &H22
D:
Data &H00 , &H7F , &H41 , &H41 , &H41 , &H3E
E:
Data &H00 , &H7F , &H49 , &H49 , &H49 , &H41
F:
Data &H00 , &H7F , &H09 , &H09 , &H09 , &H01
G:
Data &H00 , &H3E , &H41 , &H41 , &H49 , &H3A
H:
Data &H00 , &H7F , &H08 , &H08 , &H08 , &H7F
I:
Data &H00 , &H00 , &H41 , &H7F , &H41 , &H00
J:
Data &H00 , &H30 , &H40 , &H40 , &H40 , &H3F
K:
Data &H00 , &H7F , &H08 , &H14 , &H22 , &H41
L:
Data &H00 , &H7F , &H40 , &H40 , &H40 , &H40
M:
Data &H00 , &H7F , &H02 , &H0C , &H02 , &H7F
N:
Data &H00 , &H7F , &H06 , &H08 , &H30 , &H7F
O:
Data &H00 , &H3E , &H41 , &H41 , &H41 , &H3E
P:
Data &H00 , &H7F , &H09 , &H09 , &H09 , &H06
Q:
Data &H00 , &H3E , &H41 , &H51 , &H21 , &H5E
R:
Data &H00 , &H7F , &H09 , &H19 , &H29 , &H46
S:
Data &H00 , &H26 , &H49 , &H49 , &H49 , &H32
T:
Data &H00 , &H01 , &H01 , &H7F , &H01 , &H01
U:
Data &H00 , &H3F , &H40 , &H40 , &H40 , &H3F
V:
Data &H00 , &H0F , &H30 , &H40 , &H30 , &H0F
W:
Data &H00 , &H3F , &H40 , &H38 , &H40 , &H3F
X:
Data &H00 , &H63 , &H14 , &H08 , &H14 , &H63
Y:
Data &H00 , &H07 , &H08 , &H70 , &H08 , &H07
Z:
Data &H00 , &H61 , &H51 , &H49 , &H45 , &H43 |