본문 바로가기

C언어/C과제

FND 응용실습 예제

1.앞의예제를수정하여, 버튼을누르면두개의FND가동일한숫자를표시하도록하기.

#include <avr/io.h>

int main()
{
  DDRC = 0x00;

  DDRE = 0xFF;
  PORTE = 0xFF;

  volatile unsigned char i = 0;
  volatile unsigned char a = 0;
  volatile unsigned char k = 0;

  for(;;)
  {
    asm("NOP");
    i = 0;

    a = ~PINC;
  while(a>=1)
  {
    a/=2;
    i++;
  }
  i=i<<4|i;
  PORTE = i;
  
  }

  return 1;
}


2.0~99까지순차적으로숫자를1씩증가하면서FND에표시하기

#include <avr/io.h>

int main()
{
  
  DDRE = 0xFF;
  
  PORTE = 0xFF;

  volatile unsigned int i = 0;
  volatile unsigned int j = 0;
  volatile unsigned int k = 0;
  volatile unsigned int t = 0;

  for(i=0;i<100;++i)
  {
    
    k=i%10;
    
    
    t=(i/10<<4)|k;
    PORTE=t;
    PORTC=i;
    
    for(j=0;j<60000;j++);
    for(j=0;j<60000;j++);

  
  
  
  
  
  
  }

  return 1;
}


3.99~0까지순차적으로숫자를1씩감소하면서FND에표시하기


#include <avr/io.h>

int main()
{
  
  DDRE = 0xFF;
  
  PORTE = 0xFF;

  volatile char i = 0;
  volatile unsigned int j = 0;
  volatile unsigned int k = 0;
  volatile unsigned int t = 0;

  for(i=99;i>=0;--i)
  {
    if(i==0)
    {
    PORTE=0x00;
    break;
    }
    k=i%10;
    
    
    t=(i/10<<4)|k;
    PORTE=t;
    PORTC=i;
    
    for(j=0;j<60000;j++);
    for(j=0;j<60000;j++);

  
  
  
  
  
  
  }

  return 1;
}

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

#include <avr/io.h>

int main()
{
  DDRC = 0x00;

  DDRE = 0xFF;
  PORTE = 0xFF;

  volatile int i = 0;
  volatile unsigned char a = 0;
  volatile unsigned char k = 0;
  volatile unsigned int j;
  
  
  for(;;)
  {
    asm("NOP");
    i = 0;
  
    
    
    
    for(i=0;i<=99;i++)
    {  
      a = ~PINC;
    
      k=(i/10<<4)|i%10;
      PORTE=k;
      for(j=0;j<60000;j++);
      for(j=0;j<60000;j++);
      if (a!=0x00)
      {
      
        break;
        
      }
      
      
    
    }
    
  
  

  }

  return 1;
}


 5. 0~99까지 순차적으로 숫자를 1씩 증가시키다가 버튼을 누르면 현재 값에서 1씩 감소하기 다시 누르면 1씩
증가하기

#include <avr/io.h>

int main()
{
  DDRC = 0x00;

  DDRE = 0xFF;
  PORTE = 0xFF;

  volatile unsigned char a = 0;
  volatile unsigned char c = 2;
  volatile unsigned char i = 0;
  volatile unsigned char k = 0;
  volatile unsigned int j;
  
  
  
  for(;;)
  {
    asm("NOP");
    
  if((c%2)==0)
  {  
    
    for(i=i;i<=99;++i)
    {  
      k=(i/10<<4)|i%10;
      PORTE=k;
      for(j=0;j<60000;j++);
      for(j=0;j<60000;j++);
      a = ~PINC;
      if(a!=0x00)
      {
        for(j=0;j<60000;j++);
        for(j=0;j<60000;j++);
        c=c+1;
        break;
      }
      
      
    }  
    
    
        
      
  }          
  else if((c%2)!=0)
  {  
    
    for(i=i;i>=0;--i)
    {  
      
      k=(i/10<<4)|i%10;
      PORTE=k;
      for(j=0;j<60000;j++);
      for(j=0;j<60000;j++);        
      a = ~PINC;
      if(a!=0x00)
      {
        for(j=0;j<60000;j++);
        for(j=0;j<60000;j++);
        c=c+1;
        break;
      }
    
    }

        
      
  }    
          
        
          
      
      
 }

  return 1;
}



'C언어 > C과제' 카테고리의 다른 글

C도전문제 1  (0) 2010.10.20
C과제 8  (1) 2010.10.19
C과제 7  (0) 2010.10.14
C과제 6  (0) 2010.10.13
C과제 5  (0) 2010.10.11