【单片机毕业设计选题24029】-基于STC15的智能心率血压检测仪

发布于:2024-06-26 ⋅ 阅读:(15) ⋅ 点赞:(0)

系统功能:

系统上电后OLED显示“欢迎使用心率血压系统请稍后”后两秒后进入正常页面显示

第一行显示press1压力值

第二行显示press2压力值

第三行显示心率值

系统上电前把压力针头拔出到最大位置,系统上电后采集到的压力为4,推动针头

压力值会变大。

XL01心率传感器模块是光电型采集模块受光线干扰较大,使用时尽量避免强光干扰

将手指轻按在模块光电收发口上,待模块上的指示灯均匀闪动时即可测出心率值。

短按SW1按键后SU-03T离线语音模块会播报两个压力值和心率值

主要功能模块原理图:

单片机接口电路:

按键输入电路:

心率压力采集电路:

资料获取地址

系统主要功能模块代码

系统初始化代码:

//P3.0,P3.1,P3.2,P3.3,P3.6,P3.7设置为准双向口

         P3M1 &= 0x30;      

         P3M0 &= 0x30;      

         P5M1 &= 0xCF;      

         P5M0 &= 0xCF;       //P5.4,P5.5设置为准双向口

    InitVar();

    InitADC();

    InitUart1();

    InitTimer0();

    InitOled();

    InitOledDisp();

         EA = 1;     //打开总中断

系统控制代码:

void SystemControl(void)

{

    char textBuf[30];

    unsigned char adVal = 0;

    float volVal = 0;

    float pressVal = 0;

    unsigned int tempVal = 0;

   

    adVal = GetADCResult(0);

    volVal = adVal*0.01294;

    pressVal = 48.41*volVal + 4.41;

    if(pressVal>60000.0)

    {

        pressVal = 60000.0;

    }   

    press1 = (unsigned int)pressVal;

    sprintf(textBuf,"Press1:%5dkPa", press1);

    OledShowString(0, 0, (uint8_t*)textBuf, OLED_FONT_8X16); //测试8*16字符


    adVal = GetADCResult(1);

    volVal = adVal*0.01294;

    pressVal = 48.41*volVal + 4.41;

    if(pressVal>60000.0)

    {

        pressVal = 60000.0;

    }

    press2 = (unsigned int)pressVal;

    sprintf(textBuf,"Press2:%5dkPa", press2);

    OledShowString(0, 2, (uint8_t*)textBuf, OLED_FONT_8X16); //测试8*16字符   


    sprintf(textBuf,"Rate:%3d", rateVal);

    OledShowString(0, 4, (uint8_t*)textBuf, OLED_FONT_8X16); //测试8*16字符    

}

计算心率代码:

//读心率

void CalculateRate(void)

{

    switch(readRateIndex)

    {

        case READ_RATE_IDLE:

            if(RATE_PIN==LOW_LEVEL)

            {

                readRateIndex = READ_RATE_LOW;

            }

            break;

        case READ_RATE_LOW:

            rateLowCnt++;

            if(RATE_PIN==HIGH_LEVEL)

            {

                if(rateLowCnt>=60)

                {

                    readRateIndex = READ_RATE_HIGH;                 

                }

                else

                {

                    readRateIndex = READ_RATE_IDLE;

                }

                rateLowCnt = 0;

            }

            break;

        case READ_RATE_HIGH:

            rateHighCnt++;

            if(RATE_PIN==LOW_LEVEL)

            {

                rateVal = 60000/rateHighCnt;

                if(rateVal>150)

                {

                    rateVal = 150;

                }

                else if(rateVal<70)

                {

                    rateVal = 70;

                }

                rateHighCnt = 0;

                readRateIndex = READ_RATE_IDLE;

            }

            break;

        default:

            break;

    }

}//读心率

void CalculateRate(void)

{

    switch(readRateIndex)

    {

        case READ_RATE_IDLE:

            if(RATE_PIN==LOW_LEVEL)

            {

                readRateIndex = READ_RATE_LOW;

            }

            break;

        case READ_RATE_LOW:

            rateLowCnt++;

            if(RATE_PIN==HIGH_LEVEL)

            {

                if(rateLowCnt>=60)

                {

                    readRateIndex = READ_RATE_HIGH;                 

                }

                else

                {

                    readRateIndex = READ_RATE_IDLE;

                }

                rateLowCnt = 0;

            }

            break;

        case READ_RATE_HIGH:

            rateHighCnt++;

            if(RATE_PIN==LOW_LEVEL)

            {

                rateVal = 60000/rateHighCnt;

                if(rateVal>150)

                {

                    rateVal = 150;

                }

                else if(rateVal<70)

                {

                    rateVal = 70;

                }

                rateHighCnt = 0;

                readRateIndex = READ_RATE_IDLE;

            }

            break;

        default:

            break;

    }

}

此设计提供的资料包含原理图PCB(包含PDF,AD,立创EDA三个版本),源代码,系统框图,主程序流程图,物料清单(包含使用到的器件手册),功能操作说明等。