◆◆ ATmega128 외부 인터럽트 제어 - FND P.144 ◆◆
/*
외부 인터럽트 제어 - FND p.144
숫자가 0~9까지 카운트 되면서 SW8을 누르면 멈추고,
다시 SW8을 누르면 숫자가 작동되는...
0210A_Interrupt_p144.c
*/
#include <mega128.h>
#include <delay.h>
unsigned char Flag = 1;
char Seg_pat[10] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f };
void main(void)
{
char i = 1;
DDRB = 0xff;
DDRF = 0xf0;
DDRE = 0x00;
EICRB = 0b10101010;
EIMSK = 0b00110000; // SW8, SW14 작동 (11)
SREG = 0x80;
PORTF = 0b11000000; // FND 2개 작동 (00)
while(1){
if( Flag == 1){
PORTB = Seg_pat[i];
i++;
delay_ms(300);
if( i == 7 ) i =1;
}//endif
}//endwhile
}//end main
interrupt [EXT_INT4] void External_int4(void){
Flag = Flag ^1; // ^ 이걸 몰랐네
}//end4
◆◆ ATmega128 외부 인터럽트 제어 - FND P.146 ◆◆
/*
외부인터럽트 제어 - FND p.146
0~9까지 카운트 되면서 SW8를 누르면 숫자가 일시정지하고,
SW8를 떼면 숫자가 런닝 되게 구현
0210B_Interrupt_p146.c
*/
#include <mega128.h>
#include <delay.h>
unsigned char Number[] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f };
void main()
{
int Num = 0;
char Temp;
DDRB = 0xff;
DDRF = 0x10;
EICRB = 0b00000010;
EIMSK = 0b00010000;
SREG = 0x80;
while(1){
Temp = Number[Num];
Num++;
PORTB = Temp;
delay_ms(1000);
if( Num >=10 ) Num = 0;
}//endwhile
}//end main
interrupt [EXT_INT4] void External_int4(void){
while((PINE & 0x10) == 0 );
}//end4
◆◆ ATmega128 외부 인터럽트 제어 - FND P.147 ◆◆
/*
외부 인터럽트 제어 - FND p.147
0210C_Interrupt_p147.c
*/
#include <mega128.h>
#include <delay.h>
char Seg[10] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x27, 0x7f, 0x67 };
int i = 0, Num = 0, Temp = 0;
void main()
{
DDRF = 0xf0;
DDRE = 0x00;
DDRB = 0xff;
PORTF = 0x10;
EICRB = 0x02;
EIMSK = 0x10;
SREG = 0x80;
PORTB = Seg[i];
while(1){
if( Num%2 == 0){
PORTF = 0xe0;
PORTB = Temp;
}//endif
for( i = 0 ; i <10 ; i++){
if( Num%2 != 0){
delay_ms(500);
PORTF = 0xe0;
PORTB = Seg[i];
Temp = Seg[i];
}//endif
}//endfor
}//endwhile
}//end main
interrupt [EXT_INT4] External_int4(void){
Num++;
}//end4
◆◆ ATmega128 외부 인터럽트 제어 - FND P.150 ◆◆
/*
외부 인터럽트 제어 - FND p.150
SW8를 누를 때마다 우측 FND 표시값 증가
0210D_Interrupt_p150.c
*/
#include <mega128.h>
#include <delay.h>
char Seg_pat[10] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f };
char N1 = 0;
void main(void)
{
DDRB = 0xff; // 포트 B 출력 설정
DDRF = 0b11110000; // PF4-PF7
EICRB = 0b00000010; // 외부 인터럽트 4 : 하강 에지
EIMSK = 0b00010000; // 외부 인터럽트 4 : 인에이블
SREG = 0x80;
PORTF = 0b11100000; // 맨 우측 7-Segment SEG1 ON (PF4 = 0)
while(1){
PORTB = Seg_pat[N1];
}//endwhile
}//end main
interrupt [EXT_INT4] void External_int(void){
N1 = (N1 + 1) % 10; // 값 +1
}//end4