정보보안공부

마이크로프로세서_day07 본문

ATMega128

마이크로프로세서_day07

Steady_sp 2017. 4. 14. 01:57

*** 헤더파일

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#define FND_S (*(volatile unsigned char*)0x8002)
#define FND_D (*(volatile unsigned char*)0x8003)
#define EX_LED (*(volatile unsigned char*)0x800c)
#define DOT_R (*(volatile unsigned char*)0x8008) //빨강
#define DOT_G (*(volatile unsigned char*)0x8007) //초록 
#define DOT_C (*(volatile unsigned char*)0x8009) //전원 

 

*** 0번스위치 누르면 FND 0~9반복 1번스위치 누르면 STOP 2번스위치 누르면 0으로

void init_device(void)
{
     MCUCR = 0x80; //
     EX_LED = 0x00; //LED끄기
     FND_S = 0xff; //FND초기화
     DOT_C = 0x00; //DOT_C끄기
}
int num; //전역변수 초기화 안하면 0
char key;
char fnd[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
unsigned char keyscan(void)
{
     key = PIND & 0xf0;
     return key;
}

int stop(int num)
{
 //unsigned char loop = 1;
 int loop = 1;
 while(loop)
 {
      FND_S = 0xfe;
      FND_D = fnd[num];
      _delay_ms(200);
      key=keyscan();
      switch(key)
      {
            case 0xe0: //INT 0번 SW
            loop = 0;
            break;
            case 0xb0: //INT 2번 SW
            num = 0;
            break;
      }
 }
     return num;
}

 

void start(void)
{
     while(1)
{
      FND_S = 0xFE;
      FND_D = fnd[num];
      _delay_ms(200);
      num++;
      if(num == 10)
      num = 0;
      key = keyscan();
      if(key == 0xd0) //1번스위치 누르면 num = stop(num)
           num = stop(num);
    }

}

int main(void)
{ //스위치0일때 0~9 스위치 1일때 STOP 스위치 2일때 CLEAR(0으로)
 init_device();
 while(1)
 {
  key = keyscan();
  if(key == 0xe0)
   start();
 }
}

 

***DOT를 이용해 색깔나타내기

 

 

 

***빨간색 한줄씩 이동

 

 

***왼쪽반은 빨강 오른쪽반은 초록

 

 

 

***위아래로 밑에쪽반은 초록 위에쪽반은 빨강

 

 

 

 

 

 

***양 모서리 계단식 총 4개

 

 

 

'ATMega128' 카테고리의 다른 글

마이크로프로세서_day09  (0) 2017.04.28
마이크로프로세서_day08  (0) 2017.04.26
마이크로프로세서_day06  (0) 2017.04.06
마이크로프로세서_day05  (0) 2017.03.31
마이크로프로세서_day04  (0) 2017.03.31
Comments