정보보안공부
마이크로프로세서_day07 본문
*** 헤더파일
#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 |