블로그 이미지
fiadot_old

칼퇴근을 위한 게임 서버 개발 방법론에 대한 심도있는 고찰 및 성찰을 위한 블로그!

Rss feed Tistory
Hardware 2007. 1. 27. 05:40

첫번째 AVR Atmega162 프로젝트~~ 뚜둥~

[결과]
mms://wm-002.cafe24.com/lovydayz/heart0005.mp4


[소스]


#include <mega162.h>
#include <delay.h>                          



#define NORMAL_DELAY 100   // delay per each led
#define MODE_DELAY   200   // mode change

#define LED_MAX      18    // total LED count


void InitLED();    
void SetLED(int nPos, int nStatus);
void SetAllLED(int nStatus);    // 전체 LED                   

void RightShiftLED(int nAcc, int bInc);   // 가속도, 누적
void LeftShiftLED(int nAcc, int nInc);             

void SplashLED(int nDelay, int nRepeat); // 번쩍 번쩍
       
void UpToDownLED(int nAcc);
void DownToUpLED(int nAcc);   

void StarSplashLED(int nAcc, int nRepeat);


int n;
int nDelay; // for calcuration accelation

void main()
{
DDRA = 0xff;
PORTA = 0x00;

DDRB = 0xff;
PORTB = 0x00;

DDRC = 0xff;
PORTC = 0x00;
 

while(1)
{               
// pattern 1
     nDelay = 150;
     RightShiftLED(-3,0);

     nDelay = 200;
     RightShiftLED(0,1);      
    
     nDelay = 150;
     LeftShiftLED(-3,0);
 
     nDelay = 200;
     LeftShiftLED(0,1); 
    
    
// pattern 2           
     SplashLED(500, 3);
    
// pattern 3
   
     nDelay = 100;
     UpToDownLED(100);          

     nDelay = 100;          
     DownToUpLED(100); 
                    
// pattern 4
     nDelay = 300;
     StarSplashLED(0,5);
}
}                

     

void InitLED()
{      
  PORTA = 0x00;
  PORTB = 0x00;
PORTC = 0x00;
       
  SetAllLED(0);  // 이거 없으니까 버그 생긴다-_-
  n = 0;        
}


void SetLED(int nPos, int nStatus)

  switch ( nPos )
  {
case 0: PORTA.0 = nStatus; break;
case 1: PORTA.1 = nStatus; break;
case 2: PORTA.2 = nStatus; break;
case 3: PORTA.3 = nStatus; break;
case 4: PORTA.4 = nStatus; break;
case 5: PORTA.5 = nStatus; break;
case 6: PORTA.6 = nStatus; break;
case 7: PORTC.0 = nStatus; break;
case 8: PORTC.1 = nStatus; break;
case 9: PORTC.2 = nStatus; break;
case 10: PORTC.3 = nStatus; break;
case 11: PORTC.4 = nStatus; break;
case 12: PORTC.5 = nStatus; break;
case 13: PORTC.6 = nStatus; break;
case 14: PORTC.7 = nStatus; break;
case 15: PORTB.0 = nStatus; break;
case 16: PORTB.1 = nStatus; break;
case 17: PORTB.2 = nStatus; break;  
  default: break;  
  }
 
}
 
void  SetAllLED(int nStatus)

  int nLedCnt;
  for(nLedCnt=0;nLedCnt<LED_MAX;nLedCnt++)
  { 
     SetLED(nLedCnt, nStatus);
  }                                       
}  

// whole LED on or off ..  
void SplashLED(int nDelay, int nRepeat)
{
  int bStatus = 1;
  int j=0;

  InitLED();
                    
  for(j=0;j<nRepeat*2;j++)
  { 
     SetAllLED(bStatus);
     bStatus = bStatus == 0 ? 1 : 0;
     delay_ms(nDelay); 
  }
}

     
void RightShiftLED(int nAcc, int bInc)

  InitLED();
 
  for(n=0;n<18;n++)
  {   
     if ( 0 == bInc )
        SetLED(n-1, 0);
       
     SetLED(n, 1); 
        
     if ( 0 < nDelay+nAcc && 5000 >= nDelay+nAcc )
        nDelay += nAcc;
     delay_ms(nDelay);                        
  }
 
//   delay_ms(MODE_DELAY);
}
 
void LeftShiftLED(int nAcc, int bInc)
{             
  InitLED();  
 
  for(n=17;n>=0;n--)
  { 
     if ( 0 == bInc )
        SetLED(n+1, 0);
       
     SetLED(n, 1);
     if ( 0 < nDelay+nAcc && 5000 >= nDelay+nAcc )
        nDelay += nAcc;   
     delay_ms(nDelay);        
  }       
 
//   delay_ms(MODE_DELAY);
}
                        

void UpToDownLED(int nAcc)
{
  InitLED();
 
  for(n=0;n<9;n++)
  {         
     SetLED(n,1);
     SetLED(LED_MAX-n,1);
         
     if ( 0 < nDelay+nAcc && 5000 >= nDelay+nAcc )
        nDelay += nAcc;
     delay_ms(nDelay);                        
  }  
 
  SetLED(n,1);
  delay_ms(nDelay);

   
void DownToUpLED(int nAcc)
{
  InitLED();
 
  SetLED(9,1);
  delay_ms(nDelay);
    
  for(n=8;n>=0;n--)
  {         
     SetLED(n,1);
     SetLED(LED_MAX-n,1);
         
     if ( 0 < nDelay+nAcc && 5000 >= nDelay+nAcc )
        nDelay += nAcc;
     delay_ms(nDelay);
  } 
}                        
 
void StarSplashLED(int nAcc, int nRepeat)
{  
  int nStatus = 0;         
  int t=0;

  InitLED();
 
for(t=0;t<nRepeat;t++)

for(n=0;n<18;n++)
{          
  if ( 0 == nStatus )
  {
   if ( 0 == n%2 )
    SetLED(n,1);
   else
    SetLED(n,0);
  }      
  else
  {
   if ( 1 == n%2 )
    SetLED(n,1);        
   else
    SetLED(n,0);           
  }                           

nStatus = nStatus == 0 ? 1 : 0;                              

if ( 0 < nDelay+nAcc && 5000 >= nDelay+nAcc )
  nDelay += nAcc;
delay_ms(nDelay);
}
}

,
TOTAL TODAY