[DK-128] LED 순차적으로 점멸하기

소스코드

  1. #include <avr/io.h>  
  2. #include<avr/signal.h>  
  3. #include<avr/interrupt.h>  
  4.   
  5. void delay_us(unsigned char time_us)  
  6. {  
  7.   
  8.         register unsigned char i;  
  9.   
  10.         for(i=0; i<time_us; i++)                     
  11.         {  
  12.                 asm volatile(" PUSH R0 ");     
  13.                 asm volatile(" POP R0 ");      
  14.                 asm volatile(" PUSH R0 ");  
  15.                 asm volatile(" POP R0 ");     
  16.                 asm volatile(" PUSH R0 ");   
  17.                 asm volatile(" POP R0");     
  18.         }  
  19. }  
  20.   
  21. void delay_ms(unsigned int time_ms)  
  22. {  
  23.         register unsigned int i;  
  24.         for(i=0; i<time_ms; i++)  
  25.         {  
  26.                 delay_us(250);  
  27.                 delay_us(250);  
  28.                 delay_us(250);  
  29.                 delay_us(250);  
  30.         }  
  31. }  
  32.   
  33. void delay_s(unsigned int time_s)  
  34. {  
  35.         register unsigned int i;  
  36.         for(i=0; i<time_s; i++)  
  37.          delay_ms(1000);  
  38.   
  39. }  
  40.   
  41. int main()  
  42. {  
  43.   
  44.     int iFlag1 = 0x01;  
  45.     int iFlag2 = 0xff;  
  46.     int direct = 1;  
  47.     DDRF = 0xff;  
  48.   
  49.     while(1)  
  50.     {  
  51.         PORTF = iFlag1 ^ iFlag2;  
  52.         if(direct == 1)  
  53.         {  
  54.             iFlag1 = iFlag1<<1;  
  55.             if(iFlag1 == 0x80)   direct = -1;  
  56.         }  
  57.         else if(direct == -1)  
  58.         {  
  59.             iFlag1 = iFlag1>>1;  
  60.             if(iFlag1 == 0x01)   direct = 1;  
  61.         }  
  62.   
  63.         delay_ms(300);  
  64.     }      
  65.     return 0;  
  66. }