Page 123 - MDP2020-3
P. 123
················································································ 명장양성프로젝트 【MDP】 과제발표회 자료집 Ⅲ | 117
라) 스위치를 사용하여 FND로 숫자 카운트
#include <mega128.h>
#include <delay.h>
unsigned char seg_pat[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90};
unsigned char run=0,msec=0,sec=0;
void main(){
DDRE=0x00; //스위치
DDRA=0x0f; //TR21 7-segment common anode, low active
DDRC=0xFF; //7-segment a~g, high active
while(1) {
//F1=0.01초, 마이크로세컨트를 줌으로써 1초를 맞춤
PORTA=0xfe; PORTC=seg_pat[msec%10]; delay_us(2500);
//F2=0.1초
PORTA=0xfd; PORTC=seg_pat[msec/10]; delay_us(2500);
//F3=1초
PORTA=0xfb; PORTC=seg_pat[sec%10]+0x80; delay_us(2500);
//F4=10초
PORTA=0xf7; PORTC=seg_pat[sec/10]; delay_us(2500);
if(run==1) { // run=1일 때만 카운터 증가
if(++msec>99){ msec=0; //msec가 100이 넘어가면 sec가 1씩 증가, msec는 다시 0
if(++sec>99)sec=0; //sec가 100이 넘어가면 sec는 다시 0
}
}
if(PINE.0==0) run=1; //SW0을 눌렀을 때 start
if(PINE.1==0) run=0; //SW1을 눌렀을 때 stop
if(PINE.2==0){ run=0, sec=0, msec=0; } // SW2를 눌렀을 떄 리셋
}
}