BASIC4MCU | 질문게시판 | ATmega128 인터럽트를 이용한 카운트 질문입니다
페이지 정보
작성자 초보전공자 작성일2021-04-27 02:19 조회5,782회 댓글2건본문
0부터 9999까지 표시되는 fnd 카운터를 인터럽트를 이용하여 버튼 입력시 1이 증가하거나 5가 감소하는것을 만들려고 합니다 0000에서 감소가 되면 9998 이런식으로 감소를 시키고 싶은데 조금 어렵네요..
#include <mega128.h>
#include <delay.h>
unsigned char Port_char[] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90};
unsigned int Port_fnd[] ={0x1f,0x2f,0x4f,0x8f};
interrupt [EXT_INT0] void External_int0(void){
int i = 0;
for( i=0 ; i<10 ; i++){
PORTE = Port_fnd[0];
PORTB = Port_char[i];
delay_ms(300);
}
}
void PORT_Init(void)
{
DDRE = 0xf0;
DDRB = 0xff;
}
void FND_Disp(int dec)
{
PORTE = Port_fnd[3]; PORTB = Port_char[(dec/1000%10)]; delay_ms(1);
PORTE = Port_fnd[2]; PORTB = Port_char[(dec/100%10)]; delay_ms(1);
PORTE = Port_fnd[1]; PORTB = Port_char[(dec/10%10)]; delay_ms(1);
PORTE = Port_fnd[0]; PORTB = Port_char[(dec/1%10)]; delay_ms(1);
}
void interrupt_init(void)
{
DDRE = 0xf0;
DDRB = 0xff;
EICRA = 0x02;
EIMSK = 0x01;
SREG = 0x80;
}
void main(void)
{
int i = 0;
PORT_Init();
interrupt_init();
while(1){
FND_Disp(i);
if(i>9999) i-=10000;
if(i<0) i+=10000;
}
}
짧은 지식으로 코딩을 해봤는데 버튼을 누르면 0001, 0002 가 아닌 __1 이런식으로 나타나서 어떻게 해야할지 잘 몰라 질문합니다
댓글 2
조회수 5,782master님의 댓글
master 작성일
if(i>9999) i-=10000;
if(i<0) i+=10000;
범위 체크 및 변경은 증가와 감소하는 곳에서 해야합니다.
master님의 댓글
master 작성일
#include <mega128.h>
#include <delay.h>
//
char Port_char[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90};
char Port_fnd[] ={0x10,0x20,0x40,0x80};
int i=0;
//
void FND_Disp(int dec){
PORTE=Port_fnd[3]; PORTB=Port_char[(dec/1000%10)]; delay_ms(1);
PORTE=Port_fnd[2]; PORTB=Port_char[(dec/100%10)]; delay_ms(1);
PORTE=Port_fnd[1]; PORTB=Port_char[(dec/10%10)]; delay_ms(1);
PORTE=Port_fnd[0]; PORTB=Port_char[(dec/1%10)]; delay_ms(1);
}
//
interrupt [EXT_INT0] void External_int0(void){ if(++i>9999)i=0; } // 1증가
interrupt [EXT_INT1] void External_int1(void){ if(--i<0)i=9999; } // 1감소
interrupt [EXT_INT2] void External_int2(void){ i+=5; if(i>9999)i-=10000; } // 5증가
interrupt [EXT_INT3] void External_int3(void){ i-=5; if(i<0)i+=10000; } // 5감소
//
void main(void){
DDRE =0xf0; DDRB =0xff;
EICRA=0xAA; EIMSK=0x0F; SREG=0x80;
while(1){
FND_Disp(i);
}
}