BASIC4MCU | 8051/PIC | DT-516 강좌 | DT516-083.c 8비트 타이머를 사용한 스톱워치
페이지 정보
작성자 키트 작성일2017-08-23 13:37 조회1,288회 댓글0건첨부파일
본문
//-------------------------------------------------------------
// 82G516 E/V BOARD ( DT-516 )
//-------------------------------------------------------------
// XTAL : 22.1184Hz
//-------------------------------------------------------------
// filename: DT516-083.c
// 8비트 타이머를 사용한 스톱워치
//-------------------------------------------------------------
#include <REG_MPC82G516.H>
//
#include "DT516-main.h"
//
//
U_C key_buf=0;
bit PushFlg=0, Key_Flg=0, stop_flg=1;
U_C ms_cnt=0, sec_cnt=0;
//
void Timer_0_Interrupt(void) interrupt 1{ // 7200Hz=138.89us 주기
P4=0xFF; // FND OFF
//
if(!stop_flg){
if(++Tcnt0>=72){ Tcnt0=0; ms_cnt++;
if(ms_cnt >=100){ ms_cnt=0; sec_cnt++; }
if(sec_cnt>=100){ sec_cnt=0; }
}
}
//
switch(FND_CNT){
case 0: P0=Seg_Data[sec_cnt/10]; FND_COM1=0; break;
case 1: P0=Seg_Data[sec_cnt%10]; FND_COM2=0; break;
case 2: P0=Seg_Data[ms_cnt /10]; FND_COM3=0; break;
case 3: P0=Seg_Data[ms_cnt %10]; FND_COM4=0; break;
}
if(++FND_CNT>3)FND_CNT=0;
//
if(delay_buf){ if(--delay_buf==0)delay_flg=1; }
}
//
void key_chk(void){
U_C tp=0;
if(!P20)tp=0x30; if(!P21)tp=0x31; if(!P22)tp=0x32; if(!P23)tp=0x33;
if(!P24)tp=0x34; if(!P25)tp=0x35; if(!P26)tp=0x36; if(!P27)tp=0x37;
//
if(!P30)tp=0x38; if(!P31)tp=0x39; if(!P32)tp=0x3A; if(!P33)tp=0x3B;
if(!P34)tp=0x3C; if(!P35)tp=0x3D; if(!P36)tp=0x3E; if(!P37)tp=0x3F;
//
if(tp!=0){
if(!PushFlg){ PushFlg=1; key_buf=tp; Key_Flg=1; }
delay_ms(50);
}
else PushFlg=0;
}
//
void main(){
TMOD=2; ET0=1; TR0=1; EA=1;
while(1){
key_chk();
if(Key_Flg){ Key_Flg=0;
if (key_buf=='0'){ stop_flg=~stop_flg; } // start/stop
else if(key_buf=='1'){ ms_cnt=0; sec_cnt=0; } // clear
}
}
}
//-------------------------------------------------------------
댓글 0
조회수 1,288등록된 댓글이 없습니다.