Çalışmalarım - Yazılarım - Tecrubelerim

PIC18 ile GLCD Ekranında Simge Basma – SAP1024B/T6963C -MikroC

This post is also available in: English (İngilizce)


Önemli Notlar

Video Anlatım

Gerekli Dosyalar

  1. GLCD Simge Basma Nedir?

Önemli Notlar:

  • Burada yapılan işlemler için daha önce yazmış olduğum “GLCD EKRAN KÜTÜPHANESİ – (SAP1024B – T6963C)” kullanılmaktadır. Öncelikle bu kütüphaneyi indirip MikroC ye yüklemeniz gerekir
  • Bu kütüphanede bulunan “SAP1024_LCD_SIMGE_BAS Fonksiyonu” kullanılarak aşağıdaki işlemler yapılır. Fonksiyon detaylarına verilen bağlantıdan da bakabilirsiniz
  • Kütüphane SAP1024B ve T6963C entegresi kullanan GLCD ler için yazıldığından diğer sürücü entegresi bulunan GLCD lerde çalışmayacaktır.
  • Kullanılacak resimler mutlaka 1bit e çevirilmelidir.Çünkü kullandığımız GLCD ler 1 bitliktir yani siyah ya da beyaz renk alabilirler.
  • Çevrim işlemi PhotoShop gibi programlarda sadece ayarlardan 1bite cevir denerek yapılabilir. Ancak tabi ki görüntü kalite kaybı olacaktır
  • LCD Assistant programında mutlaka “horizontal” seçilmelidir. Çünkü yukarıda adı gecen sürücü entegreleri yatay tarama yapar.
  • LCD Assistant bulunan resimleri kod haline çevirmek için kullanılır. Bu sebeple uygun boyutta istenilen resim simge olarak kullanılabilir
  • Oluşturulan dizi adı ile  “SAP1024_LCD_SIMGE_BAS” fonksiyonundaki dizi adı mutlaka aynı olmalıdır.
  • Resimlerin boyutları önceden düzenlenmelidir. Eğer MikroC içinden düzeltme yaparsanız görüntü hatalı çıkacaktır.

GLCD SİMGE BASMA NEDİR?

  • Grafik LCD ekranlar diğer karakter ekranlardan farklı olarak pixel pixel kontrol edilir ve bir çok grafik , şekil, resim hatta animasyon bile yapılabilir.
  • Bu ekranlar genel olarak uygun boyutlarda dokunmatik paneller takılarak kullanılır. Bu şart olmamak ile beraber basit bir panel ile buton gibi ek araçlara ihtiyaç kalmaz.
  • Bu anlatımda ister dokunmatik panel isterse buton kullanın bir şey fark etmez. Burada anlatılan internetten yada kendi hazırladığımız simgelerin öncelikle 1 bite çevirip sonrasında kod haline dönüştürüp “SAP1024_LCD_SIMGE_BAS Fonksiyonu” içerisinde nasıl kullanılacağını göreceğiz.

 

ÇALIŞMADA KULLANILACAK ÖRNEK SİMGE

  • Aşağıda 85×85 pixel bmp türünde 1 bitlik bir örnek simge bulunmaktadır. Bunu ben internetten bularak  çevirdim ve kullandım .
  • Çalışmalarda bu simge kullanılacak. Bunu “Gerekli Dosyalar” kısmından yada farklı kaydet diyerek alıp kullanabilirsiniz.
mikroc_sap1024_simge_ornek
Örnek Simge

 

1 BİT SİMGENİN KOD HALİNE GETİRİLMESİ

  • İlk olarak simgemizi kullancağımız boyuta getirmemiz gerekmektedir. Ardından 1 bite çevireceğimizi söylemiştik.
  • Ben 85×85 px boyutuna getirdim. Bu boyut ekranın boyutuna göre ve sizin isteğinize göre değişir.
  • Şu halde resim hazır olduğuna göre LCD Assistant ile resimi kod haline cevirebiliriz
    1. Öncelikle “Horizontal” seçilir. Çünkü SAP1024B entegreli GLCD ler horizontal tarama yapar
    2. Little Endian seçilir. Çünkü PIC MCU lar little endian sistemi kullanır.(ÖR: Intel işlemciler ise tam tersine big endian kullanır)
    3. 8 byte seçilir. Pixeller 8 byte gruplar halinde dönüştürür.
    4. Sonra olarak “File” dan  “Save Output” yapılarak resimin dizi halinde kodlarını alabiliriz.
Resim-Kod-Cevirme
LCD Assistant ile 1-bit resmin koda dönüştürülmesi

 

  • Cevirilen resmin kod hali aşağıda görülmektedir.
Resim Kodları
const unsigned char dizi [] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xC0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00,
0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00,
0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00,
0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00,
0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x3F, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0x80, 0x00,
0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xC0, 0x00,
0x00, 0x00, 0x7F, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xE0, 0x00,
0x00, 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xF0, 0x00,
0x00, 0x01, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xF0, 0x00,
0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xF8, 0x00,
0x00, 0x03, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFC, 0x00,
0x00, 0x07, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFC, 0x00,
0x00, 0x07, 0xFF, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xFE, 0x00,
0x00, 0x07, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFE, 0x00,
0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0x00,
0x00, 0x0F, 0xFF, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xFF, 0x00,
0x00, 0x1F, 0xFF, 0xFF, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0x00,
0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0x80,
0x00, 0x3F, 0xFF, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xFF, 0x80,
0x00, 0x3F, 0xFF, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xFF, 0x80,
0x00, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xC0,
0x00, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xC0,
0x00, 0x3F, 0xFF, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0xC0,
0x00, 0x3F, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0xC0,
0x00, 0x3F, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0xC0,
0x00, 0x3F, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0xC0,
0x00, 0x3F, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0xC0,
0x00, 0x3F, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0xC0,
0x00, 0x3F, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0x80,
0x00, 0x3F, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0x80,
0x00, 0x1F, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0x80,
0x00, 0x1F, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0x80,
0x00, 0x1F, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0x80,
0x00, 0x1F, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0x00,
0x00, 0x0F, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0x00,
0x00, 0x0F, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0x00,
0x00, 0x07, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xDF, 0xFE, 0x00,
0x00, 0x07, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0x3F, 0xFE, 0x00,
0x00, 0x03, 0xFF, 0xFF, 0xE0, 0x00, 0x3E, 0x3F, 0xFC, 0x00,
0x00, 0x03, 0xFF, 0xFF, 0xE0, 0x00, 0x3C, 0x7F, 0xFC, 0x00,
0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0xFF, 0xF8, 0x00,
0x00, 0x01, 0xFF, 0xFF, 0xF0, 0x00, 0x01, 0xFF, 0xF0, 0x00,
0x00, 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xF0, 0x00,
0x00, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xE0, 0x00,
0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xC0, 0x00,
0x00, 0x00, 0x1F, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0x80, 0x00,
0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00,
0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00,
0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0x00, 0x03, 0x00, 0x01, 0x00, 0x11, 0x00, 0x00, 0x00,
0x18, 0x00, 0x01, 0x00, 0x1A, 0x00, 0x04, 0x00, 0x28, 0x00,
0x02, 0x00, 0x38, 0x00, 0x00, 0x00, 0x4A, 0x02, 0x00, 0x00,
0x5F, 0x02, 0x00, 0x00, 0x7B, 0x03, 0x03, 0x00, 0x97, 0x05,
0x09, 0x00, 0xAF, 0x0E, 0x0F, 0x00, 0xC1, 0x17, 0x16, 0x00,
0xD5, 0x25, 0x29,
};
mikroc_sap1024_simge_bas-resim veriye cevrildi
Resmin veriye çevrilmiş hali

 

FONKSİYONUN UYGULANMASI

  • SAP1024_LCD_SIMGE_BAS(pozisyon_x,pozisyon_y,veri,genislik_pixel,yukseklik_pixel,invert)  – Fonksiyon parametreleri görüldüğü gibidir.
  • Parametreleri kısaca anlamak açısından ne işe yaradıklarına bakalım
    1. -pozisyon_x: simgenin görüntülenmeye başlayacağı x pozisyonu
    2. -pozisyon_y: simgenin görüntülenmeye başlayacağı y pozisyonu
    3. -veri : simge verisini  taşıyan dizi adı buraya yazılır
    4. -genislik_pixel : simgenin piksel olarak genisliği yazılır
    5. -yukseklik_pixel : simgenin piksek olarak yüksekliği yazılır
    6. -invert: simgeyi terse cevirir. Bu özellik butonlarda basıldığını belirtmek üzere üzerine gelindiğinde kullanılmak için idealdir.
  • SAP1024_LCD_SIMGE_BAS(100,0,dizi,85,85,1)  ve şeklinde kullanıyorum. Çünkü ;
    • (100,0) konumunda oluşması için x=100 ve y=0  olarak verdim
    • veri parametresine dizi adını yazdım yukarıda resimin kod karşılığında göreceğiniz gibi dizi adı yine dizi olarak verildi . Yani resimin kod karşılığındaki dizi adı ne ise burayada o yazılmalıdır.
    • Hatırlatma
      Resim Kodları
      const unsigned char dizi [] = {//dizi adıda dizi olduguna dikkat edilmelidir. Buraya yazılan isim ne ise fonksiyonda veri yerine o isim yazılmalıdır
    • Resimi daha önceden 85×85 pixel yaptığımdan genişlik ve yükseklik parametrelerini 85 olarak girdim.
    • İnvert parametresini 1 yaptım çünkü renklerin terse cevirilmesini istedim.
  • SAP1024_LCD_SIMGE_BAS(0,0,dizi,85,85,0) – bu fonksiyonda tek fark invert sıfırdır. Yani renkler terse çevirilmemiştir.
  • Tam Program Kodları
    Program Kodları
    #include "dizi.c"//kod dizisi burada include edilirerek ana yazılıma dahil edilir.
    char SAPTRIS at trisd;//data portları
    char SAPDATA_giris at portd;
    char SAPDATA_cikis at latd;
    sbit SAP1024_RD at RC1_bit ; //GLCD RD UCU BAĞLANTI PİNİ
    sbit SAP1024_CE at rc2_bit ; //GLCD CE UCU BAĞLANTI PİNİ
    sbit SAP1024_CD at Rc3_bit ; //GLCD C/D UCU BAĞLANTI PİNİ
    sbit SAP1024_RST at Rc4_bit ; //GLCD RST UCU BAĞLANTI PİNİ
    sbit SAP1024_FS at Rc5_bit ; //GLCD FS UCU BAĞLANTI PİNİ
    sbit SAP1024_WR at RC0_bit ; //GLCD wr UCU BAĞLANTI PİNİ
    
    sbit SAP1024_RD_Direction at TRISC1_bit; //GLCD RD UCU BAĞLANTI PİNİ
    sbit SAP1024_CE_Direction at TRISC2_bit; //GLCD CE UCU BAĞLANTI PİNİ
    sbit SAP1024_CD_Direction at TRISC3_bit; //GLCD C/D UCU BAĞLANTI PİNİ
    sbit SAP1024_RST_Direction at TRISC4_bit; //GLCD RST UCU BAĞLANTI PİNİ
    sbit SAP1024_FS_Direction at TRISC5_bit; //GLCD FS UCU BAĞLANTI PİNİ
    sbit SAP1024_WR_Direction at TRISC0_bit; //GLCD FS UCU BAĞLANTI PİNİ
    
    void main
    {
    cmcon|=7;
    SAP1024_INIT(240,128,8);
    SAP1024_LCD_SIMGE_BAS(100,0,dizi,85,85,0);
    SAP1024_LCD_SIMGE_BAS(0,0,dizi,85,85,0);
    delay_ms(1000);//1 saniye bekledikten sonra simge renkleri terse çevirilir
    SAP1024_LCD_SIMGE_BAS(0,0,dizi,85,85,1);
    }
  • Sonuç aşağıda görülebilir. Daha iyi anlaşılması için video dersi izleyiniz
mikroc_sap1024_simge
Simge Basma Test Edilir
  • NOT: İnvertin kullanım amacı aslında tam anlamı ile buton yapmaktır. Yani ilk olarak invert değeri sıfır girilerek simge ekranda gösterilir. Eğer kullanıcı buna dokunursa invert değeri 1 yapılır. Böylece oluşan renk değişiminden kullanıcı o butona dokunulduğunu anlar. En basit olarak bu amaç ile kullanılabilir

“GLCD SİMGE BASMA”  VİDEO DERS


Gerekli Dosyalar


 

This post is also available in: English (İngilizce)

About ERCAN KOÇLAR

Çalışmalarım çocukken başladı kolonyalı kağıtları yakmak, ilaçları birbirine katmak gibi değişik deneylerim vardı. Kimya kitabında elektroliz ile suyun hidrojen ve oksijene ayrıldığı ve hidrojenin yandığını yazıyordu, o zamanlarda aklım almıyordu sudan nasıl yanan....Devamını okumak için tıklayınız ;)