#include #include "lcd.h" void delay(int); void configWDT(); void configIO(); void configIR(); void configT(); void disableT(); void int_char(); int i=0; int j=0; char str[4]; int main(void) { configWDT(); configIO(); configIR(); InitializeLcm(); ClearLcmScreen(); PrintStr("Put your Finger"); LcmSetCursorPosition(2,0); PrintStr("on the sensor :"); while(1) { delay(10); //P1OUT |= BIT6; } } void configWDT() { WDTCTL = WDTPW + WDTHOLD; // Stop WDT } void configIO() { P1OUT=0x00; P1DIR |= (BIT0 + BIT6); // P1.0 output } void configIR() { P1REN |= BIT3; // P2 Enable Pullup/Pulldown P1OUT |= BIT3; // P2 pullup P1IE |= BIT3; // P2 interrupt enabled P1IES |= BIT3; // P2 Hi/lo falling edge P1IFG &= ~(BIT3); // P2 IFG cleared just in case _EINT(); } void enablePulseIR() { P2REN |= BIT1; // P2 Enable Pullup/Pulldown P2OUT |= BIT1; // P2 pullup P2IE |= BIT1; // P2 interrupt enabled P2IES |= BIT1; // P2 Hi/lo falling edge P2IFG &= ~(BIT1); // P2 IFG cleared just in case // _EINT(); } void disablePulseIR() { P2REN &= ~BIT1; // P2 Enable Pullup/Pulldown P2OUT &= ~BIT1; // P2 pullup P2IE &= ~BIT1; // P2 interrupt enabled P2IES &= ~BIT1; // P2 Hi/lo falling edge P2IFG |= (BIT1); // P2 IFG cleared just in case } void configT() { CCTL0 = CCIE; // CCR0 interrupt enabled CCR0 = 50000; TACTL = TASSEL_2 + MC_1; // SMCLK, upmode } void disableT() { TACTL = 0X00; } void delay(int a) { for(;a>0;a++) _delay_cycles(7); } void printResult() { int_char(); ClearLcmScreen(); PrintStr("HeartBeat/min :"); LcmSetCursorPosition(2,0); PrintStr(str); } #pragma vector=TIMER0_A0_VECTOR __interrupt void Timer_A (void) { if(i<350) i++; else { P1OUT &= (~BIT0); // Toggle P1.0 disableT(); configIR(); disablePulseIR(); j=j*4; printResult(); i=0; j=0; } } #pragma vector=PORT1_VECTOR __interrupt void Port_1(void) { if((P1IFG & 0x08) == 0x08) { P1OUT |= BIT0; configT(); enablePulseIR(); P1IFG &= ~BIT3; ClearLcmScreen(); PrintStr("Please wait :"); } } #pragma vector=PORT2_VECTOR __interrupt void Port_2(void) { P2IE &= ~BIT1; j++; P2IE |= BIT1; P2IFG &= ~BIT1; } void int_char() { int s; s=j%10; str[2]=(char)(s+48); j=j/10; s=j%10; str[1]=(char)(s+48); j=j/10; s=j%10; str[0]=(char)(s+48); str[3]='\0'; }