본문 바로가기

Hardware/ATmega128

7. FND 출력

KEY제어로 사용할 레지스터



FND제어로 사용할 레지스터



//1에서 8까지 출력하여 보자

#include <avr/io.h>

int main(void)
{
DDRC = 0xFF;

DDRE = 0xFF;
PORTE = 0xFF;

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

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

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

}

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

#include <avr/io.h> //IO제어 헤더파일
void delay(unsigned int); //delay 함수 선언
int main(void)
{
 DDRE = 0b11111111; //E포트의 IO핀을 출력용으로 설정
 PORTE = 0b11111111; //E포트의 출력값 초기화
 
 volatile unsigned char i = 0;
 
 for(;;) //무한루프
 {
  asm("NOP"); //동기화를 위한 NOP 명령
    
  while(100 > i)
  {
   PORTE = (i / 10) * 16 + (i % 10); //예)i=1, (1/10)*16+(1%10)=1
   i++;
   
   delay(2);
   if(PINC != 0xFF)
   {
   i=0;
   }
   
  }
  
   
 }
 return 1;
}

void delay(unsigned int dd)
{
 volatile unsigned int i;
 
 while(dd--)
 {
  for(i = 0; i < 65000 ; i++);
 }
 
 return ;
}

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

#include <avr/io.h> //IO제어 헤더파일
void delay(unsigned int); //delay 함수 선언
int main(void)
{
 DDRE = 0b11111111; //E포트의 IO핀을 출력용으로 설정
 PORTE = 0b11111111; //E포트의 출력값 초기화
 
 volatile unsigned char i = 0;
 
 for(;;) //무한루프
 {
  asm("NOP"); //동기화를 위한 NOP 명령
  while(100 > i)
  {
   PORTE = (i / 10) * 16 + (i % 10);
   i++;
   
   delay(2);
   if(PINC != 0xFF)
   {
   break;
   }
  }
  while(100 >i)
  {
   PORTE = (i / 10) * 16 + (i % 10);
   i--;
    
   delay(2);
   if(PINC != 0xFF)
   {
   break;
   }
  }
  
   
 }
 return 1;
}
void delay(unsigned int dd)
{
 volatile unsigned int i;
 
 while(dd--)
 {
  for(i = 0; i < 65000 ; i++);
 }
 
 return ;
}
{
 volatile unsigned int i;
 
 while(dd--)
 {
  for(i = 0; i < 65000 ; i++);
 }
 
 return ;
}

'Hardware > ATmega128' 카테고리의 다른 글

9. Timer/Counter 출력  (0) 2011.05.11
8. 적외선 센서 출력  (0) 2011.05.11
6. LED 실습문제  (0) 2011.04.26
5. ATmega128 자료형의 크기  (0) 2011.04.21
4. 명령 Register 기본형  (0) 2011.04.20