BASIC4MCU | 질문게시판 | 답변 2: 타이머를 활용한 fnd 카운터
페이지 정보
작성자 master 작성일2018-05-02 18:36 조회5,808회 댓글0건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=661
본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-05-02 오후 6:30:07// by Ok-Hyun Park//#include <mega128.h>#include <delay.h>//char fnd[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};char ms=0,s=0,m=0;//void display(int n){PORTB=fnd[m/10]; PORTG=1; delay_ms(1); PORTG=0;PORTB=fnd[m%10]; PORTG=2; delay_ms(1); PORTG=0;PORTB=fnd[s/10]; PORTG=4; delay_ms(1); PORTG=0;PORTB=fnd[s%10]; PORTG=8; delay_ms(1); PORTG=0;}//interrupt[TIM1_COMPA]void timer1_compare(void){if(++ms==25){ ms=0;if(++s>59){ s=0; if(++m>59)m=0; }}}//void main(void){DDRB=0xff; DDRG=0x0f; DDRC=0x0f; PORTB=0xff;OCR1AH=0x03; OCR1AL=0x20; TCCR1A|=1<<WGM12; TCCR1B|=1<<CS11; TIMSK|=1<<OCIE1A;SREG|=0x80;while(1){ display(s); }}
간단한 시계예제입니다.
m과 s를 59가 아닌 99로 하면 질문 소스와 동일한 동작을 합니다.
//
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-05-02 오후 6:37:59// by Ok-Hyun Park//#include <mega128.h>#include <delay.h>//char fnd[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};char s=0,m=0,cnt=0;int ms=0;//void display(int n){}//interrupt[TIM1_COMPA]void timer1_compare(void){ //1msPORTG=0; // FND OFF//if(++ms>999){ ms=0;if(++s>59){ s=0; if(++m>59)m=0; }}//switch(cnt){case 0: PORTB=fnd[m/10]; break;case 1: PORTB=fnd[m%10]; break;case 2: PORTB=fnd[s/10]; break;case 3: PORTB=fnd[s%10]; break;}PORTG=1<<cnt;if(++cnt>3)cnt=0;}//void main(void){DDRB=0xff; DDRG=0x0f; DDRC=0x0f; PORTB=0xff;TCCR1B=0x09; OCR1A=15999; TIMSK=0x10; SREG=0x80; //1mswhile(1){}}
1ms 주기로 변경하고 타이머 인터럽트에서 FND를 구동합니다.
타이머 인터럽트에서 가장먼저 FND를 OFF 시키는 것은 잔상을 없애기 위한 방법입니다.
댓글 0
조회수 5,808등록된 댓글이 없습니다.