Cumartesi, Ağustos 31, 2013

Msp430 dijital saat kodu

Arkadaşlar bu kod katot displayler için geçerlidir. Anot display için komutları değiştirmeniz gerekmektedir.Aynı zamanda programda 2 tane button bulunmaktadır. Bunlar saati ayarlamak için konulmuşlardır. Kırmızı yazılmış "for" komutları butonun  hızını yavaşlatmak için kullanılmıştır. Pratikte size hala hızlı geliyorsa altına aynı komutu kopyalayın çünkü sayım işlemi "30000" fazla geçmemektedir, daha yüksek bir rakam yazarsanız hata alırsınız.


#include "io430.h"
#include <intrinsics.h>

#define B     P2IN_bit.P4
#define B1    P2IN_bit.P5

int katot[10]={0x3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X67};
int saat=0,dakika=0;
void bas(int saat,int dakika);
int i=0,d[],s=0;
int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD; 
  int a;
  P1DIR=0X7F;
  P2DIR=0x0F;
  TACCR0 = 32000; // Upper limit of count for TAR
TACCTL0 = CCIE; // Enable interrupts on Compare 0
TACTL = MC_1|ID_0|TASSEL_1|TACLR;
__enable_interrupt();
for(;;)
{
  if(B==1)
  {
    saat=saat+1;
    for(a=0;a<30000;a++){}
  }
 
  if(B1==1)
  {
    dakika=dakika+1;
    for(a=0;a<30000;a++){}
  }
   
  if(s>59){
    s=0;
    dakika++;
  }
  if(dakika>59){
    dakika=0;
    saat++;
  }
 
  if(saat>23)
    saat=0;
 
  bas(saat,dakika);
 
}
}
#pragma vector = TIMER0_A0_VECTOR
__interrupt void TA0_ISR (void)
{
  s++;
}

void bas(int saat, int dakika){
  int a,saat1,saat2,dakika1,dakika2;
 
  dakika1=dakika%10;
  dakika2=dakika/10;
 
  saat1=saat%10;
  saat2=saat/10;
 
 
  P2OUT=0x07;
  P1OUT=katot[dakika1];
    for(a=0;a<100;a++){}

  P2OUT=0x0B;
  P1OUT=katot[dakika2];
  for(a=0;a<100;a++){}
 
  P2OUT=0x0D;
  P1OUT=katot[saat1];
  for(a=0;a<100;a++){}
 
  P2OUT=0x0E;
  P1OUT=katot[saat2];
  for(a=0;a<100;a++){}


}