안녕하세요. 아래의 코드는 FND 실행 코드입니다. 몇일전에 질문드린 아트메가128 LED 신호등과 사용하기 위해서 FND를 공부하고 코드를 짜고 있습니다.원하는건 카운트입니다. ( 예를들어 10 -> 9 -> 8.... 0에서 다시 10으로 돌아가 반복) 초록불에서 12초 // 주황불에서 3초 // 붉은불에서 10초 == 총 25초 카운터기를 만들고 싶습니다.아래 코드는 반복을 실험하기 위해서 19 부터 0까지 카운트 되도록 만들어봤는데, 0에서 19가 아닌 99가 되면서 다시 99부터 카운터가 되더라구요.어떻게하면 25초를 표현하여 25 -> 0 다시 25->0을 반복적으로 사용할 수 있을까요?DDRB와 PORTB는 LED가 사용하고 있습니다.#include <avr/io.h>#include <avr/interrupt.h>#define DIG1 0#define DIG2 1#define DIG3 2#define DIG4 3#define T1_START 7936int sec, min;char dig_table[4] = {0x10, 0x20, 0x40, 0x80}; //DIG1 DIG2 DIG3 DIG4char fnd_table1[2] = {0x06, 0x3F}; //십의자리 // 1 0char fnd_table2[10] = {0x6F, 0x7F, 0x07, 0x7D, 0x6D, 0x66, 0x4F, 0x5B, 0x06, 0x3F}; //일의자리 // 9 8 7 6 5 4 3 2 1 0ISR(TIMER1_OVF_vect){ TCNT1 = T1_START; if(++sec >=60) { sec = 0; if(++min >= 60){ min=0; } }} void Delay(int idata){ int i,j; for(i=0; i<idata; i++){ for(j=0; j<5000; j++); }}void Init_IOport(void){ DDRC=0xFF; PORTC = 0xFF; DDRD = 0xFF; PORTD = 0x0F;}void Init_Interrupt(void){ TCCR1A = 0x00; TCCR1B = 0x04; // Normal timer , clk/256 분주비 설정 TIMSK = 0x04; // Timer0 Overflow Interrupt 설정 TCNT1 = T1_START; // Timer0 초기값 설정 SREG = 0x80;}void Init_Variable(void){ sec = 0;}int main(void){ Init_IOport(); Init_Interrupt(); Init_Variable(); /* Replace with your application code */ while (1) { PORTD = dig_table[DIG3]; PORTC = ~fnd_table1[sec/10]; Delay(1); PORTD = dig_table[DIG4]; PORTC = ~fnd_table2[sec % 10]; Delay(1); }}
안녕하세요. 아래의 코드는 FND 실행 코드입니다. 몇일전에 질문드린 아트메가128 LED 신호등과 사용하기 위해서 FND를 공부하고 코드를 짜고 있습니다.
원하는건 카운트입니다. ( 예를들어 10 -> 9 -> 8.... 0에서 다시 10으로 돌아가 반복)
초록불에서 12초 // 주황불에서 3초 // 붉은불에서 10초 == 총 25초 카운터기를 만들고 싶습니다.
아래 코드는 반복을 실험하기 위해서 19 부터 0까지 카운트 되도록 만들어봤는데, 0에서 19가 아닌 99가 되면서 다시 99부터 카운터가 되더라구요.
어떻게하면 25초를 표현하여 25 -> 0 다시 25->0을 반복적으로 사용할 수 있을까요?
DDRB와 PORTB는 LED가 사용하고 있습니다.
#include <avr/io.h>
#include <avr/interrupt.h>
#define DIG1 0
#define DIG2 1
#define DIG3 2
#define DIG4 3
#define T1_START 7936
int sec, min;
char dig_table[4] = {0x10, 0x20, 0x40, 0x80};
//DIG1 DIG2 DIG3 DIG4
char fnd_table1[2] = {0x06, 0x3F}; //십의자리
// 1 0
char fnd_table2[10] = {0x6F, 0x7F, 0x07, 0x7D, 0x6D, 0x66, 0x4F, 0x5B, 0x06, 0x3F}; //일의자리
// 9 8 7 6 5 4 3 2 1 0
ISR(TIMER1_OVF_vect){
TCNT1 = T1_START;
if(++sec >=60) {
sec = 0;
if(++min >= 60){
min=0;
}
void Delay(int idata)
{
int i,j;
for(i=0; i<idata; i++){
for(j=0; j<5000; j++);
void Init_IOport(void)
DDRC=0xFF;
PORTC = 0xFF;
DDRD = 0xFF;
PORTD = 0x0F;
void Init_Interrupt(void)
TCCR1A = 0x00;
TCCR1B = 0x04; // Normal timer , clk/256 분주비 설정
TIMSK = 0x04; // Timer0 Overflow Interrupt 설정
TCNT1 = T1_START; // Timer0 초기값 설정
SREG = 0x80;
void Init_Variable(void)
int main(void)
Init_IOport();
Init_Interrupt();
Init_Variable();
/* Replace with your application code */
while (1)
PORTD = dig_table[DIG3];
PORTC = ~fnd_table1[sec/10];
Delay(1);
PORTD = dig_table[DIG4];
PORTC = ~fnd_table2[sec % 10];
안녕하세요. 아래의 코드는 FND 실행 코드입니다. 몇일전에 질문드린 아트메가128 LED 신호등과 사용하기 위해서 FND를 공부하고 코드를 짜고 있습니다.원하는건 카운트입니다. ( 예를들어 10 -> 9 -> 8.... 0에서 다시 10으로 돌아가 반복) 초록불에서 12초 // 주황불에서 3초 // 붉은불에서 10초 == 총 25초 카운터기를 만들고 싶습니다.아래 코드는 반복을 실험하기 위해서 19 부터 0까지 카운트 되도록 만들어봤는데, 0에서 19가 아닌 99가 되면서 다시 99부터 카운터가 되더라구요.어떻게하면 25초를 표현하여 25 -> 0 다시 25->0을 반복적으로 사용할 수 있을까요?DDRB와 PORTB는 LED가 사용하고 있습니다.#include <avr/io.h>#include <avr/interrupt.h>#define DIG1 0#define DIG2 1#define DIG3 2#define DIG4 3#define T1_START 7936int sec, min;char dig_table[4] = {0x10, 0x20, 0x40, 0x80}; //DIG1 DIG2 DIG3 DIG4char fnd_table1[2] = {0x06, 0x3F}; //십의자리 // 1 0char fnd_table2[10] = {0x6F, 0x7F, 0x07, 0x7D, 0x6D, 0x66, 0x4F, 0x5B, 0x06, 0x3F}; //일의자리 // 9 8 7 6 5 4 3 2 1 0ISR(TIMER1_OVF_vect){ TCNT1 = T1_START; if(++sec >=60) { sec = 0; if(++min >= 60){ min=0; } }}void Delay(int idata){ int i,j; for(i=0; i<idata; i++){ for(j=0; j<5000; j++); }}void Init_IOport(void){ DDRC=0xFF; PORTC = 0xFF; DDRD = 0xFF; PORTD = 0x0F;}void Init_Interrupt(void) { TCCR1A = 0x00; TCCR1B = 0x04; // Normal timer , clk/256 분주비 설정 TIMSK = 0x04; // Timer0 Overflow Interrupt 설정 TCNT1 = T1_START; // Timer0 초기값 설정 SREG = 0x80;}void Init_Variable(void){ sec = 0;}int main(void){ Init_IOport(); Init_Interrupt(); Init_Variable(); /* Replace with your application code */ while (1) { PORTD = dig_table[DIG3]; PORTC = ~fnd_table1[sec/10]; Delay(1); PORTD = dig_table[DIG4]; PORTC = ~fnd_table2[sec % 10]; Delay(1); }}