Skip to content

2 Bit Sayıcı

Bu örnekte kartın üzerindeki butona basılarak kırmızı ve yeşil LED'in binary'ye uygun bir şekilde yakılıp söndürülmesi sağlanır.

c
#include <msp430g2553.h>

#define LED1 BIT0
#define LED2 BIT6
#define BUTTON BIT3
// Anlaşılma kolaylığı açısından LED'ler ve buton tanımlandı.

unsigned char count = 0;

void configWDT(void) {
  WDTCTL = WDTPW | WDTHOLD; //Watchdog timer durduruldu
}

void configPins(void) {
  P1DIR |= 0x41; // LED1 ve LED2 çıkış olarak ayarlandı.
  P1REN |= 0x08; // Buton için pull-up rezistör aktifleştirildi.
  P1OUT |= 0x08; // P1.3 pininin hep 1 kalması sağlandı.
}

void updateLeds(void) {
  count++; // Sayı arttırıldı
  count = count % 4; // 3'ü geçmemesi için mod alındı.

  switch (count) {
  case 0:
    P1OUT &= ~(LED1 + LED2); // LED'ler söndürüldü.
    break;
  case 1:
    P1OUT |= LED2;  // LED2 yakıldı.
    P1OUT &= ~LED1; // LED1 söndürüldü.
    break;
  case 2:
    P1OUT |= LED1;  // LED1 yakıldı.
    P1OUT &= ~LED2; // LED2 söndürüldü.
    break;
  case 3:
    P1OUT |= LED1 + LED2; // LED'ler yakıldı.
    break;
  }
}

void main(void) {
  configWDT();
  configPins();
  // main fonksiyonunun basitleşmesi için konfigürasyonlar
  // fonksiyonlara bölündü
  while (1) {
    if ((P1IN & BUTTON) == 0) {
    // Butona basıldığında bu kısım çalışır
      __delay_cycles(5000);
      // Butona basıldığında temiz bir sonuç almak için gecikme yapıldı
      updateLeds();
      // LED'lerin güncellenmesi sağlanır
    }
  }
}