#include<avr/io.h>
#define F_CPU 16000000UL
#include <util/delay.h>
#include <avr/interrupt.h>
#include "led.h"
#include "segment.h"
int add=0;
int num1=0;
int num2=0;
int flag =0;
int temp=0;
int sum=0;
SIGNAL(SIG_INTERRUPT0)
{
sei();
_delay_ms(100);
unsigned char ary[4]={0x77,0x6D,0x37,0x5E};
unsigned char yun[4]={0x5E,0x3E,0x37,0x06};
_delay_ms(100);
if(add%4==0)
{
PORTC = ary[0];
PORTF = yun[0];
}
else if(add%4==1)
{
PORTC = ary[1];
PORTF = yun[1];
}
else if(add%4==2)
{
PORTC = ary[2];
PORTF = yun[2];
}
else if(add%4==3)
{
PORTC = ary[3];
PORTF = yun[3];
}
_delay_ms(100);
add++;
EIFR|=0x01;
cli();
}
SIGNAL(SIG_INTERRUPT1)
{
sei();
_delay_ms(100);
num1++;
_delay_ms(100);
disp_seg(num1);
EIFR|=0x02;
cli();
}
SIGNAL(SIG_INTERRUPT2)
{
sei();
_delay_ms(100);
num2++;
_delay_ms(100);
disp_seg(num2);
EIFR|=0x04;
cli();
}
SIGNAL(SIG_INTERRUPT3)
{
sei();
_delay_ms(100);
if(add==0)
{
sum = num1 + num2;
}
else if(add ==1)
{
sum = num1 - num2;
}
else if(add ==2)
{
sum = num1 * num2;
}
else if(add ==3)
{
sum = num1 / num2;
}
disp_seg(sum);
flag++;
if(flag==2){flag=0;sum=0;}
disp_seg(sum);
EIFR|=0x08;
cli();
}
int main()
{
DDRD = 0XF0; // Switch 1 2 3 4 를 사용
DDRA = 0XFF; // LED
DDRF = 0xFF; // right
DDRC = 0xFF; // left
EICRA = 0xAA;
EICRB = 0xAA;
EIMSK = 0x0F;
EIFR |= 0x0F;
sei(); //전체 인터럽트 인에이블
while(1)
{
}
return 0;
}
'과거에 공부했던 것들(저장용) > 학부생' 카테고리의 다른 글
[AVR Studio](atmega 128) Timer (0) | 2015.07.23 |
---|---|
[AVR Studio](atmega 128) led shift control (0) | 2015.07.23 |
Huffman 코딩 (구현한 부분까지) (0) | 2015.07.23 |
Sudoku 정답이 맞는지 확인하는 프로그램 (0) | 2015.07.23 |
Sudoku 해결 프로그램 (0) | 2015.07.23 |