Arduino Uno'ya Doğrudan Takılan HX1230 LCD Ekran Kullanımı

👤 Yazar: ozcan 📅 Tarih: 12.07.2026 07:48 👁️ Görüntüleme: 54

Arduino Uno ile HX1230 LCD Ekran Kullanımı (D0'dan Başlayan Sıralama)

Bu rehberde, kablo karmaşasını tamamen ortadan kaldıran en kompakt yerleşimi yapıyoruz! HX1230 Grafik LCD modülünün pin sırasını tamamen ters çevirerek Arduino Uno'nun D0 (RX) pininden başlayıp D7 pinine kadar uzanan alt dijital bloğuna doğrudan oturtuyoruz. Sıfır kablo ile çalışan bu harika projeyi doğrudan kopyalayıp deneyebilirsiniz.

1. D0'dan Başlayan "Ters Simetri" Pin Bağlantı Şeması

Ekran modülünü, 8. pini (RST) Arduino'nun D0 (RX) yuvasına denk gelecek şekilde sırasıyla yerleştiriyoruz. Fiziksel ve yazılımsal haritamız şu şekildedir:

HX1230 Ekran Pini Arduino Uno Dijital Pini Kod İçerisindeki Görevi / Yönetimi
8. RST (RESET) D0 (RX) Reset Sıfırlama Pini
7. CE (CS) D1 (TX) Chip Enable / Chip Select (Çip Seçimi)
6. NC D2 Boş Pin (Bağlantısız bırakılır, kodda pasiftir).
5. DIN D3 SPI Veri Girişi (Data In)
4. CLK D4 SPI Saat Sinyali (Clock)
3. VCC D5 Ekran Güç Beslemesi (Pin D5 HIGH yapılarak ekran çalıştırılır).
2. BL (Backlight) D6 Arka ışık kontrolü (Koddan HIGH yapılarak yakılır).
1. GND D7 Ekranın toprak hattı (Yazılımsal olarak LOW yapılarak toprak hattı oluşturulur).

arduino hx1230 montaj resmi

Çok Kritik Altın Kural: Ekranın kontrol bacakları D0 ve D1 pinlerine bağlı olduğu için, kodu Arduino'ya yüklerken ekranı mutlaka yerinden sökün. Yükleme tamamlandıktan sonra USB kablosunu çıkarıp ekranı takın ve Arduino'yu yeniden başlatın. Aksi takdirde bilgisayarın yükleme sinyalleri ekranı kilitler ve çizim gelmez.


2. Arduino Kod Blokları

D0'dan başlayan tamamen ters yüz edilmiş yeni pin yapısına göre güncellenmiş, kütüphanesiz hafif kod bloğu:

// HX1230 Ekran Pin Tanımlamaları 
int pin_RESET = 0;  // 8. Pin: Sıfırlama Pini
int pin_CE    = 1;  // 7. Pin: Çip Seçimi
int pin_NC    = 2;  // 6. Pin: Boş Pin (Kullanılmıyor)
int pin_DIN   = 3;  // 5. Pin: Veri Girişi
int pin_CLK   = 4;  // 4. Pin: Saat Sinyali
int pin_VCC   = 5;  // 3. Pin: Ekran Güç Beslemesi
int pin_BL    = 6;  // 2. Pin: Arka Işık Kontrolü
int pin_GND   = 7;  // 1. Pin: Sanal Toprak Hattı

void hx1230_komutYaz(uint8_t komut) {
  digitalWrite(pin_CE, LOW);
  delayMicroseconds(1);
  
  // 9-bit SPI: D/C bit = 0 (Komut)
  digitalWrite(pin_CLK, LOW);
  digitalWrite(pin_DIN, LOW); 
  delayMicroseconds(2);
  digitalWrite(pin_CLK, HIGH); 
  delayMicroseconds(2);
  
  // 8-bit komut verisi
  for (int i = 7; i >= 0; i--) {
    digitalWrite(pin_CLK, LOW);
    digitalWrite(pin_DIN, (komut >> i) & 0x01);
    delayMicroseconds(2);
    digitalWrite(pin_CLK, HIGH);
    delayMicroseconds(2);
  }
  
  delayMicroseconds(1);
  digitalWrite(pin_CE, HIGH);
  delayMicroseconds(2);
}

void hx1230_veriYaz(uint8_t veri) {
  digitalWrite(pin_CE, LOW);
  delayMicroseconds(1);
  
  // 9-bit SPI: D/C bit = 1 (Veri)
  digitalWrite(pin_CLK, LOW);
  digitalWrite(pin_DIN, HIGH); 
  delayMicroseconds(2);
  digitalWrite(pin_CLK, HIGH); 
  delayMicroseconds(2);
  
  // 8-bit grafik verisi
  for (int i = 7; i >= 0; i--) {
    digitalWrite(pin_CLK, LOW);
    digitalWrite(pin_DIN, (veri >> i) & 0x01);
    delayMicroseconds(2);
    digitalWrite(pin_CLK, HIGH);
    delayMicroseconds(2);
  }
  
  delayMicroseconds(1);
  digitalWrite(pin_CE, HIGH);
  delayMicroseconds(2);
}

void hx1230_init() {
  digitalWrite(pin_RESET, LOW);
  delay(100);
  digitalWrite(pin_RESET, HIGH);
  delay(100);
  
  hx1230_komutYaz(0xE2); // Software Reset
  delay(20);
  
  hx1230_komutYaz(0x2F); // Power Control ON
  hx1230_komutYaz(0xA4); // Normal RAM Modu
  hx1230_komutYaz(0xA6); // Normal Renk Modu
  
  hx1230_komutYaz(0xA0); // Çalışan kararlı sütun yönü
  hx1230_komutYaz(0xC0); // Çalışan kararlı satır yönü
  
  // En stabil test sonucunu verdiğin doğal sıfır noktası
  hx1230_komutYaz(0x40); 
  
  hx1230_komutYaz(0x8B); // Kontrast Ayarı
  
  hx1230_komutYaz(0xAF); // Display ON
  delay(50);
}

void hx1230_ekranTemizle() {
  // RAM taşmalarını önlemek için tüm olası sayfaları (0'dan 9'a kadar) tarıyoruz
  for (int sayfa = 0; sayfa < 10; sayfa++) {
    hx1230_komutYaz(0xB0 + sayfa); 
    hx1230_komutYaz(0x00);         
    hx1230_komutYaz(0x10);         
    for (int sutun = 0; sutun < 132; sutun++) {
      hx1230_veriYaz(0x00);        
    }
  }
}

void setup() {
  pinMode(pin_RESET, OUTPUT);
  pinMode(pin_CE, OUTPUT);
  pinMode(pin_NC, OUTPUT);
  pinMode(pin_DIN, OUTPUT);
  pinMode(pin_CLK, OUTPUT);
  pinMode(pin_VCC, OUTPUT);
  pinMode(pin_BL, OUTPUT);
  pinMode(pin_GND, OUTPUT);

  digitalWrite(pin_GND, LOW);   
  digitalWrite(pin_VCC, HIGH);  
  digitalWrite(pin_BL, HIGH);   
  digitalWrite(pin_NC, LOW);    
  delay(300); 
  
  hx1230_init();         
  hx1230_ekranTemizle(); 
}

void loop() {
  // --- ANIMASYON 1: YÜKLENİYOR (LOADING) BAR ANIMASYONU ---
  // Ekranın tam ortasında soldan sağa dolan kalın bir çizgi
  hx1230_ekranTemizle();
  for (int sutun = 0; sutun < 96; sutun++) {
    hx1230_komutYaz(0xB4); // 4. Sayfa (Ekranın dikey ortası)
    hx1230_komutYaz(sutun & 0x0F);        // Sütun alt adresi
    hx1230_komutYaz(0x10 | (sutun >> 4));  // Sütun üst adresi
    
    hx1230_veriYaz(0xFF); // 8 piksel yüksekliğinde tam dolu blok basar
    delay(15); // Yüklenme hızı
  }
  delay(500); // Bar dolunca yarım saniye bekle

  // --- ANIMASYON 2: PERDE EFEKTİ (EKRANI YUKARIDAN AŞAĞIYA DOLDURMA) ---
  hx1230_ekranTemizle();
  for (int sayfa = 0; sayfa < 9; sayfa++) {
    hx1230_komutYaz(0xB0 + sayfa); 
    hx1230_komutYaz(0x00); 
    hx1230_komutYaz(0x10); 
    
    for (int sutun = 0; sutun < 96; sutun++) {
      hx1230_veriYaz(0xFF); // Her sayfayı tamamen siyaha boyar
    }
    delay(80); // Perde inme hızı
  }
  delay(500);

  // --- ANIMASYON 3: SİNÜS DALGASI (DALGALANMA EFEKTİ) ---
  for (int kare = 0; kare < 80; kare++) { // 80 kare boyunca aksın
    
    // Her sayfayı tek tek işliyoruz
    for (int sayfa = 0; sayfa < 9; sayfa++) {
      hx1230_komutYaz(0xB0 + sayfa);
      hx1230_komutYaz(0x00);
      hx1230_komutYaz(0x10);
      for (int sutun = 0; sutun < 96; sutun++) {
        int dalgaY = 32 + (int)(20.0 * sin((sutun * 0.15) - (kare * 0.3)));
        int sayfaBaslangicPikseli = sayfa * 8;
        int sayfaBitisPikseli = sayfaBaslangicPikseli + 7;
        uint8_t veriByte = 0x00;
        for (int k = -1; k <= 1; k++) {
          int pikselPos = dalgaY + k;
          if (pikselPos >= sayfaBaslangicPikseli && pikselPos <= sayfaBitisPikseli) {
            int bitIndex = pikselPos - sayfaBaslangicPikseli;
            veriByte |= (1 << bitIndex); 
          }
        }
        hx1230_veriYaz(veriByte);
      }
    }
    delay(10); // Dalganın akış hızı (FPS)
  }
  
  // --- ANIMASYON 4: ELEKTRONİK PARAZİT / KARINCALANMA (MATRIX EFEKTİ) ---
  // Eski televizyonlardaki karıncalanma efektini yapar
  for (int i = 0; i < 30; i++) { // 30 kez rastgele ekran bas
    for (int sayfa = 0; sayfa < 9; sayfa++) {
      hx1230_komutYaz(0xB0 + sayfa);
      hx1230_komutYaz(0x00);
      hx1230_komutYaz(0x10);
      
      for (int sutun = 0; sutun < 96; sutun++) {
        // Arduino'nun dahili rastgele sayı üreticisini kullanarak
        // pikselleri tamamen rastgele (0-255 arası) yakıp söndürür
        hx1230_veriYaz(random(0, 256)); 
      }
    }
    delay(10);
    
  }
}

💬 Yorumlar

Henüz yorum yapılmamış. İlk yorumu siz yapın!

Bir Yorum Bırakın

Güvenlik Kontrolü:

Yenidir.com
↑ Sayfa Başı
📞 İletişim ✉ E-Posta Gönder 🟥 YouTube
© 2026 Yenidir.com
Yenidir CMS V0.1