'Program sterujący LCD Siemens S65 ze sterownikiem LPH88
'Lcd obrócony o 90st. (dłuższy bok LCD w poziomie)
'Współrzędne pozycjonowania tekstu - w pionie y = 0 do 116, w poziomie x = 0 do 160
'Współrzędne dla Window_locate w oryginalnym układzie jak dla pozycji pionowej.
'Czcionka 16x16 cyfry i duże litery.
'Kodowanie kolorów 16 bitów &Bbbbbbggggggrrrrr
'Czcionka kodowana w 14 słowach 16 bitowych linia po lini od góry z lewej strony najmniej znaczący bit.
'Odstępy między wierszami (2 pixele) wstawiane przez S65 automatycznie
'Końcówka RS wyświetlacza nie wymaga podłączenia do uC - program końcówki RS nie obsługuje.
'Spację wstawiamy przez "/"
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 128
$swstack = 128
$framesize = 128
Config Portc.2 = 1 : Rst Alias Portc.2
Config Portc.3 = 1 : Cs Alias Portc.3
'Clk Alias Portb.5 'CLK = SCK
'Dat Alias Portb.3 'DAT = MOSI
Const White = &HFFFF 'white
Const Black = &H0000 'black
Const Red = &HF800 'red
Const Green = &H7C0 'green
Const Blue = &H1F 'blue
Const Whiblu = &H7FF 'whiblu
Const Yellow = &B1111111111100000
Dim Temp As Byte
Dim A As Word , N As Byte , X As Byte
Dim Licznik As Byte , Color As Word
Declare Sub S65(byval Txt As String , Byval Cl As Word , Byval Ct As Word , Byval Ystart As Byte , Byval Xstart As Byte )
Declare Sub Clear_screen(byval Clear_color As Word)
Declare Sub Wordout()
Declare Sub Byteout()
Declare Sub S65_init()
Declare Sub Window_locate(byval X_start As Byte , Byval Y_start As Byte , Byval X_end As Byte , Byval Y_end As Byte)
Declare Sub Cspulse()
Declare Sub Command_send(byval Nn As Byte)
Declare Sub Data_send(byval Aa As Word)
Config Spi = Hard , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4 , Noss = 1
Spiinit
Call S65_init
Call Clear_screen(black)
Do
Incr X
Select Case X
Case 1 : Color = White
Case 2 : Color = Red
Case 3 : Color = Green
Case 4 : Color = Blue
Case 5 : Color = Whiblu
Case 6
Color = Yellow
X = 0
End Select
For Licznik = 0 To 116
Call S65( "SIEMENS/S65" , Color , Black , Licznik , 0) ' / = spacja
Next Licznik
Loop
End
Sub S65(txt , Cl , Ct , Ystart , Xstart) 'Ystart <= 116 Xstart <= 160
Local _lit As String * 1
Local _kod As Byte
Local _x As Byte
Local _y As Byte
Local _dane As Word
Local _wiersz As Word
Local _xend As Byte
Local _yend As Byte
Local _xstart As Byte
Local _ystart As Byte
Local _dlugosc As Byte
Local _numer_znaku As Byte
_xstart = Xstart
_ystart = 116 - Ystart ': If _xstart > 116 Then _xstart = 116
_yend = _ystart + 15
_xend = _xstart + 15
_dlugosc = Len(txt) : If _dlugosc > 11 Then _dlugosc = 11
For _numer_znaku = 1 To _dlugosc
Set Cs
_lit = Mid(txt , _numer_znaku , 1)
_kod = Asc(_lit)
If _kod < 58 Then _kod = _kod - 45 'Przesunięcie ASCII dla cyfr
If _kod > 64 Then _kod = _kod - 52 'Przesunięcie ASCII dla dużych liter
_wiersz = _kod * 14
Call Window_locate(_ystart , _xstart , _yend , _xend) 'x_start , Y_start , X_end , Y_end
For _y = 0 To 15
_dane = Lookup(_wiersz , _alfabet)
If _y < 2 Then
_dane = 0
Else
_dane = Lookup(_wiersz , _alfabet)
Incr _wiersz
End If
For _x = 0 To 15
If _dane._x = 1 Then A = Cl Else A = Ct
Call Wordout()
Next _x
Next _y
_xstart = _xstart + 16 : _xend = _xstart + 15
Next _numer_znaku
Set Cs
End Sub
'--------------------Krótki impuls CS ----------------------
Sub Cspulse
Set Cs
nop
Reset Cs
End Sub
'------------Wyślij adres i komendę---------------------------
Sub Command_send(nn)
N = &H74
Call Byteout()
N = 0
Call Byteout()
N = Nn
Call Byteout()
Call Cspulse
End Sub
'----------Wyślij adres i dane------------------------------
Sub Data_send(aa)
N = &H76
Call Byteout()
A = Aa
Call Wordout()
Call Cspulse
End Sub
'----------------Wyślij WORD-------------------------------
Sub Wordout()
lds r23, {a+1}
!out spdr, r23
lds r23, {a}
Wait_trh:
sbis spsr, spif
rjmp wait_trh
!out spdr, r23
Wait_trl:
sbis spsr, spif
rjmp wait_trl
End Sub
'-------------Wyślij BYTE---------------------------------
Sub Byteout
lds r23, {n}
!out spdr, r23
Waitresult:
sbis spsr, spif
rjmp waitresult
End Sub
'-------------------------------------------------------------------------------
Sub S65_init
Reset Rst
Set Cs
Waitms 1
Set Rst
Waitms 10
Reset Cs
Restore Ini_code
For Temp = 0 To 33
Read N
Call Command_send(n)
Read A
Call Data_send(a)
Next Temp
Waitms 300
Set Cs
End Sub
'-------------------------------------------------------------------------------
Sub Clear_screen(clear_color)
Local Temp2 As Word
Reset Cs
Call Window_locate(0 , 0 , 131 , 175) 'x_start , Y_start , X_end , Y_end
A = Clear_color
For Temp2 = 1 To 23232
Call Wordout()
Next Temp2
Set Cs
End Sub
'-------------------------------------------------------------------------------
Sub Window_locate(x_start , Y_start , X_end , Y_end )
Local Razem As Word
Reset Cs 'Poziomy adres start i stop okna
Call Command_send(&H16)
Razem = Makeint(x_start , X_end)
Call Data_send(razem)
Call Command_send(&H17) 'Pionowy adres start i stop okna
Razem = Makeint(y_start , Y_end)
Call Data_send(razem)
Call Command_send(&H21) 'Licznik adresu pamięci start X, Y
Razem = Makeint(x_start , Y_start)
Call Data_send(razem)
Call Command_send(&H22) ' Zapis okna do pamięci
N = &H76
Call Byteout()
End Sub
_alfabet:
Data 0% , 0% , 0% , 0% , 0% , 0% , 8184% , 8184% , 0% , 0% , 0% , 0% , 0% , 0% '- Minus
Data 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0% , 112% , 112% , 112% '. Kropka
Data 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0% '"/" Wstawia spację
Data 4080% , 8184% , 14364% , 12300% , 12300% , 12300% , 12300% , 12300% , 12300% , 12300% , 12300% , 14364% , 8184% , 4080% ' 0
Data 768% , 896% , 960% , 992% , 880% , 816% , 768% , 768% , 768% , 768% , 768% , 768% , 1920% , 1920% ' 1
Data 4080% , 8184% , 14364% , 12300% , 12288% , 14336% , 7680% , 1920% , 480% , 120% , 28% , 12% , 16380% , 16380% ' 2
Data 4080% , 8184% , 14364% , 12300% , 14336% , 7168% , 3840% , 3840% , 7168% , 14336% , 12300% , 14364% , 8184% , 4080% ' 3
Data 7168% , 7680% , 7936% , 7040% , 6592% , 6368% , 6256% , 6200% , 16380% , 16380% , 6144% , 6144% , 6144% , 6144% ' 4
Data 16380% , 16380% , 12% , 12% , 4092% , 8188% , 14348% , 12288% , 12288% , 12288% , 12300% , 14364% , 8184% , 4080% ' 5
Data 8176% , 16376% , 12316% , 12% , 12% , 4076% , 8188% , 14364% , 12300% , 12300% , 12300% , 14364% , 8184% , 4080% ' 6
Data 16380% , 16380% , 12288% , 14336% , 7168% , 3584% , 1792% , 896% , 448% , 192% , 192% , 192% , 192% , 192% ' 7
Data 4080% , 8184% , 14364% , 12300% , 12300% , 14364% , 8184% , 8184% , 14364% , 12300% , 12300% , 14364% , 8184% , 4080% ' 8
Data 4080% , 8184% , 14364% , 12300% , 12300% , 12300% , 14364% , 16376% , 14320% , 12288% , 12288% , 14348% , 8188% , 4088% ' 9
Data 384% , 960% , 960% , 1632% , 1632% , 3120% , 3120% , 7224% , 6168% , 16380% , 16380% , 28686% , 24582% , 24582% ' A
Data 4094% , 8190% , 14342% , 12294% , 12294% , 14342% , 8190% , 16382% , 28678% , 24582% , 24582% , 28678% , 16382% , 8190% ' B
Data 4080% , 8184% , 14364% , 12302% , 6% , 6% , 6% , 6% , 6% , 24582% , 28686% , 14364% , 8184% , 4080% ' C
Data 4094% , 8190% , 14342% , 12294% , 24582% , 24582% , 24582% , 24582% , 24582% , 24582% , 12294% , 14342% , 8190% , 4094% ' D
Data 32766% , 32766% , 6% , 6% , 6% , 6% , 8190% , 8190% , 6% , 6% , 6% , 6% , 32766% , 32766%, ' E
Data 32766% , 32766% , 6% , 6% , 6% , 6% , 8190% , 8190% , 6% , 6% , 6% , 6% , 6% , 6% ' F
Data 4080% , 8184% , 14364% , 12302% , 6% , 6% , 32262% , 32262% , 24582% , 24582% , 28686% , 30748% , 32760% , 28656%, ' G
Data 24582% , 24582% , 24582% , 24582% , 24582% , 24582% , 32766% , 32766% , 24582% , 24582% , 24582% , 24582% , 24582% , 24582% ' H
Data 2016% , 2016% , 384% , 384% , 384% , 384% , 384% , 384% , 384% , 384% , 384% , 384% , 2016% , 2016% ' I
Data 8184% , 8184% , 6144% , 6144% , 6144% , 6144% , 6144% , 6144% , 6144% , 7168% , 3072% , 3840% , 1984% , 448% ' J
Data 14342% , 15366% , 3590% , 1798% , 902% , 454% , 230% , 502% , 958% , 1822% , 3598% , 7174% , 30726% , 28678% ' K
Data 6% , 6% , 6% , 6% , 6% , 6% , 6% , 6% , 6% , 6% , 6% , 6% , 32766% , 32766% ' L
Data 24582% , 28686% , 30750% , 30750% , 31806% , 27702% , 26214% , 26214% , 25542% , 25542% , 24966% , 24582% , 24582% , 24582% ' M
Data 24582% , 24590% , 24606% , 24638% , 24694% , 24806% , 25030% , 25478% , 26374% , 28166% , 31750% , 30726% , 28678% , 24582%,
' N
Data 4080% , 8184% , 14364% , 28686% , 24582% , 24582% , 24582% , 24582% , 24582% , 24582% , 28686% , 14364% , 8184% , 4080% ' O
Data 8190% , 16382% , 28678% , 24582% , 24582% , 24582% , 28678% , 16382% , 8190% , 6% , 6% , 6% , 6% , 6% ' P
Data 4080% , 8184% , 14364% , 28686% , 24582% , 24582% , 24582% , 24582% , 26118% , 28166% , 15374% , 14364% , 32760% , 26608% ' Q
Data 8190% , 16382% , 28678% , 24582% , 24582% , 24582% , 28678% , 16382% , 8190% , 1798% , 3590% , 7174% , 30726% , 28678% ' R
Data 8184% , 16380% , 28686% , 24582% , 6% , 14% , 8188% , 16376% , 28672% , 24576% , 24582% , 28686% , 16380% , 8184% ' S
Data 32766% , 32766% , 384% , 384% , 384% , 384% , 384% , 384% , 384% , 384% , 384% , 384% , 384% , 384% ' T
Data 24582% , 24582% , 24582% , 24582% , 24582% , 24582% , 24582% , 24582% , 24582% , 24582% , 28686% , 14364% , 8184% , 4080% ' U
Data 24582% , 24582% , 28686% , 12300% , 14364% , 6168% , 7224% , 3120% , 3696% , 1632% , 2016% , 960% , 960% , 384% ' V
Data 24582% , 24582% , 24582% , 24582% , 24966% , 24966% , 25542% , 25542% , 26598% , 26214% , 32382% , 31806% , 15420% , 6168% ' W
Data 24582% , 28686% , 14364% , 7224% , 3696% , 2016% , 960% , 960% , 2016% , 3696% , 7224% , 30750% , 28686% , 24582% ' X
Data 24582% , 24582% , 24582% , 28686% , 14364% , 7224% , 3696% , 2016% , 960% , 384% , 384% , 384% , 384% , 384% ' Y
Data 32766% , 32766% , 14336% , 7168% , 3584% , 1792% , 896% , 448% , 224% , 112% , 56% , 28% , 32766% , 32766% ' Z
Ini_code:
Data &H07 , &H0000% , &H02 , &H0400% , &H04 , &H0000% , &H0C , &H0001% , &H0D , &H0616% , &H0E , &H1010%
Data &H03 , &B11111100% , &H0E , &H2D1F% , &H0D , &H0616% , &H01 , &H0215% , &H0F , &H0000% , &H0B , &H0000%
Data &H11 , &H0000% , &H06 , &H0000% , &H05 , &H0028% , &H14 , &HAF00% , &H15 , &H0000% , &H16 , &H8300%
Data &H17 , &HAF00% , &H20 , &H0000% , &H30 , &H0000% , &H31 , &H0400%
Data &H32 , &H0207% , &H33 , &H0700% , &H34 , &H0005% , &H35 , &H0703% , &H36 , &H0707% , &H37 , &H0007%
Data &H3A , &H1200% , &H3B , &H0009% , &H07 , &H0005% , &H07 , &H0025% , &H07 , &H0027% , &H07 , &H0037%