본문 바로가기

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

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

#define PORTF (*(volatile unsigned int *)0x62//입출력설정
#define DDRF (*(volatile unsigned int *)0x61//출력설정
#define PINF (*(volatile unsigned int *)0x20)

#define PORTC (*(volatile unsigned int *)0x35//입출력설정
#define DDRC (*(volatile unsigned int *)0x34//출력설정
#define PINC (*(volatile unsigned int *)0x33)

#define PORTD (*(volatile unsigned int *)0x32//입출력설정
#define DDRD (*(volatile unsigned int *)0x31//출력설정
#define PIND (*(volatile unsigned int *)0x30)

#define PORTE (*(volatile unsigned int *)0x23//입출력설정
#define DDRE (*(volatile unsigned int *)0x22//출력설정
#define PINE (*(volatile unsigned int *)0x21)

void delay_us(unsigned char time_us);
void delay_ms(unsigned int time_ms);

int main(void)

{

  DDRD = 0xFF;  //E번째 IO 핀에 대한 설정 초기화

  PORTD = 0XFF;  //E번째 IO 핀에 대한 출력 값 초기화

  //volatile unsigned char i=0;  

  //volatile unsigned char a=0;

  volatile unsigned char b=0;
  volatile unsigned char r=0;

  for(;;)
  { 
  for(r=0 ; r < 10 ; r++)
  {
    for(b=0; b < 10; b++)
    {
      PORTD = (r<<4)+b;
      delay_ms(50);
    }
    
  }
  }
}

void delay_us(unsigned char time_us)
{
  register unsigned char i;

  for ( i =0 ; i< time_us ;i++)
  {
    asm volatile (" PUSH R0 ");
    asm volatile (" POP  R0 ");
    asm volatile (" PUSH R0 ");
    asm volatile (" POP  R0 ");
    asm volatile (" PUSH R0 ");
    asm volatile (" POP  R0 ");
    asm volatile (" PUSH R0 ");
    asm volatile (" POP  R0 ");
  }
}
void delay_ms(unsigned int time_ms)
{
  register unsigned int i;
  
  for ( i=0 ; i < time_ms ; i++)
  {
    delay_us(250);
    delay_us(250);
    delay_us(250);
    delay_us(250);
  }
}


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


#define PORTF (*(volatile unsigned int *)0x62//입출력설정

#define DDRF (*(volatile unsigned int *)0x61//출력설정

#define PINF (*(volatile unsigned int *)0x20)

   

#define PORTC (*(volatile unsigned int *)0x35//입출력설정

#define DDRC (*(volatile unsigned int *)0x34//출력설정

#define PINC (*(volatile unsigned int *)0x33)

   

#define PORTD (*(volatile unsigned int *)0x32//입출력설정

#define DDRD (*(volatile unsigned int *)0x31//출력설정

#define PIND (*(volatile unsigned int *)0x30)

   

   

#define PORTE (*(volatile unsigned int *)0x23//입출력설정

#define DDRE (*(volatile unsigned int *)0x22//출력설정

#define PINE (*(volatile unsigned int *)0x21)

   

   

void delay_us(unsigned char time_us);
void delay_ms(unsigned int time_ms);

   

   

   

int main(void)

{

  DDRD = 0xFF;  //E번째 IO 핀에 대한 설정 초기화

  PORTD = 0XFF;  //E번째 IO 핀에 대한 출력 값 초기화

   

  //volatile unsigned char i=0;  

  //volatile unsigned char a=0;

  volatile unsigned char b=0;
  
  volatile unsigned char r=0;

   

  for(;;)

  {

  
  
  for(r=0 ; r < 10 ; r++)
  {
    for(b=0; b < 10; b++)
    {
       if(PINC!=0xf\f)
                {
                    r=0;
                    b=0;
         
    
                }
      
      PORTD = (r<<4)+b;
      delay_ms(10);
      
    }
    
  }
  
  

  }
}



void delay_us(unsigned char time_us)
{
  register unsigned char i;

  for ( i =0 ; i< time_us ;i++)
  {
    asm volatile (" PUSH R0 ");
    asm volatile (" POP  R0 ");
    asm volatile (" PUSH R0 ");
    asm volatile (" POP  R0 ");
    asm volatile (" PUSH R0 ");
    asm volatile (" POP  R0 ");
    asm volatile (" PUSH R0 ");
    asm volatile (" POP  R0 ");
  }
}
void delay_ms(unsigned int time_ms)
{
  register unsigned int i;
  
  for ( i=0 ; i < time_ms ; i++)
  {
    delay_us(250);
    delay_us(250);
    delay_us(250);
    delay_us(250);
  }
}

반응형

'About 프로그래밍!!! > ATmega128' 카테고리의 다른 글

[ATmeaga129] 99~0  (0) 2010.06.17
[ATmega128]비교매치 카운터  (0) 2010.06.17
세그먼트 같은 숫자 들어오게 하기.  (0) 2010.06.15
세그먼트 켜기 원리  (0) 2010.06.15
ATmega128  (0) 2010.06.15
-->