128×64 Grafik LCD Uygulaması
Merhaba arkadaşlar, bu yazımızda Trudyo Geliştirme Kartı ile 128×64 Grafik LCD Ekran çeşitlerinin kullanımından bahsedeceğiz.
Grafik LCD Ekranlar Hakkında Kısa Bir Bilgi
Bir kısaltma olan LCD, İngilizce’de Liquid Crystal Display yani Sıvı Kristal Ekran anlamına gelmektedir. LCD, elektrikle kutuplanan sıvının ışığı tek fazlı geçirmesi ve önüne eklenen bir kutuplanma filtresi ile gözle görülebilmesi ilkesine dayanan bir görüntü teknolojisidir. Bir LCD ekranın pinlerini ve bu pinlerin fonksiyonlarını aşağıdaki tablo üzerinden inceleyebilirsiniz.
Pin No | İsim | Açıklama |
1 | VDD | +5V Bağlantı Pini |
2 | VSS | GND Bağlantı Pini |
3 | V0 | Kontrast Ayarlama Pini |
4-11 | DB0-DB7 | Data Bitleri Bağlantı Pinleri |
12 | CS1 | Kolon 1 – 64 Seçim Pini |
13 | CS2 | Kolon 65 – 128 Seçim Pini |
14 | RST | Reset Pini |
15 | R/W | Okuma/Yazma Seçim Pini (0:Yazma 1:Okuma) |
16 | D/I | 1:Data 0:Komut |
17 | E | Enable Pini |
18 | Vee | Negatif Voltaj Çıkış Pini |
19 | A | LCD Arka Işık +5V Bağlantı Pini |
20 | K | LCD Arka Işık GND Bağlantı Pini |
LCD ve Trudyo Geliştirme Kartı Bağlantısı
Yukarıdaki görsellerde açıkladığı üzere, 128×64 Grafik LCD ekran Trudyo Geliştirme Kartı’nın B ve D Portlarına bağlanmıştır. Ayrıca haricen eklenen 10K Ohm değerinde bir Potansiyometre ile, Grafik LCD ekranın kontrast ayarı yapılabilmektedir.
Bu Uygulamada Kullanılan Malzemeler
Trudyo Geliştirme Kartı
Başlamadan Önce
Trudyo Konfigürasyon Ayarları
Trudyo Geliştirme Kartı ile programlama yapabilmek için kartınızın konfigürasyon ayarlarını yapmanız gerekmektedir. Gerekli konfigürasyon ayarlarını yapmak için “Trudyo Konfigürasyon Ayarları” yazımızı okuyabilirsiniz.
Grafik LCD Uygulama Kodları
// Glcd module connections
char GLCD_DataPort at PORTD;
sbit GLCD_CS1 at LATB0_bit;
sbit GLCD_CS2 at LATB1_bit;
sbit GLCD_RS at LATB2_bit;
sbit GLCD_RW at LATB3_bit;
sbit GLCD_EN at LATB4_bit;
sbit GLCD_RST at LATB5_bit;
sbit GLCD_CS1_Direction at TRISB0_bit;
sbit GLCD_CS2_Direction at TRISB1_bit;
sbit GLCD_RS_Direction at TRISB2_bit;
sbit GLCD_RW_Direction at TRISB3_bit;
sbit GLCD_EN_Direction at TRISB4_bit;
sbit GLCD_RST_Direction at TRISB5_bit;
// End Glcd module connections
// ------------------------------------------------------
// GLCD Picture name: truck.bmp
// GLCD Model: KS0108 128x64
// ------------------------------------------------------
const code char truck[1024] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 64, 64, 64, 64, 64, 64, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 160, 160, 160, 96, 224, 224, 96, 96, 96, 32, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 64, 64, 64, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 254, 0, 1, 1, 1, 1, 1, 253, 253, 253, 253, 1, 1, 1, 1, 1, 1, 253, 253, 253, 253, 1, 1, 1, 1, 253, 253, 253, 253, 249, 241, 225, 193, 129, 193, 225, 249, 253, 253, 253, 253, 253, 1, 1, 1, 1, 253, 253, 253, 253, 221, 221, 221, 29, 17, 1, 255, 1, 1, 1, 1, 0, 254, 1, 168, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 16, 224, 24, 36, 132, 0, 2, 130, 5, 81, 68, 112, 160, 192, 96, 96, 32, 0, 128, 128, 192, 192, 192, 64, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 63, 96, 96, 96, 224, 96, 96, 127, 127, 127, 127, 124, 124, 124, 124, 96, 96, 127, 127, 127, 127, 96, 96, 96, 96, 127, 127, 127, 127, 97, 103, 111, 127, 127, 111, 103, 99, 97, 127, 127, 127, 127, 96, 96, 96, 96, 127, 127, 127, 127, 125, 125, 125, 124, 116, 96, 127, 64, 64, 64, 160, 96, 252, 246, 1, 14, 6, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 66, 114, 60, 32, 16, 16, 0, 4, 2, 3, 2, 0, 0, 0, 4, 4, 4, 4, 20, 16, 16, 16, 16, 16, 9, 9, 41, 112, 32, 67, 5, 240, 126, 174, 128, 56, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 127, 127, 127, 127, 255, 255, 247, 251, 123, 191, 95, 93, 125, 189, 189, 63, 93, 89, 177, 115, 243, 229, 207, 27, 63, 119, 255, 207, 191, 255, 255, 255, 255, 255, 255, 255, 255, 127, 127, 127, 127, 127, 127, 127, 127, 255, 255, 255, 127, 127, 125, 120, 120, 120, 120, 120, 248, 120, 120, 120, 120, 120, 120, 248, 248, 224, 135, 0, 0, 0, 0, 0, 0, 0, 0, 128, 240, 248, 120, 188, 220, 92, 252, 28, 28, 60, 92, 92, 60, 120, 248, 248, 96, 192, 143, 168, 216, 136, 49, 68, 72, 2, 160, 96, 0, 0, 0, 0, 0, 0,
0, 0, 0, 128, 192, 248, 248, 248, 248, 252, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 255, 255, 255, 255, 255, 246, 239, 208, 246, 174, 173, 169, 128, 209, 208, 224, 247, 249, 255, 255, 252, 220, 240, 127, 255, 223, 255, 255, 255, 255, 255, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 255, 255, 255, 255, 255, 255, 254, 255, 190, 255, 255, 253, 240, 239, 221, 223, 254, 168, 136, 170, 196, 208, 228, 230, 248, 127, 126, 156, 216, 224, 240, 240, 242, 242, 240, 177, 32, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 1, 1, 1, 3, 3, 3, 7, 7, 7, 7, 7, 15, 15, 15, 7, 15, 15, 15, 7, 7, 15, 14, 15, 13, 15, 47, 43, 43, 43, 43, 43, 47, 111, 239, 255, 253, 253, 255, 254, 255, 255, 255, 255, 255, 191, 191, 239, 239, 239, 191, 255, 191, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 127, 127, 127, 255, 255, 191, 191, 191, 191, 255, 254, 255, 253, 255, 255, 255, 251, 255, 255, 255, 127, 125, 63, 31, 31, 31, 31, 31, 31, 63, 15, 15, 7, 7, 3, 3, 3, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 11, 11, 11, 11, 7, 3, 14, 6, 6, 6, 2, 18, 19, 19, 3, 23, 21, 21, 17, 1, 19, 19, 3, 6, 6, 14, 15, 15, 7, 15, 15, 15, 11, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
void main() {
unsigned short i;
char *text;
TRISA=0x00;// [][][][LED][][][][]
TRISB=0x00;// [][][GLCD_RST][GLCD_EN][GLCD_RW][GLCD_RS][GLCD_CS2][GLCD_CS1]
TRISC=0x00;// [][][][][][][][]
TRISD=0x00;// [GLCD_Data7][GLCD_Data6][GLCD_Data5][GLCD_Data4][GLCD_Data3][GLCD_Data2][GLCD_Data1][GLCD_Data0]
TRISE=0x00;// [][][][][][][][]
LATA=0x00;
LATB=0x00;
LATC=0x00;
LATD=0x00;
LATE=0x00;
// Tum cikislar dijital olarak ayarlaniyor
ADCON0=0x00;
ADCON1=0x00;
ADCON2=0x00;
ANSELA=0x00;
ANSELB=0x00;
ANSELC=0x00;
ANSELD=0x00;
ANSELE=0x00;
// Karsilastiricilar Kapatiliyor
C1ON_bit=0;
C2ON_bit=0;
Glcd_Init(); // GLCD'yi hazirla
Glcd_Fill(0x00); // GLCD'yi temizle
// Yazi yazdirma
Glcd_Set_Font(Font_Glcd_System5x7, 5, 7, 32); // Change font
text = "128x64 GLCD";
Glcd_Write_Text(text, 30, 2, 2); // Ekrana text yazdir
text = "Trudyo Maker Blog";
Glcd_Write_Text(text, 10, 5, 2); // Ekrana text yazdir
text = "www.trudyo.com";
Glcd_Write_Text(text, 20, 6, 2); // Ekrana text yazdir
delay_ms(2000);
// Resim yazdirma
Glcd_Fill(0x00); // GLCD'yi temizle
text = "1.Resim";
Glcd_Write_Text(text, 40, 4, 2); // Ekrana text yazdir
delay_ms(2000);
Glcd_Fill(0x00); // GLCD'yi temizle
Glcd_Image(truck); // Resmi yükle
delay_ms(2000);
// Kutu çizdirme
Glcd_Fill(0x00); // GLCD'yi temizle
text = "2.Kutu";
Glcd_Write_Text(text, 0, 0, 2); // Ekrana text yazdir
Glcd_Box(5,10,123,60,1); // Ekrana kutu çizdir
delay_ms(2000);
// Dikdörtgen çizdirme
Glcd_Fill(0x00); // GLCD'yi temizle
text = "3.Dikdortgen";
Glcd_Write_Text(text, 0, 0, 2); // Ekrana text yazdir
Glcd_Rectangle(5,10,123,60,1); // Ekrana diktörtgen çizdir
delay_ms(2000);
// Çizgi çizdirme
Glcd_Fill(0x00); // GLCD'yi temizle
text = "4.Duz Cizgi";
Glcd_Write_Text(text, 0, 0, 2); // Ekrana text yazdir
delay_ms(500);
Glcd_Line(5, 10, 123, 10, 1); // Ekrana çizgi çizdir
delay_ms(500);
Glcd_Line(123, 10, 123, 60, 1); // Ekrana çizgi çizdir
delay_ms(500);
Glcd_Line(123, 60, 5, 60, 1); // Ekrana çizgi çizdir
delay_ms(500);
Glcd_Line(5, 60, 5, 10, 1); // Ekrana çizgi çizdir
delay_ms(2000);
// Çizgi çizdirme
Glcd_Fill(0x00); // GLCD'yi temizle
text = "5.Daire";
Glcd_Write_Text(text, 0, 0, 2); // Ekrana text yazdir
for(i=0; i<8; i++){
Glcd_Circle(63,32, 3*i, 1); // Ekrana daire çizdir
delay_ms(100);
}
delay_ms(2000);
// Çizgi çizdirme
Glcd_Fill(0x00); // GLCD'yi temizle
text = "6.Fontlar";
Glcd_Write_Text(text, 0, 0, 2); // Ekrana text yazdir
Glcd_Set_Font(Font_Glcd_Character8x7, 8, 7, 32); // Font degistir
text="8x7 Font";
Glcd_Write_Text(text, 5, 2, 2); // Ekrana text yazdir
delay_ms(1000);
Glcd_Set_Font(Font_Glcd_System3x5, 3, 5, 32); // Font degistir
text = "3X5 CAPITALS ONLY";
Glcd_Write_Text(text, 5, 3, 2); // Ekrana text yazdir
delay_ms(1000);
Glcd_Set_Font(Font_Glcd_System5x7, 5, 7, 32); // Font degistir
text = "5x7 Font";
Glcd_Write_Text(text, 5, 4, 2); // Ekrana text yazdir
delay_ms(1000);
Glcd_Set_Font(Font_Glcd_5x7, 5, 7, 32); // Font degistir
text = "5x7 Font (v2)";
Glcd_Write_Text(text, 5, 5, 2); // Ekrana text yazdir
delay_ms(2000);
Glcd_Fill(0xff); // GLCD'yi temizle
Glcd_Set_Font(Font_Glcd_System5x7, 5, 7, 32); // Font degistir
text = "Trudyo";
Glcd_Write_Text(text, 45, 3, 2); // Ekrana text yazdir
text = "#gelistirmeyebasla";
Glcd_Write_Text(text, 10, 5, 2); // Ekrana text yazdir
delay_ms(1000);
Glcd_Fill(0x00); // GLCD'yi temizle
Glcd_Set_Font(Font_Glcd_System5x7, 5, 7, 32); // Font degistir
text = "Trudyo";
Glcd_Write_Text(text, 45, 3, 2); // Ekrana text yazdir
text = "#gelistirmeyebasla";
Glcd_Write_Text(text, 10, 5, 2); // Ekrana text yazdir
delay_ms(1000);
}
Grafik LCD Bağlantı Kodları
128×64 Grafik LCD’yi kullanabilmek için, program kodumuzun en başında aşağıdaki bağlantı tanımlamaları bulunmalıdır.
// Glcd module connections
char GLCD_DataPort at PORTD;
sbit GLCD_CS1 at LATB0_bit;
sbit GLCD_CS2 at LATB1_bit;
sbit GLCD_RS at LATB2_bit;
sbit GLCD_RW at LATB3_bit;
sbit GLCD_EN at LATB4_bit;
sbit GLCD_RST at LATB5_bit;
sbit GLCD_CS1_Direction at TRISB0_bit;
sbit GLCD_CS2_Direction at TRISB1_bit;
sbit GLCD_RS_Direction at TRISB2_bit;
sbit GLCD_RW_Direction at TRISB3_bit;
sbit GLCD_EN_Direction at TRISB4_bit;
sbit GLCD_RST_Direction at TRISB5_bit;
// End Glcd module connections
Grafik LCD Fonksiyonları
Glcd_Init Fonksiyonu
void Glcd_Init();
Grafik LCD modülü başlatır. Bu fonksiyonu, pin tanımlamalarını yaptıktan sonra ana fonksiyonda ekranı kullanmaya başlamadan önce kullanmalısınız. Kontrol hatlarının her biri (CS1, CS2, RS, RW, EN, RST) hem port hem de pin olarak yapılandırılabilmekte olup, veri hatları (DB0-DB7) tek bir port üzerinde olmalıdır.
Glcd_Fill Fonksiyonu
void Glcd_Fill(unsigned short pattern);
Glcd belleğini bayt değeri ile doldurur.
Parametreler: pattern:
Glcd belleğini doldurmak için bayt.
Glcd ekranını temizlemek için Glcd_Fill(0x00)
, ekranı tamamen doldurmak için Glcd_Fill(0xFF)
kullanılır.
Glcd_Dot Fonksiyonu
void Glcd_Dot(unsigned short x_pos, unsigned short y_pos, unsigned short color);
(x_pos, y_pos) koordinatlarında Glcd üzerine bir nokta çizer.
Parametreler: x_pos:
X pozisyonu (0-127 arası bir değer alabilir). y_pos:
Y pozisyonu (0-63 arası bir değer alabilir). color:
Renk parametresi (0-2 arası bir değer alabilir).
Renk parametresi nokta durumunu belirler: 0 noktayı siler, 1 nokta koyar ve 2 nokta durumunu ters çevirir.
Glcd_Line Fonksiyonu
void Glcd_Line(int x_start, int y_start, int x_end, int y_end, unsigned short color);
Glcd üzerinde bir çizgi çizmek için kullanılır.
Parametreler: x_start:
Çizgi başlangıcına ait x koordinatı. (0-127) y_start:
Çizgi başlangıcına ait y koordinatı. (0-63) x_end:
Çizgi bitişine ait x koordinatı. (0-127) y_end:
Çizgi bitişine ait y koordinatı. (0-63) color:
Renk parametresi (0-2 arası bir değer alabilir).
Renk parametresi çizgi rengini belirler: 0 beyaz, 1 siyah ve 2 ise her noktayı tersine çevirir.
Glcd_Rectangle Fonksiyonu
void Glcd_Rectangle(unsigned short x_upper_left, unsigned short y_upper_left, unsigned short x_bottom_right, unsigned short y_bottom_right, unsigned short color);
Glcd üzerinde bir dikdörtgen çizmek için kullanılır.
Parametreler: x_upper_left:
Sol üst dikdörtgen köşenin x koordinatı. (0-127) y_upper_left:
Sol üst dikdörtgen köşenin y koordinatı. (0-63) x_bottom_right:
Sağ alt dikdörtgen köşenin x koordinatı. (0-127) y_bottom_right:
Sağ alt dikdörtgen köşenin y koordinatı. (0-63) color:
Renk parametresi (0-2 arası bir değer alabilir).
Renk parametresi çizgi rengini belirler: 0 beyaz, 1 siyah ve 2 ise her noktayı tersine çevirir.
Glcd_Box Fonksiyonu
void Glcd_Box(unsigned short x_upper_left, unsigned short y_upper_left, unsigned short x_bottom_right, unsigned short y_bottom_right, unsigned short color);
Glcd üzerinde bir kutu çizmek için kullanılır.
Parametreler: x_upper_left:
Sol üst kutu köşesinin x koordinatı. (0-127) y_upper_left:
Sol üst kutu köşesinin y koordinatı. (0-63) x_bottom_right:
Sağ alt kutu köşesinin x koordinatı. (0-127) y_bottom_right:
Sağ alt kutu köşesinin y koordinatı. (0-63) color:
Renk parametresi (0-2 arası bir değer alabilir).
Renk parametresi çizgi rengini belirler: 0 beyaz, 1 siyah ve 2 ise her noktayı tersine çevirir.
Glcd_Circle Fonksiyonu
void Glcd_Circle(int x_center, int y_center, int radius, unsigned short color);
Glcd üzerinde bir daire çizmek için kullanılır.
Parametreler: x_center:
Daire merkezinin x koordinatı. (0-127) y_center:
Daire merkezinin y koordinatı. (0-63) radius:
Yarıçap değeri color:
Renk parametresi (0-2 arası bir değer alabilir).
Renk parametresi çizgi rengini belirler: 0 beyaz, 1 siyah ve 2 ise her noktayı tersine çevirir.
Glcd_Set_Font Fonksiyonu
void Glcd_Set_Font(const char *activeFont, unsigned short aFontWidth, unsigned short aFontHeight, unsigned int aFontOffs);
Glcd_Write_Char
ve Glcd_Write_Text
fonksiyonları ile kullanılacak yazı tipini ayarlar.
Parametreler: activeFont:
Kullanılacak yazı tipi. aFontWidth:
Nokta cinsinden yazı tipi karakterlerinin genişliği. aFontHeight:
Nokta cinsinden yazı tipi karakterlerinin yüksekliği. aFontOffs:
PIC karakter seti için mikroC PRO ile normal ASCII seti arasındaki farkı temsil eden sayı (örn. ASCII karakterde ‘A’ 65, PIC karakter seti için mikroC PRO’da ‘A’ 45 ise, aFontOffs 20’dir). Kitaplıkla birlikte verilen demo yazı tiplerinin ofseti 32’dir. Bu, boşlukla başladıkları anlamına gelmektedir.
Uses klasöründe bulunan “__Lib_GLCDFonts” dosyasında verilen fontları kullanabilir veya kendi fontlarınızı oluşturabilirsiniz.
Desteklenen yazı tiplerinin listesi:
Font_Glcd_System3x5
Font_Glcd_System5x7
Font_Glcd_5x7
Font_Glcd_Character8x7
Glcd_Write_Char Fonksiyonu
void Glcd_Write_Char(unsigned short chr, unsigned short x_pos, unsigned short page_num, unsigned short color);
Glcd üzerinde bir karakter yazmak için kullanılır.
Parametreler: chr:
Yazılacak karakter. x_pos:
Karakterin yazılacağı x koordinatı (0-127). page_num:
Karakterin yazılacağı sayfanın numarası (0-7). color:
Renk parametresi (0-2 arası bir değer alabilir).
Renk parametresi çizgi rengini belirler: 0 beyaz, 1 siyah ve 2 ise her noktayı tersine çevirir.
Glcd_Write_Text Fonksiyonu
void Glcd_Write_Text(char *text, unsigned short x_pos, unsigned short page_num, unsigned short color);
Glcd üzerinde bir metin yazmak için kullanılır.
Parametreler: text:
Yazılacak metin. x_pos:
Karakterin yazılacağı x koordinatı (0-127). page_num:
Karakterin yazılacağı sayfanın numarası (0-7). color:
Renk parametresi (0-2 arası bir değer alabilir).
Renk parametresi çizgi rengini belirler: 0 beyaz, 1 siyah ve 2 ise her noktayı tersine çevirir.
Glcd_Image Fonksiyonu
void Glcd_Image(code const unsigned short *image);
Glcd üzerinde bir bitmap resim göstermek için.
Parametreler: image:
Gösterilecek resim. Bitmap dizisi kod belleğinde bulunmalıdır.
Uygulamaya ait dosyaları buraya tıklayarak indirebilirsiniz. Merak ettiğiniz ve aklınıza takılan soruları aşağıda 👇 yorum olarak bize iletebilirsiniz. İyi çalışmalar. 🙂 #geliştirmeyebaşla
Yorum yapmak için giriş yapmalısınız.