IT_etc/dk-128 (ATmega128)

[Atmega128] FND 문제 풀기

JJun ™ 2009. 6. 24. 10:10

 ==================================================================================================

 

2장 DK-128 개발 환경 설정.pptx.pptx

Self 설치법.pptx

self.exe

bootloader.hex

test.hex

 

개발 환경 세팅은 위의 자료들을 참고하세요~!

 

==================================================================================================

 

3장 FND 실습.pptx.pptx

 

[보드 세팅]

 

------------------------------------------------------------------------------------------------- 

 

[ 문제 1 ]  버튼을 누르면 두 개의 FND가 동일한 숫자를 표시하도록 하기.

 

[소스 코드]

#include<avr/io.h>

int main(void)

{

        // 초기화

        DDRE=0xFF;

        PORTE=0xFF;

 

        DDRF=0xFF;

        PORTF=0xFF;

 

        /* volatile 은 해당 메모리가 레지스터의 주소이기 때문에

           해당 메모리 번지에 대하여 최적화를 하지 않도록 컴파일러에게 알리는 것이다. */

        volatile unsigned char i=0; // volatile : 최적화 무시!

        volatile unsigned char a=0;

 

        for(;;)

        {

               asm("NOP");

               i=0;

               PORTF = PINC;

               a=~PINC;

 

               while(a >= 1)

               {

                       a/=2;

                       i++;

               } // i = 누승 (1, 2, 3, )

 

               PORTE=((i%10)<<4)|(i%10); // 10의 자리와 1의 자리를 같은 수로 만들기

       }

       return 0;

}

 

-------------------------------------------------------------------------------------------------

 

[ 문제 2 ] 0~99까지 순차적으로 숫자를 1씩 증가하면서 FND에 표시 하기

 

[소스 코드]

#include<avr/io.h>

 

int main(void)
{
     DDRE=0xFF;
     PORTE=0xFF;
 
     DDRF=0xFF;
     PORTF=0xFF;
 
     volatile unsigned char cnt;
     volatile unsigned int i;
     volatile unsigned int j;

 

     for(;;)
     {
          for(cnt=0;cnt<100;cnt++) // 0 ~ 99
          {
                 PORTE=((cnt/10)<<4)|(cnt%10); // 10의 자리와 1의 자리를 구한다.
   
                 for(i=0;i<1000;i++) // 디스플레이를 위한 지연
                      for(j=0;j<600;j++)
                               ;
         }
    }
    return 0;

}

-------------------------------------------------------------------------------------------------

 

[ 문제 3 ] 99~0까지 순차적으로 숫자를 1씩 감소하면서 FND에 표시 하기

 

[소스 코드]

#include<avr/io.h>

 

int main(void)
{
    DDRE=0xFF;
    PORTE=0xFF;
 
    DDRF=0xFF;
    PORTF=0xFF;
 
    volatile unsigned char cnt;
    volatile unsigned int i;
    volatile unsigned int j;

 

    for(;;)
    {
        for(cnt=99;cnt>=0;cnt--) // 99 ~ 0
        {
            PORTE=((cnt/10)<<4)|(cnt%10); // 10의 자리와 1의 자리를 구한다.
   
            for(i=0;i<1000;i++)  // 디스플레이를 위한 지연
                for(j=0;j<600;j++)
                       ;
   
        } 
    }
    return 0;

}

-------------------------------------------------------------------------------------------------

 

 

[ 문제 4 ] 0~99까지 순차적으로 숫자를 1씩 증가시키다가 버튼을 누르면 0부터 다시 시작하기

 

[소스 코드]

#include<avr/io.h>

 

int main(void)
{
    DDRE=0xFF;
    PORTE=0xFF;
 
    DDRF=0xFF;
    PORTF=0xFF;
 
    volatile unsigned char cnt;
    volatile unsigned char c;
    volatile unsigned int i;
    volatile unsigned int j;
 
    for(;;)
    {
        for(cnt=0;cnt<100;cnt++)
        {
            PORTF=PINC;
            c = ~PINC;  
         

            if(c > 0) // 버튼을 누른 경우 (0 부터 시작하게 됨)
            {
                cnt=99;
                continue;
            }
   
            PORTE=((cnt/10)<<4)|(cnt%10);// 10의 자리와 1의 자리의 수 구함
  
            for(i=0;i<600;i++) // 디스플레이를 위한 지연
                for(j=0;j<600;j++)
                      ;
        } 
    }
    return 0;
}

 

-------------------------------------------------------------------------------------------------

 

[ 문제 5 ] 0~99까지 순차적으로 숫자를 1씩 증가시키다가 버튼을 누르면 현재 값에서 1씩

             감소하기, 다시 누르면 1씩 증가하기

 

[소스 코드]

#include<avr/io.h>

 

int main(void)
{
    DDRE=0xFF;
    PORTE=0xFF;
 
    DDRF=0xFF;
    PORTF=0xFF;
 
    volatile unsigned char cnt;
    volatile unsigned char c;
    volatile unsigned int i;
    volatile unsigned int j;
    volatile unsigned int flag=1;
 
    for(;;)
    {
        cnt = 0; // 99로 해서 아래의 while문을 빠져나오면 다시 초기화 될 값(0)
  
        while(cnt<100)
        {
            PORTF=PINC;
            c = ~PINC;  
   
            if(c > 0) // 키 값이 입력된 경우 -1을 곱하여 증/감을 정한다.
            {
                flag *= (-1);
                continue;
            }
   
            PORTE=((cnt/10)<<4)|(cnt%10); // 10의 자리와 1의 자리의 수 구함
  
            cnt+=flag;
   
            if(cnt <= 0) // 계속 감소하다가 0보다 작은 경우, 다시 99로…
            {
                cnt = 99;
            }
   
            for(i=0;i<600;i++) // 디스플레이를 위한 지연
                for(j=0;j<300;j++)
                        ;
        }
   }
   return 0;

}

================================================================================================== 





2장 DK-128 개발 환경 설정.pptx.pptx
0.84MB
bootloader.hex
0.0MB
Self 설치법.pptx
0.33MB
self.exe
0.02MB
test.hex
0.01MB
3장 FND 실습.pptx.pptx
0.28MB