glcd örnek code

Başlatan ibo1973, 24 Ocak 2008, 11:14:39

ibo1973

arkadaşlar bir hafta kadardır uğraştığım girafik lcd yi iyece öğrendim ve çalıştırdım fakat öğrenirken en çok zorlandığım konulardan biri yeterince kaynak olmaması idi zaten kendimde glcd konusunda baya acemi birisiydim hatta pic basic pro konusundada acemi birisiyim hasbel kader aşağıdaki kodu ben yazdım üzerinde proglamlama hataları olabilir ama sonuç itibari ile kod çalışıyor ve glcd ye istediğinzi kolay bir sekilde yazdırılabilir benim kullandığım glcd ks0108 uyumlu TS12864a2 bunu bu programla gayet iyi kontrol edip yazı yazdırabiliyorum işine yarıyan arkadaşlar programı alıp kulanabilir benden usta olan arkadaşlarda programı daha iyi hale getirip buraya koyabilirler neyse burdan ete arkadaşımıza yardımları için ve sabrı için çok teşşekür ederim ayrıca faydalı olabilicek görsel ve sesli anlatımın yapıldığı bu linkide incelemenizi tavsiye ederim http://www.geocities.com/dinceraydin/screencast/gfxtr.html  bu arakadaşa çok teşşekür ederim
kod:
 ' ks0108 lcd lerin çalışma mantığı özetle aşağıdaki gibidir
' data sheed de yazdığı gibi glcd ye 2 modda picden bilgi yolanıyor komut modu (command mode)
' ve data modu (ekranda çıkmasını istediğiniz datalar)
' komut moduna geçmek için di=0 rw=0 ve e ucu açılır kapatılır glcdi böylece komut moduna geçer
' komut modundayken cs1 veya cs2 şeçilir e ucu açılıp kapatılır  page seçilir E ucu açılıp kapatılır
' y den yazdırılıcak alan seçilir e ucu açılıp kapatılır (0 ve 64 arası) di=1 Rw=0 olarak ayarlanır 
' ve yazdırılıcak data yollanır
' ve e ucu açılır ve kapatılır ( e ucu açılıp kapatılırken araya glcd nin datasheed inde yazdığı gibi
' geçikme verilir ) 
' 2 Glcd den page seçme komutu yollanır
' 3 Glcd den yazılıcak adres seçilir
' 4 Glcd ye data gönderilir

Trisb=0 
Trisd=0 
ADCON1	= 7

lcd      VAR 	PORTB		'db0-db7
enbl     VAR 	PORTD.3		'Enable pin 
di       VAR	PORTD.1		'Data/komut Pin 4 on LCD
rw   	 VAR 	PORTD.2		'R/w  
cs1  	 VAR 	PORTD.4		'chip seçme 
cs2 	 VAR	PORTD.5		'chip seçme 
rst	     VAR	PORTD.0     'reset
    x        var byte           'genel değişken
    y2       var byte           'genel değişken
    y3       var byte           'genel değişken
    char     var byte           'genel değişken
    chr      var byte           'genel değişken
    j1	     VAR BYTE	        'genel değişken
    k1	     VAR BYTE           'genel değişken    
    Y        var byte           'genel değişken
    son      var byte           'genel değişken
    bilgi    VAR BYTE           'genel değişken 
    disp_on   CON    $3f		'LCD yi ac
    disp_off  CON    $3e        'LCD yi kapat
    disp_ram  CON    $c0        'Ram Display 0 (Page 0 at top of display) 
    y63       CON    $ff        'y nin son satırı 63 (0-63 arası)
    y0        CON    64		    'y nin ilk satırı 0  (0-63 arası)
    pagexx0	  CON    $b8        'LCD PAGE 0
    pagexx7	  CON    $bf        'LCD PAGE 7
    bos1      CON    $ff        'bos karakter
	   
       
	   
gosub cs01 ' cs seçme
basla:                 
bilgi=0:GOSUB Y00 : gosub A  'A B C D E F G H L J K L M N O Ö P R S T U V X Y Z
bilgi=0:GOSUB Y22 : gosub B  ' burdan page ve y den satır seçerek harflere gosub ile
bilgi=0:GOSUB Y33 : gosub C  ' yönlendirirerek harfleri lcd de yazdırabiliyorsunuz
bilgi=0:GOSUB Y44 : gosub D  '
bilgi=0:GOSUB Y55 : gosub E  '
bilgi=1:GOSUB Y11 : gosub F  '
bilgi=1:GOSUB Y22 : gosub F  '
bilgi=1:GOSUB Y33 : gosub F
bilgi=1:GOSUB Y44 : gosub F
bilgi=1:GOSUB Y55 : gosub F
bilgi=2:GOSUB Y11 : gosub P
bilgi=2:GOSUB Y22 : gosub S
bilgi=2:GOSUB Y33 : gosub T
bilgi=2:GOSUB Y44 : gosub U
bilgi=2:GOSUB Y55 : gosub V
gosub cs10
bilgi=2:GOSUB Y66 : gosub X1
bilgi=2:GOSUB Y77 : gosub Y1
bilgi=2:GOSUB Y88 : gosub Z1
bilgi=3:GOSUB Y11 : gosub Z0
bilgi=3:GOSUB Y22 : gosub Z1
bilgi=3:GOSUB Y33 : gosub Z2
bilgi=3:GOSUB Y44 : gosub Z3
bilgi=3:GOSUB Y55 : gosub Z4
bilgi=3:GOSUB Y66 : gosub Z5
bilgi=3:GOSUB Y77 : gosub Z6
bilgi=3:GOSUB Y88 : gosub Z7
bilgi=4:GOSUB Y11 : gosub Z8
bilgi=4:GOSUB Y22 : gosub Z9
gosub cs11  ' cs seçme
gosub lcdac 'lcdekran kaplı iken ekran seçip dataları gönder

 sil:
	gosub lcdkapat	
	gosub cs10
	for k1 = 1 to 2
          for y2 = pagexx0 to pagexx7
	        di = 0	        'Command mode
 	        gosub onay	' Write the data
	        lcd = y0	' Column address = 0
	        gosub onay
	        lcd = y2
	        gosub onay	
	        di = 1		' Write mode
	          for y3 = y0 to y63
	             lcd = bos1
	             gosub onay
	          next
	  next
	  swap cs1,cs2
        next

	gosub cs01
	di=0
	lcd=pagexx0
	gosub onay
	lcd = disp_ram	' Ram Line 0
	gosub onay
	lcd=y0
	gosub onay
	gosub lcdac
	gosub cs10
	lcd=pagexx0
	gosub onay
	lcd = disp_ram	' Ram Line 0
	gosub onay
	lcd=y0
	gosub onay
return	
BOS:
        FOR X=0 TO 7 
        LOOKUP X,[$FF,$81,$7E,$7E,$7E,$7E,$81,$FF],lcd ' boş karakter için hazır karakter
        GOSUB ONAY:NEXT X  
        return

Z0:
        FOR X=0 TO 7 
        LOOKUP X,[$FF,$81,$7E,$7E,$7E,$7E,$81,$FF],lcd ' 0 için hazır karakter
        GOSUB ONAY:NEXT X  
        return
Z1:
        FOR X=0 TO 7 
        LOOKUP X,[$FF,$FF,$7D,$7D,$00,$7F,$7F,$FF],lcd ' 1 için hazır karakter
        GOSUB ONAY:NEXT X  
        return
Z2:
        FOR X=0 TO 7 
        LOOKUP X,[$FF,$3D,$5E,$6E,$76,$39,$FF,$FF],lcd  ' 2 için hazır karakter
        GOSUB ONAY:NEXT X  
        return
Z3:
        FOR X=0 TO 7 
        LOOKUP X,[$FF,$BD,$7E,$76,$76,$89,$FF,$FF],lcd ' 3 için hazır karakter
        GOSUB ONAY:NEXT X  
        return
Z4:
        FOR X=0 TO 7 
        LOOKUP X,[$FF,$EF,$E3,$ED,$6E,$00,$6F,$FF],lcd ' 4 için hazır karakter 
        GOSUB ONAY:NEXT X  
        return                                            
Z5:
        FOR X=0 TO 7 
        LOOKUP X,[$FF,$BF,$70,$76,$76,$76,$8E,$FF],lcd ' 5 için hazır karakter
        GOSUB ONAY:NEXT X  
        return
Z6:
        FOR X=0 TO 7 
        LOOKUP X,[$FF,$FF,$83,$75,$76,$76,$8E,$FF],lcd ' 6 için hazır karakter 
        GOSUB ONAY:NEXT X  
        return
Z7:
        FOR X=0 TO 7 
        LOOKUP X,[$FF,$FC,$FE,$EE,$0E,$E6,$E8,$FF],lcd ' 7 için hazır karakter
        GOSUB ONAY:NEXT X  
        return
Z8:
        FOR X=0 TO 7 
        LOOKUP X,[$FF,$89,$76,$76,$76,$76,$89,$FF],lcd ' 8 için hazır karakter
        GOSUB ONAY:NEXT X  
        return                                                  
Z9:
        FOR X=0 TO 7 
        LOOKUP X,[$FF,$71,$6E,$6E,$6E,$AE,$C1,$FF],lcd ' 9 için hazır karakter
        GOSUB ONAY:NEXT X  
        return
Z11:
        FOR X=0 TO 7 
        LOOKUP X,[$FF,$39,$5D,$6D,$75,$39,$FF,$FF],lcd ' z için hazır karakter
        GOSUB ONAY:NEXT X  
        return
Y1:
        FOR X=0 TO 7 
        LOOKUP X,[$FD,$F9,$65,$1F,$65,$F9,$FD,$FF],lcd ' y için hazır karakter
        GOSUB ONAY:NEXT X  
        return
O1:
        FOR X=0 TO 7 
        LOOKUP X,[$C7,$BB,$7C,$7D,$7C,$BB,$C7,$FF],lcd ' Ö için hazır karakter
        GOSUB ONAY:NEXT X  
        return
O:
        FOR X=0 TO 7 
        LOOKUP X,[$C7,$BB,$7D,$7D,$7D,$BB,$C7,$FF],lcd ' O için hazır karakter
        GOSUB ONAY:NEXT X  
        return
X1:
         FOR X=0 TO 7 
        LOOKUP X,[$7D,$BD,$DB,$E7,$DB,$BD,$7D,$FF],lcd ' X için hazır karakter 
        GOSUB ONAY:NEXT X  
        return
V:
        FOR X=0 TO 7 
        LOOKUP X,[$FD,$F1,$CD,$3F,$3F,$CD,$F1,$FD],lcd ' V için hazır karakter
        GOSUB ONAY:NEXT X  
        return
U:
        FOR X=0 TO 7 
        LOOKUP X,[$FD,$81,$7D,$7F,$7D,$81,$FD,$FF],lcd ' U için hazır karakter 
        GOSUB ONAY:NEXT X  
        return
T:
        FOR X=0 TO 7 
        LOOKUP X,[$F9,$FD,$7D,$01,$7D,$FD,$F9,$FF],lcd ' T için hazır karakter 
        GOSUB ONAY:NEXT X  
        return
S:
        FOR X=0 TO 7 
        LOOKUP X,[$FF,$73,$6D,$6D,$6D,$6D,$9D,$FF],lcd ' s için hazır karakter 
        GOSUB ONAY:NEXT X  
        return
R:
        FOR X=0 TO 7 
        LOOKUP X,[$FF,$7D,$01,$6D,$CD,$AD,$73,$FF],lcd ' R için hazır karakter
        GOSUB ONAY:NEXT X  
        return
P:
        FOR X=0 TO 7 
        LOOKUP X,[$FF,$7D,$01,$6D,$ED,$ED,$F3,$FF],lcd 'P  için hazır karakter
        GOSUB ONAY:NEXT X  
        return
N:
        FOR X=0 TO 7 
        LOOKUP X,[$7D,$01,$7D,$F3,$CF,$3F,$01,$FD],lcd 'N için hazır karakter
        GOSUB ONAY:NEXT X  
        return
M:
        FOR X=0 TO 7 
        LOOKUP X,[$FF,$7D,$01,$79,$E7,$79,$01,$7D],lcd'M  için hazır karakter
        GOSUB ONAY:NEXT X  
        return
L:
        FOR X=0 TO 7 
        LOOKUP X,[$FF,$FD,$01,$7D,$7F,$7F,$3F,$FF],lcd 'L için hazır karakter
        GOSUB ONAY:NEXT X  
        return 
K:
        FOR X=0 TO 7 
        LOOKUP X,[$FF,$7D,$01,$6D,$D7,$BB,$7D,$FF],lcd 'K için hazır karakter
        GOSUB ONAY:NEXT X  
        return                             
J:
        FOR X=0 TO 7 
        LOOKUP X,[$FF,$8F,$7F,$7D,$7D,$81,$FD,$FF],lcd 'J  için hazır karakter
        GOSUB ONAY:NEXT X  
        return                  
i1:
        FOR X=0 TO 7 
        LOOKUP X,[$FF,$FF,$FF,$02,$02,$FF,$FF,$FF],lcd 'i  için hazır karakter
        GOSUB ONAY:NEXT X  
        return
I:
        FOR X=0 TO 7 
        LOOKUP X,[$FF,$FF,$7D,$01,$01,$7D,$FF,$FF],lcd 'ı için hazır karakter
        GOSUB ONAY:NEXT X  
        return
H:
        FOR X=0 TO 7 
        LOOKUP X,[$FF,$01,$EF,$EF,$EF,$EF,$01,$FF],lcd  'H için hazır karakter
        GOSUB ONAY:NEXT X  
        return              
G:
        FOR X=0 TO 7 
        LOOKUP X,[$C7,$BB,$7D,$7D,$6D,$6D,$8D,$FF],lcd 'G için hazır karakter
        GOSUB ONAY:NEXT X  
        return
F:
        FOR X=0 TO 7 
        LOOKUP X,[$FF,$01,$ED,$ED,$ED,$ED,$FD,$FF],lcd  'F  için hazır karakter
        GOSUB ONAY:NEXT X   
        return
E:
        FOR X=0 TO 7 
        LOOKUP X,[$FF,$01,$6D,$6D,$6D,$6D,$6D,$FF],lcd 'E için hazır karakter
        GOSUB ONAY:NEXT X   
        return
D:
        FOR X=0 TO 7 
        LOOKUP X,[$FF,$01,$7D,$7D,$7D,$BB,$C7,$FF],lcd  'D için hazır karakter
        GOSUB ONAY:NEXT X   
        return
C:
        FOR X=0 TO 7 
        LOOKUP X,[$FF,$C7,$BB,$7D,$7D,$7D,$BB,$FF],lcd    'C için hazır karakter
        GOSUB ONAY:NEXT X 
        return
B:
        FOR X=0 TO 7 
        LOOKUP X,[$FF,$01,$6D,$6D,$6D,$6D,$93,$FF],lcd   'B için hazır karakter
        GOSUB ONAY:NEXT X   
        return
A:       
        FOR X=0 TO 7 
        LOOKUP X,[$FF,$03,$ED,$ED,$ED,$ED,$03,$FF],lcd  'A için hazır karakter
        GOSUB ONAY:NEXT X   
        return
 
return
ONAY: 
    enbl=1:PAUSEUS 10:enbl=0 'bu işlem lcd ye göndereceğiniz bilgiler için enter vazifesi gibi
    return                   'çalışır yani göndereceğiniz herhangi bir bilgi yada komut yazıldıktan sonra bu işlem yapılır
Y88:  di=0:lcd=(pagexx0+bilgi):GOSUB ONAY ' y den satır seçmek için kulanılan kısım 
        lcd=(y0+64):GOSUB ONAY:di=1    
        RETURN 
y77:  di=0:lcd=(pagexx0+bilgi):GOSUB ONAY  ' y den satır seçmek için kulanılan kısım
        lcd=(y0+56):GOSUB ONAY:di=1    
        RETURN                             
y66:  di=0:lcd=(pagexx0+bilgi):GOSUB ONAY  ' y den satır seçmek için kulanılan kısım
        lcd=(y0+48):GOSUB ONAY:di=1    
        RETURN 
y55:  di=0:lcd=(pagexx0+bilgi):GOSUB ONAY  ' y den satır seçmek için kulanılan kısım
        lcd=(y0+40):GOSUB ONAY:di=1    
        RETURN 
y44:  di=0:lcd=(pagexx0+bilgi):GOSUB ONAY  ' y den satır seçmek için kulanılan kısım
        lcd=(y0+32):GOSUB ONAY:di=1    
        RETURN 
y33:  di=0:lcd=(pagexx0+bilgi):GOSUB ONAY  ' y den satır seçmek için kulanılan kısım
        lcd=(y0+24):GOSUB ONAY:di=1    
        RETURN 
y22:  di=0:lcd=(pagexx0+bilgi):GOSUB ONAY  ' y den satır seçmek için kulanılan kısım
        lcd=(y0+16):GOSUB ONAY:di=1    
        RETURN 
y11:  di=0:lcd=(pagexx0+bilgi):GOSUB ONAY ' y den satır seçmek için kulanılan kısım
        lcd=(y0+8):GOSUB ONAY:di=1    
        RETURN 
y00:  di=0:lcd=(pagexx0+bilgi):GOSUB ONAY  ' y den satır seçmek için kulanılan kısım
        lcd=(y0+0):GOSUB ONAY:di=1    
        RETURN 
cs11:
 rw=0 :di=0 :cs1=1 :cs2=1 :gosub onay 'cs seçimi
 return

cs10:
rw=0 :di=0 :cs1=1 :cs2=0 :gosub onay 'cs seçimi
return
cs01:
rw=0 :di=0 :cs1=0 :cs2=1 :gosub onay 'cs seçimi
return
cs00:
rw=0 :di=0 :cs1=0 :cs2=1 :gosub onay 'cs seçimi
return
lcdac:
rw=0 :di=0 :lcd=disp_on :gosub onay ' lcd açma
return
lcdkapat:
rw=0 :di=0 :lcd=disp_off :gosub onay ' lcd kapatma
return

erkan614

bi raz önce senin kodu denedim isiste
"stack underflow (STKUNF set,zero returned)" die bi hata veriyor acaba nedendir?

senin programla oynarken hatayı buldum; fazladan return kullanmışsın

eee ekranda bişiler yazdırdıktan sonra yazdırdığın bilginin hep orda kalması için ne yapmak gerek?

bide ekrana bişiler yazdırdıktan sora silmek için ne yapmak lazım

senin programla oynamaya dewam ediyorum; sil altprogramında lcdkapa alt programını iptal edip programa ilk başlarken sil altprogramı çağırırsan daha güzel bi görünüm elde ediyorsun

solidus

Bu kodlarla isiste glcd üzerinde ilk çalışmada bişeyler gelip gidiyor. Daha sonra hiç bir hareket olmuyor. Nedendir..
Kimine göre kralım kimine göre yalanım… Herkes rahatına baksın, ben adamına göre adamım..

ibo1973

bu kodları isiste denemedim direk pice bağlı glcd de çalıştırıyorum ve yukarda yazdığım model lcd ile tamamen sorunsuz şekilde çalışıyor

ibo1973

Alıntı yapılan: "erkan614"bi raz önce senin kodu denedim isiste
"stack underflow (STKUNF set,zero returned)" die bi hata veriyor acaba nedendir?

senin programla oynarken hatayı buldum; fazladan return kullanmışsın

eee ekranda bişiler yazdırdıktan sonra yazdırdığın bilginin hep orda kalması için ne yapmak gerek?

bide ekrana bişiler yazdırdıktan sora silmek için ne yapmak lazım

senin programla oynamaya dewam ediyorum; sil altprogramında lcdkapa alt programını iptal edip programa ilk başlarken sil altprogramı çağırırsan daha güzel bi görünüm elde ediyorsun


sürekli kalması için aynı satıra başka bir şey yazdırmaman yeterli silmek içinde bu kodların içinde silme kısmıda var silmek istediğin yerde oraya yönlendir ekranı siler

erkan614

yukarda verdiğin linkdeki çocuk iyi anlatmış :)
bu gün karaköyde nekadar glcdtipi varsa baktım bendekinden başka 2 tane daha buldum
biri t6963 biri ks0108li
yalnız ikisininde adam gibi pdfsi yok nette
bide çalıştığını bildiğim bi glcdnin siparişini verdim o baya sağlam çalışıyor getirtebilirlerse çok rahat edicem