본문내용
ctor의 ISR을 수행한다. m_sec1(첫째자리)가 10까지 증가되면 m_sec1을 0으로 셋해주고 m_sec2(둘째자리)를 증가시킨다. m_sec2가 10이되면 0으로 셋하고 m_sec3(셋째자리)를 증가시킨다. m_sec3이 10이되면 0으로 셋하고 마지막 자리 m_sec4를 증가시킨다. m_sec4는 10까지 증가하게 되면 m_sec4를 0으로 셋하고 TACTL = 0x0000으로 설정하여 TIMER A를 멈춘다. 멈춤과 동시에 flag 변수 값을 0으로 바꿔주어 초기 상태와 같이 만들어 준다
2.3 소스코드
#include
#include
unsigned char num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x67};// 세그먼트 숫자 매핑
unsigned char numdot[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0xa7,0xff,0xe7};//둘째자리 dot(.)을 포함 한 숫자 매핑
unsigned char gnd[4]={0x0e,0x0d,0x0b,0x07};//시간 카운트세그먼트,Lab time 세그먼트 1 자리를 정함
unsigned char gnd5[4]={0xf2,0xfd,0xff,0xff};//p5.0,p5.1,p10.6,p10.7 이 각 자리를 정한다.
unsigned char gnd10[4]={0xff,0xff,0xbf,0x7f};
unsigned char num7[10]={0xff,0x6f,0xbf,0xff,0x6f,0xdf,0xdf,0x7f,0xff,0x7f};//포트 7의 남는 4개 핀과 포트 3의 남는 4개핀을 이용하여
unsigned char num3[10]={0x5f,0x0f,0x3f,0x2f,0x6f,0x6f,0x7f,0x4f,0x7f,0x6f};//새로운 매핑 테이블을 만듬. Lab time 세그먼트 2의 숫자를 구성한다.
unsigned char num3dot[10]={0xdf,0x8f,0xbf,0xaf,0xef,0xef,0xff,0xcf,0xff,0xef};//둘째자리 dot(.)을 포함 한 숫자 매핑
int main_print(int i, int j);//메인 세그먼트 출력 함수
int main_printdot(int i, int j);//메인 세그먼트 dot(.)을 포함한 출력함수
int laptime_print(int x, int y);//Lab time 세그먼트 1 출력함수
int laptime_printdot(int x, int y);//Lab time 세그먼트 1 dot(.)을 포함한 출력함수
int laptime_print1(int j,int k);//Lab time 세그먼트 2 출력함수
int laptime_printdot1(int j,int k);//Lab time 세그먼트 2 dot(.)을 포함한 출력함수
char m_sec4,m_sec3,m_sec2,m_sec1;//메인 세그먼트 각 자리별 초(second)변수
char lt_sec4,lt_sec3,lt_sec2,lt_sec1;//LAP TIME 1 세그먼트 각 자리별 초(second)변수
char lt1_sec4,lt1_sec3,lt1_sec2,lt1_sec1;//LAP TIME 2 세그먼트 각 자리별 초(second)변수
int l;//딜레이 위한 변수
int flag=0; // 스위치 두번 눌림을 위한 플래그 선언 초기값 0.
#pragma vector=TIMERA0_VECTOR
__interrupt void timer1_ISR(void)//타이머 A 인터럽트 서비스 루틴
{
m_sec1++;//소수점 첫째자리 증가
if(m_sec1==10)//10이되면
{
m_sec1 = 0;//0으로 셋
m_sec2++;//1초 단위 변수 증가
if(m_sec2==10)//10이되면
{
m_sec2=0;//0으로셋
m_sec3++;//10초 단위 변수 증가
if(m_sec3==10)//10이되면
{
m_sec3=0;//0으로 셋
m_sec4++;//100초단위 변수 증가
if(m_sec4==10)//10이되면
{
m_sec4=0;//0으로 셋
TACTL=0x0000;//타이머 A 컨드롤 0x0000으로설정 ,타이머 멈춤
flag=0;
}
}
}
}
}
#pragma vector=PORT1_VECTOR
__interrupt void port1_handler(void)//포트 1 입력 인터럽트 서비스 루틴 (LapTime 저장 스위치)
{
if(P1IFG&0x01)//포트 1 스위치 1입력시
{
P1IFG&=~(0x01);
lt_sec1=m_sec1;//현재 main 세그먼트 값을 laptime 세그먼트1에 저장.
lt_sec2=m_sec2;
lt_sec3=m_sec3;
lt_sec4=m_sec4;
}
else if(P1IFG&0x02)//포트 1 스위치 2입력시
{
P1IFG&=~(0x02);
lt1_sec1=m_sec1;//현재 main 세그먼트 값을 laptime 세그먼트2에 저장.
lt1_sec2=m_sec2;
lt1_sec3=m_sec3;
lt1_sec4=m_sec4;
}
}
#pragma vector=PORT2_VECTOR
__interrupt void port2_handler(void)//포트 2 입력 인터럽트 서비스 루틴(Start/Pause 스위치,Reset 스위치)
{
if(P2IFG&0x02)//p2.1 스위치 입력시
{
if(flag==0)//초기값 플래그 0으로 설정되있음 처음 스위치 입력시
{
P2IFG&=~(0x02);
TACTL=0x0110;//CLK source 로 ACLK(32768Hz)사용 업모드 사용
flag=1;//플래그 1로
}
else if(flag==1)//플래그 값이 1이라면 , 스위치 두번째 눌림
{
P2IFG&=~(0x02);
TACTL=0x0000;//타이머 A 멈춤
flag=0;//플래그 0으로
}
}
else if(P2IFG&0x04)//p2.2 스위치 입력시
{
P2IFG&=~(0x04);
if(flag==0)//플래그 0일때 타이머 A가 0x 0000 으로
2.3 소스코드
#include
#include
unsigned char num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x67};// 세그먼트 숫자 매핑
unsigned char numdot[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0xa7,0xff,0xe7};//둘째자리 dot(.)을 포함 한 숫자 매핑
unsigned char gnd[4]={0x0e,0x0d,0x0b,0x07};//시간 카운트세그먼트,Lab time 세그먼트 1 자리를 정함
unsigned char gnd5[4]={0xf2,0xfd,0xff,0xff};//p5.0,p5.1,p10.6,p10.7 이 각 자리를 정한다.
unsigned char gnd10[4]={0xff,0xff,0xbf,0x7f};
unsigned char num7[10]={0xff,0x6f,0xbf,0xff,0x6f,0xdf,0xdf,0x7f,0xff,0x7f};//포트 7의 남는 4개 핀과 포트 3의 남는 4개핀을 이용하여
unsigned char num3[10]={0x5f,0x0f,0x3f,0x2f,0x6f,0x6f,0x7f,0x4f,0x7f,0x6f};//새로운 매핑 테이블을 만듬. Lab time 세그먼트 2의 숫자를 구성한다.
unsigned char num3dot[10]={0xdf,0x8f,0xbf,0xaf,0xef,0xef,0xff,0xcf,0xff,0xef};//둘째자리 dot(.)을 포함 한 숫자 매핑
int main_print(int i, int j);//메인 세그먼트 출력 함수
int main_printdot(int i, int j);//메인 세그먼트 dot(.)을 포함한 출력함수
int laptime_print(int x, int y);//Lab time 세그먼트 1 출력함수
int laptime_printdot(int x, int y);//Lab time 세그먼트 1 dot(.)을 포함한 출력함수
int laptime_print1(int j,int k);//Lab time 세그먼트 2 출력함수
int laptime_printdot1(int j,int k);//Lab time 세그먼트 2 dot(.)을 포함한 출력함수
char m_sec4,m_sec3,m_sec2,m_sec1;//메인 세그먼트 각 자리별 초(second)변수
char lt_sec4,lt_sec3,lt_sec2,lt_sec1;//LAP TIME 1 세그먼트 각 자리별 초(second)변수
char lt1_sec4,lt1_sec3,lt1_sec2,lt1_sec1;//LAP TIME 2 세그먼트 각 자리별 초(second)변수
int l;//딜레이 위한 변수
int flag=0; // 스위치 두번 눌림을 위한 플래그 선언 초기값 0.
#pragma vector=TIMERA0_VECTOR
__interrupt void timer1_ISR(void)//타이머 A 인터럽트 서비스 루틴
{
m_sec1++;//소수점 첫째자리 증가
if(m_sec1==10)//10이되면
{
m_sec1 = 0;//0으로 셋
m_sec2++;//1초 단위 변수 증가
if(m_sec2==10)//10이되면
{
m_sec2=0;//0으로셋
m_sec3++;//10초 단위 변수 증가
if(m_sec3==10)//10이되면
{
m_sec3=0;//0으로 셋
m_sec4++;//100초단위 변수 증가
if(m_sec4==10)//10이되면
{
m_sec4=0;//0으로 셋
TACTL=0x0000;//타이머 A 컨드롤 0x0000으로설정 ,타이머 멈춤
flag=0;
}
}
}
}
}
#pragma vector=PORT1_VECTOR
__interrupt void port1_handler(void)//포트 1 입력 인터럽트 서비스 루틴 (LapTime 저장 스위치)
{
if(P1IFG&0x01)//포트 1 스위치 1입력시
{
P1IFG&=~(0x01);
lt_sec1=m_sec1;//현재 main 세그먼트 값을 laptime 세그먼트1에 저장.
lt_sec2=m_sec2;
lt_sec3=m_sec3;
lt_sec4=m_sec4;
}
else if(P1IFG&0x02)//포트 1 스위치 2입력시
{
P1IFG&=~(0x02);
lt1_sec1=m_sec1;//현재 main 세그먼트 값을 laptime 세그먼트2에 저장.
lt1_sec2=m_sec2;
lt1_sec3=m_sec3;
lt1_sec4=m_sec4;
}
}
#pragma vector=PORT2_VECTOR
__interrupt void port2_handler(void)//포트 2 입력 인터럽트 서비스 루틴(Start/Pause 스위치,Reset 스위치)
{
if(P2IFG&0x02)//p2.1 스위치 입력시
{
if(flag==0)//초기값 플래그 0으로 설정되있음 처음 스위치 입력시
{
P2IFG&=~(0x02);
TACTL=0x0110;//CLK source 로 ACLK(32768Hz)사용 업모드 사용
flag=1;//플래그 1로
}
else if(flag==1)//플래그 값이 1이라면 , 스위치 두번째 눌림
{
P2IFG&=~(0x02);
TACTL=0x0000;//타이머 A 멈춤
flag=0;//플래그 0으로
}
}
else if(P2IFG&0x04)//p2.2 스위치 입력시
{
P2IFG&=~(0x04);
if(flag==0)//플래그 0일때 타이머 A가 0x 0000 으로
소개글