atm12864d
Moderátor: Moderátoři
co musim udelat kdyz chci zapsat treba pixel na souradnice (x , y) (10 , 20)
vyvod rst je trvale na +5v nejde pouzit knihovna z bascomu glcdks108.lib pac se dataport sklada ze dvou portu a navic nefacha na 16mhz s megou32.
dik za radu.
Displej má ještě jeden registr, Display Start Line, který říká, která řádka (0-63) je zobrazená jako první shora. Dá se tak posouvat obsah displeje nahoru nebo dolu bez nutnosti přesouvat všechna data v paměti displeje. Pokud je číslo počáteční řádky nenulové, je nutno tento posun připočítat při výše uvedeném výpočtu svislé pozice bodu na displeji.
Kód: Vybrat vše
'*******************************************************************************
'* Ovladani lcd s ks0108 + atmega32 16MHz **************************************
'* apam@seznam.cz **************************************************************
'*******************************************************************************
$regfile = "m32def.dat"
$crystal = 16000000
$hwstack = 128
$swstack = 128
$framesize = 128
'$sim
'*******************************************************************************
'* LCD Konfigurace pinu ks108 **************************************************
'*******************************************************************************
Config Portc = Output
Config Portd.1 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Config Porta.3 = Output
Config Portd.6 = Output
Dataport Alias Portc
Rs Alias Portd.1
Rw Alias Portd.2
E Alias Portd.3
Cs2 Alias Porta.3
Cs1 Alias Portd.6
'*******************************************************************************
'* Deklarace F-ce LCD **********************************************************
'*******************************************************************************
Declare Sub Ks_init()
Declare Sub Ks_cls(byval Cx As Byte)
Declare Sub Ks_pset(byval Lx As Byte , Byval Ly As Byte , Byval Lz As Byte)
'*******************************************************************************
'* Promenne ********************************************************************
'*******************************************************************************
Dim Horizontala As Byte 'posuv lcd
Dim A As Byte
'*******************************************************************************
'* Jina nastaveni **************************************************************
'*******************************************************************************
Horizontala = 192 ' 192 =0 pro posouvani obsahu lcd
'*******************************************************************************
'* Vlastni program *************************************************************
'*******************************************************************************
Call Ks_init()
Call Ks_cls(0)
Do
Call Ks_cls(0)
Wait 1
For A = 0 To 127 'nakresli horizontalni caru 0-127
Call Ks_pset(a , 10 , 1)
Waitms 10
Next
For A = 0 To 127 'smaze horizontalni caru 0-127
Call Ks_pset(a , 10 , 0)
Waitms 10
Next
Call Ks_pset(0 , 0 , 1) 'zapisuje pixelz podle souradnic
Call Ks_pset(0 , 63 , 1)
Call Ks_pset(63 , 0 , 1)
Call Ks_pset(63 , 63 , 1)
Call Ks_pset(64 , 0 , 1)
Call Ks_pset(64 , 63 , 1)
Call Ks_pset(127 , 0 , 1)
Call Ks_pset(127 , 63 , 1)
Wait 3
Loop
End 'end program
'*******************************************************************************
'*******************************************************************************
'* LCD INIT fce KS_INIT ********************************************************
'*******************************************************************************
Sub Ks_init()
Reset Rs
Reset Rw
Set Cs1
Set Cs2
Waitus 42
Dataport = &HC0 ' start line
Gosub Ecko
Waitus 42
Dataport = &H40 ' adresa
Gosub Ecko
Waitus 42
Dataport = &HB8 ' stranka
Gosub Ecko
Waitus 42
Dataport = &H3F ' zapnuti lcd
Gosub Ecko
Reset Cs1
Reset Cs2
End Sub
'*******************************************************************************
'* Clear LCD fce KS_cls(x), x=1=invert *****************************************
'*******************************************************************************
Sub Ks_cls(cx As Byte)
Local Ccx As Byte , Ccy As Byte
Ccy = 0
Set Cs1
Set Cs2
Reset Rw
Reset Rs
Dataport = Horizontala 'start line
Gosub Ecko
Dataport = 64 'adresa
Gosub Ecko
Dataport = 184 'stranka
Gosub Ecko
If Cx = 0 Then
For Ccy = 0 To 7
Dataport = Ccy + 184
Gosub Ecko
Set Rs
For Ccx = 0 To 63
Dataport = 0
Gosub Ecko
Next
Reset Rs
Next
Else
For Ccy = 0 To 7
Dataport = Ccy + 184
Gosub Ecko
Set Rs
For Ccx = 0 To 63
Dataport = 255
Gosub Ecko
Next
Reset Rs
Next
End If
Reset Rs
Reset Cs1
Reset Cs2
End Sub
'*******************************************************************************
'* PIXEL SET fce KS_PSET *******************************************************
'*******************************************************************************
Sub Ks_pset(lx As Byte , Ly As Byte , Lz As Byte)
Local Ylcd As Byte , Lcdram As Byte , Stranka As Byte
If Lx > 127 Then Lx = 127
If Ly > 63 Then Ly = 63
Stranka = Ly / 8
Ylcd = Ly Mod 8
If Lx < 64 Then
Set Cs1
Reset Cs2
Reset Rs
Reset Rw
Dataport = 64 + Lx
Gosub Ecko
Dataport = 184 + Stranka
Gosub Ecko
Dataport = 0
Set Rs
Set Rw
Lcdram = Dataport
Gosub Ecko
Reset Rs
Reset Rw
If Lz = 0 Then
Reset Lcdram . Ylcd
Else
Set Lcdram . Ylcd
End If
Set Rs
Dataport = Lcdram
Gosub Ecko
Else
Reset Cs1
Set Cs2
Reset Rs
Reset Rw
Dataport = Lx
Gosub Ecko
Dataport = 184 + Stranka
Gosub Ecko
Dataport = 0
Set Rs
Set Rw
Lcdram = Dataport
Gosub Ecko
Reset Rs
Reset Rw
If Lz = 0 Then
Reset Lcdram . Ylcd
Else
Set Lcdram . Ylcd
End If
Set Rs
Dataport = Lcdram
Gosub Ecko
End If
Reset Rs
Reset Cs1
Reset Cs2
End Sub
Ecko:
Waitus 1
Set E
Waitus 3
Reset E
Waitus 3
Return