BASIC4MCU | 질문게시판 | 답변 : 안녕하세요..실습시험준비중인 학생입니다.
페이지 정보
작성자 master 작성일2022-05-31 11:44 조회1,298회 댓글1건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=20254
본문
PINE=0x30;PORTE=0x30;
내부 풀업저항은 PINE가 아닌 PORTE 레지스터에 값을 넣어야 합니다.
//
interrupt [TIM1_COMPA] void timer1_compa_isr(void){
if(++count==100)count=0;
}
TCCR1B=0x0D; OCR1A=31249; TIMSK=0x10; //2secTCNT1에 0x1000을 릴로드 시킬 필요없이 OCR1A 값을 31249 입력하면 됩니다. 0x8A11-0x1000=0x7A11(31249)TCNT1의 값을 건드리지 않을 수록 더 정밀한 시간을 얻을 수 있습니다.(xtal 정밀도)//스위치를 동시에 누르는 것을 먼저 체크해야 합니다.mode=0 - 200 milisec만큼 LED 깜빡임mode=1 - 1,2번 Switch 동시에 눌리면 1~9999까지 차례로 50milisec마다 1씩 증가함mode=2 - 1번 Switch 누르면 7-segment로 글씨 나오게 함mode=3 - 2번 Switch 누르면 interrupt를 사용해서 LED가 왼쪽에서 오른쪽으로 하나씩 옮겨가면서 켜짐모드를 정해서 구동하면 되겠죠//mode=0 - 200 milisec만큼 LED 깜빡임mode=1 - 1,2번 Switch 동시에 눌리면 1~9999까지 차례로 50milisec마다 1씩 증가함mode=2 - 1번 Switch 누르면 7-segment로 글씨 나오게 함mode=3 - 2번 Switch 누르면 interrupt를 사용해서 LED가 왼쪽에서 오른쪽으로 하나씩 옮겨가면서 켜짐////unsigned char num[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//unsigned char mode=0,SW,i,led=0;unsigned int count=0;//interrupt [TIM1_COMPA] void timer1_compa_isr(void){if(mode==3){if(++led>7)led=0;}}//void main(){DDRA=0xFF;PORTE=0x30;DDRC=0xFF;DDRG=0x0F;TCCR1B=0x0D; OCR1A=31249; TIMSK=0x10; //2secSREG.7=1;while(1){SW=(~PINE)&0x30; // 반전 시킴if (SW==0x30){ mode=1; delay_ms(50); while((~PINE)&0x30); delay_ms(50); } // 손을 뗄 때까지 대기 및else if(SW==0x10){ mode=2; delay_ms(50); while((~PINE)&0x30); delay_ms(50); } // 채터링방지 딜레이else if(SW==0x20){ mode=3; delay_ms(50); while((~PINE)&0x30); delay_ms(50); }//if(mode==0){PORTG=0; // 세그먼트 OFFif(PORTA!=0xFF)PORTA=0xFF; else PORTA=0; // LED 전체 ON/OFFdelay_ms(100);}if(mode==1){PORTA=0; // LED OFFfor(i=0;i<10;i++){ // 1250us*4*10=50msPORTG=8; PORTC=num[count/1000 ]; delay_us(1250);PORTG=4; PORTC=num[count/100%10]; delay_us(1250);PORTG=2; PORTC=num[count/10 %10]; delay_us(1250);PORTG=1; PORTC=num[count %10]; delay_us(1250);}if(++count>9999)count=0;}if(mode==2){ // ID 출력?PORTA=0; // LED OFFPORTG=4; PORTC=num[6]; delay_ms(1);PORTG=2; PORTC=num[2]; delay_ms(1);PORTG=1; PORTC=num[7]; delay_ms(1);}if(mode==3){PORTG=0; // 세그먼트 OFFPORTA=0x80>>led;}}}
댓글 1
조회수 1,298tony님의 댓글
tony 작성일감사합니다!!!!