목차
요 약 문
그림 목차
Ⅰ. 서 론
1.1 기술동향 분석 1.2 연구의 필요성
Ⅱ. 설계이론
2.1 작품 구성의 개요
2.2 전체 구성 블럭도
2.3 전원부
2.4 맥박감지부
2.5 2차 단위이득 저역통과 필터
2.6 ADC0804와 기준전압과 측정 범위 입력
2.7 AT89C51(micro controller)
III.연구 결과
Ⅳ. 결 론
부 록
그림 목차
Ⅰ. 서 론
1.1 기술동향 분석 1.2 연구의 필요성
Ⅱ. 설계이론
2.1 작품 구성의 개요
2.2 전체 구성 블럭도
2.3 전원부
2.4 맥박감지부
2.5 2차 단위이득 저역통과 필터
2.6 ADC0804와 기준전압과 측정 범위 입력
2.7 AT89C51(micro controller)
III.연구 결과
Ⅳ. 결 론
부 록
본문내용
& 0xff; //PORT2로 부터 값을 받아들여 저장
}
///////////////////////////////////////////////////////////////////////////////
void value_check() //받은 값들을 ARRAY변수에 저장(20개)
{
j++;
if(j>9) j=0;
check[j]=(UNIT8)ADC_value;
}
///////////////////////////////////////////////////////////////////////////////
void compare_value() // 측정되고 저장된 값들을 비교
{
if(check[j]>180) // 지금 측정값이 그전 측정값보다 크다면
{
P1_5=1; // LED off
heart_situation=0; //맥박신호의 하이를 인식하는 변수를 0으로 set
}
else if(check[j]<180) //지금 측정값이 그전측정값도다 작으면
{
if(heart_situation==0) //하이(heart_situation=0)다음 로우신호를 받았다면
{
if(heart>100) //맥박이 100넘기면 0으로 다시 카운트
heart=0;
else
{
if(k==1) //노이즈를 필터링하는 변수가 1이라면 신호를 측정
{
k=0;
P1_5=0; // LED on
heart++; //맥박수 1증가
heart_situation=1; //다시 하이인식 변수를 1로 set
}
}
}
}
}
///////////////////////////////////////////////////////////////////////////////
void sigan_heart() //카운터함수
{
if(second==60) // 측정 완료
{
second_enable=0; //카운터 그만
buzzer(10); // 부저를 10번 울린다
delay_ms(3000); // 3초 delay
second=0; //카운터 초기화
heart=0; //맥박수 초기화
start_T=1; //처음으로 돌아가라는 변수 1로 set
}
}
///////////////////////////////////////////////////////////////////////////////
void timer1_program() //타이머 인터럽트의 프로그램
{
static UNIT16 t1_second;
if(second_enable) //카운터 신호가 있다면
t1_second++; //1초를 위한 변수 카운터
t1_second_s++; //노이즈필터링을 위한 카운터
segment_number++; //세그먼트 선택 변수
if(segment_number>4)
segment_number=0;
P1_1=0; // 7-segment 모두 off
P1_2=0;
P1_3=0;
P1_4=0;
switch(segment_number)
{
case 0: //카운터 10의 자리
if(second/0==0) //0이면 7-segment OFF
SEGMENT=display_7segment[10];
else
SEGMENT=display_7segment[second/0]; //카운터만큼 7-segment ON
P1_1=1;
break;
case 1: //카운터 1의 자리
SEGMENT=display_7segment[second%10]; //카운터 만큼 7-segment ON
P1_2=1;
break;
case 2: //맥박표시 10의 자리
if(heart/10==0) //0이면 7-segment OFF
SEGMENT=display_7segment[10];
else
SEGMENT=display_7segment[heart/10]; //맥박수 만큼 7-segment ON
P1_3=1;
break;
case 3: //맥박 표시 1의 자리
SEGMENT=display_7segment[heart%0]; // 맥박수 만큼 7-segment ON
P1_4=1;
break;
default:
break;
}
if(t1_second_s==12) //0.6초 마다 필터 가동
{
k=1; //필터 가동 변수 1 set
t1_second_s=0;
}
if(t1_second==20)
{ // 1초 마다 Second카운터
t1_second=0;
second++;
}
}
///////////////////////////////////////////////////////////////////////////////
void init_port(void) // 포트 초기화 함수
{
P0=0xf6; // 7-segment 출력
P1=0xff; // 7-segment지정 포트
P2=0xff; // ADC0804로부터 측정값을 받음
P3_2=1; // P3_2: Buzzer
P3_7=1; // ADC 활성화 포트
}
///////////////////////////////////////////////////////////////////////////////
void buzzer(UNIT8 n)
{
while(n--)
{
BUZZER=0; // Buzzer on
delay_ms(20);
BUZZER=1; // Buzzer off
delay_ms(10);
}
}
///////////////////////////////////////////////////////////////////////////////
void int1() interrupt 3 // 5ms 마다 인터럽트가 걸립니다
{
init_timer();
timer1_program();
}
///////////////////////////////////////////////////////////////////////////////
void int2() interrupt 2 // START버튼 누르면 시작변수 1SET시킴
{
while(!INT0);
delay_us(500);
if(INT0);
start=1;
}
///////////////////////////////////////////////////////////////////////////////
부록 Ⅱ. 회로도
}
///////////////////////////////////////////////////////////////////////////////
void value_check() //받은 값들을 ARRAY변수에 저장(20개)
{
j++;
if(j>9) j=0;
check[j]=(UNIT8)ADC_value;
}
///////////////////////////////////////////////////////////////////////////////
void compare_value() // 측정되고 저장된 값들을 비교
{
if(check[j]>180) // 지금 측정값이 그전 측정값보다 크다면
{
P1_5=1; // LED off
heart_situation=0; //맥박신호의 하이를 인식하는 변수를 0으로 set
}
else if(check[j]<180) //지금 측정값이 그전측정값도다 작으면
{
if(heart_situation==0) //하이(heart_situation=0)다음 로우신호를 받았다면
{
if(heart>100) //맥박이 100넘기면 0으로 다시 카운트
heart=0;
else
{
if(k==1) //노이즈를 필터링하는 변수가 1이라면 신호를 측정
{
k=0;
P1_5=0; // LED on
heart++; //맥박수 1증가
heart_situation=1; //다시 하이인식 변수를 1로 set
}
}
}
}
}
///////////////////////////////////////////////////////////////////////////////
void sigan_heart() //카운터함수
{
if(second==60) // 측정 완료
{
second_enable=0; //카운터 그만
buzzer(10); // 부저를 10번 울린다
delay_ms(3000); // 3초 delay
second=0; //카운터 초기화
heart=0; //맥박수 초기화
start_T=1; //처음으로 돌아가라는 변수 1로 set
}
}
///////////////////////////////////////////////////////////////////////////////
void timer1_program() //타이머 인터럽트의 프로그램
{
static UNIT16 t1_second;
if(second_enable) //카운터 신호가 있다면
t1_second++; //1초를 위한 변수 카운터
t1_second_s++; //노이즈필터링을 위한 카운터
segment_number++; //세그먼트 선택 변수
if(segment_number>4)
segment_number=0;
P1_1=0; // 7-segment 모두 off
P1_2=0;
P1_3=0;
P1_4=0;
switch(segment_number)
{
case 0: //카운터 10의 자리
if(second/0==0) //0이면 7-segment OFF
SEGMENT=display_7segment[10];
else
SEGMENT=display_7segment[second/0]; //카운터만큼 7-segment ON
P1_1=1;
break;
case 1: //카운터 1의 자리
SEGMENT=display_7segment[second%10]; //카운터 만큼 7-segment ON
P1_2=1;
break;
case 2: //맥박표시 10의 자리
if(heart/10==0) //0이면 7-segment OFF
SEGMENT=display_7segment[10];
else
SEGMENT=display_7segment[heart/10]; //맥박수 만큼 7-segment ON
P1_3=1;
break;
case 3: //맥박 표시 1의 자리
SEGMENT=display_7segment[heart%0]; // 맥박수 만큼 7-segment ON
P1_4=1;
break;
default:
break;
}
if(t1_second_s==12) //0.6초 마다 필터 가동
{
k=1; //필터 가동 변수 1 set
t1_second_s=0;
}
if(t1_second==20)
{ // 1초 마다 Second카운터
t1_second=0;
second++;
}
}
///////////////////////////////////////////////////////////////////////////////
void init_port(void) // 포트 초기화 함수
{
P0=0xf6; // 7-segment 출력
P1=0xff; // 7-segment지정 포트
P2=0xff; // ADC0804로부터 측정값을 받음
P3_2=1; // P3_2: Buzzer
P3_7=1; // ADC 활성화 포트
}
///////////////////////////////////////////////////////////////////////////////
void buzzer(UNIT8 n)
{
while(n--)
{
BUZZER=0; // Buzzer on
delay_ms(20);
BUZZER=1; // Buzzer off
delay_ms(10);
}
}
///////////////////////////////////////////////////////////////////////////////
void int1() interrupt 3 // 5ms 마다 인터럽트가 걸립니다
{
init_timer();
timer1_program();
}
///////////////////////////////////////////////////////////////////////////////
void int2() interrupt 2 // START버튼 누르면 시작변수 1SET시킴
{
while(!INT0);
delay_us(500);
if(INT0);
start=1;
}
///////////////////////////////////////////////////////////////////////////////
부록 Ⅱ. 회로도