BASIC4MCU | 질문게시판 | 답변 : IAR ATmega128 7세그먼트 스위치
페이지 정보
작성자 master 작성일2018-09-07 13:44 조회10,444회 댓글0건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=2941
본문
//
#include #include//
#pragma vector=TIMER0_OVF_vect __interrupt void TIMER0_OVF_Isr(void){ // 1ms TCNT0=6; PORTB=PORTB^0x01; }//
void main(){
DDRB=0xFF;//TCCR0=4; TCNT0=131; TIMSK=1; //16000000/64/(256-131),500us
TCCR0=4; TCNT0= 6; TIMSK=1; //16000000/64/(256- 6),1ms
__enable_interrupt();while(1){
; } }8MHz 클럭을 쓰고 있나요? 어째서 500us로 설정 했을까요?이 회로 경우에는 아래처럼 세그먼트를 구동하면 됩니다.소스코드 원문보기
//
unsigned char fnd_table[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};char fnd_buf[4];
//
#pragma vector=TIMER0_OVF_vect __interrupt void TIMER0_OVF_Isr(void){ static char fnd_cnt=0; TCNT0=131; PORTA=0x0F;switch(fnd_cnt){
case 0: PORTC=fnd_table[fnd_buf[0]]; PORTA=~1; break; case 1: PORTC=fnd_table[fnd_buf[1]]; PORTA=~2; break; case 2: PORTC=fnd_table[fnd_buf[2]]; PORTA=~4; break; case 3: PORTC=fnd_table[fnd_buf[3]]; PORTA=~8; break; }if(++fnd_cnt>3)fnd_cnt=0;
}포트를 변경하거나 DDRx 설정등은 알아서 추가하시고소스코드 원문보기
//
void disp(int n){ fnd_buf[0]=n/1000; fnd_buf[1]=n/100%10; fnd_buf[2]=n/10%10; fnd_buf[3]=n%10; }//
//---30 표시
disp(30);//---60 표시
disp(60);//
30이나 60을 표시 하려면 이렇게 하면 되겠죠
댓글 0
조회수 10,444등록된 댓글이 없습니다.