BASIC4MCU | 질문게시판 | 답변 : FND출력문제
페이지 정보
작성자 master 작성일2018-06-30 20:45 조회7,223회 댓글0건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=5627
본문
![]()
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-06-30 오후 8:47:17// by Ok-Hyun Park//FND 구동이 잘 되지 않습니다.처음 FND시작할때도 0000으로 뜨지않고스위치를 누르면 seg[17]에 순서대로 업다운이 가능해야하는데FND설정이 잘못되었는지 숫자가 제대로 표시가 안됩니다.case문 순서를 바꾼이유는 FND가 천의자리숫자부터 일의자리숫자까지 전부 반대로 되어있어서수정을 하였습니다.스위치 4,5번으로 통한 LED 좌우 시프트는 잘 되지만스위치 6,7번을 통한 FND 업다운은 잘 되지않습니다.char seg[17]을 사용하여 업다운을 할수있는 방법이 없을까요?처음에도 0000으로 뜨게하고싶습니다.//#include <avr/io.h>#include <avr/interrupt.h>#include <util/delay.h>//volatile char seg[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71,0};volatile int n=0;//ISR(INT4_vect){PORTA<<=1; if(PORTA==0)PORTA=0x01;}//ISR(INT5_vect){PORTA>>=1; if(PORTA==0)PORTA=0x80;}//ISR(INT6_vect){if(++n>9999)n=0;}//ISR(INT7_vect){if(--n<0)n=9999;}//ISR(TIMER0_COMP_vect){static char cnt=0;PORTG=0;switch(cnt){case 0: PORTC=seg[n %10]; break;case 1: PORTC=seg[n/10 %10]; break;case 2: PORTC=seg[n/100%10]; break;case 3: PORTC=seg[n/1000 ]; break;}PORTG=1<<cnt;if(++cnt>3)cnt=0;}//int main(void){DDRA=0xFF; DDRC=0xFF; DDRG=0x0F;TCCR0=0x0C; OCR0=249; TIMSK=2;EICRB=0xAA; EIMSK=0xF0;sei();while(1){}}
두가지 문제점이 있었는데요
case 0: PORTC=seg[n %10]; break;case 1: PORTC=seg[n/10 %10]; break;case 2: PORTC=seg[n/100%10]; break;case 3: PORTC=seg[n/1000 ]; break;seg[] 배열 처리를 하지 않은 것은 심각한 오류이고
volatile char seg[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71,0};volatile int n=0;volatile 선언을 하지 않은 것도 중요한 오류입니다.인터럽트에서 사용하는 전역 변수는 volatile 선언을 해줘야 합니다.(코드비젼은 volatile 없어도 됨)
댓글 0
조회수 7,223등록된 댓글이 없습니다.