新资讯:基于STC89C52单片机+PulseSensor完成心率检测显示

2023-06-08 01:02:55 来源:1126626497 分享到:


(资料图)

一、设计介绍

当前基于STC89C52单片机和PCF8591、PulseSensor心率传感器、SSD1306 OLED显示屏等元件实现了一个心率检测仪。检测仪可以通过采集心率传感器输出的模拟信号,并经过AD转换后计算出实时的心率值,然后将心率值通过IIC协议传输到OLED显示屏上进行展示。用户只需要将心率传感器固定在身体上,启动心率检测仪,就能够方便地实时监测自己的心率。

本项目的应用范围广泛,可以用于健康管理、健身锻炼、医疗等领域。在家庭中,人们可以使用该心率检测仪,及时监测自己的心率,对身体健康进行有效管理和控制;在健身房或健身教练中心,教练可以利用该心率检测仪来监测运动员的心率变化,以便针对性地调整训练计划,提高训练效果;在医疗机构中,医护人员可以使用该心率检测仪,监测患者的心率情况,及时发现异常情况,为患者的治疗提供有力的依据和参考。

二、硬件选型

本项目需要用到的硬件:

STC89C52单片机:作为主控芯片,负责读取PulseSensor心率传感器的模拟信号、进行AD转换、计算心率值,并将心率值通过IIC协议传输到OLED显示屏上进行展示。PCF8591模块:用于实现STC89C52单片机通过IIC总线对PulseSensor心率传感器进行数据采集和AD转换。PulseSensor心率传感器:用于采集人体的微弱心跳信号,并将信号输出到PCF8591模块。SSD1306 OLED显示屏:用于显示心率检测结果,包括心率值及单位。杜邦线、面包板:用于连接各个硬件模块和搭建电路原型。

三、实现代码

下面是项目核心代码,通过PCF8591接PulseSensor心率传感器采集心率,并通过IIC协议的0.96寸OLED显示屏显示出来:

#include < reg52.h > #include < intrins.h > ​ #define uchar unsigned char #define uint unsigned int ​ sbit SCL = P1^0; sbit SDA = P1^1; sbit LED = P2^0; ​ #define ADDR_PCF8591    0x90    // PCF8591的IIC地址:1001 0000 #define CMD_PCF8591_WR  0x40    // PCF8591写数据命令字:0100 CCCC,CCCC为通道选择 #define CMD_PCF8591_RD  0x41    // PCF8591读数据命令字:0100 CCCC,CCCC为通道选择 ​ #define ADDR_OLED       0x78    // SSD1306 OLED显示屏的IIC地址:0111 1000 ​ uchar heartRate[3];             // 存储心率值的字符串 ​ /**  * 延时函数,控制IIC通信速度  */ void Delay() {     uint i, j;     for(i=0; i< 50; i++)         for(j=0; j< 500; j++); } ​ /**  * IIC启动信号  */ void IIC_Start() {     SCL = 1;     SDA = 1;     Delay();     SDA = 0;     Delay();     SCL = 0; } ​ /**  * IIC停止信号  */ void IIC_Stop() {     SCL = 0;     SDA = 0;     Delay();     SCL = 1;     SDA = 1;     Delay(); } ​ /**  * IIC发送一个字节的数据  * @parambyte发送的字节  * @return 接收到的应答位  */ uchar IIC_SendByte(uchar byte) {     uchar i, ack; ​     for(i=0; i< 8; i++)     {         SDA = (bit)(byte & 0x80);         byte < <= 1;         Delay();         SCL = 1;         Delay();         SCL = 0;     } ​     SDA = 1;     Delay();     SCL = 1;     Delay();     ack = SDA;     SCL = 0; ​     return ack; } ​ /**  * 初始化PCF8591模块  */ void Init_PCF8591() {     IIC_Start();     IIC_SendByte(ADDR_PCF8591);     IIC_SendByte(CMD_PCF8591_WR | 0);     IIC_Stop(); } ​ /**  * 读取PCF8591的AD值  * @param ch 选择的通道编号  * @return AD转换后的数值  */ uchar Read_PCF8591(uchar ch) {     uchar value; ​     IIC_Start();     IIC_SendByte(ADDR_PCF8591);     IIC_SendByte(CMD_PCF8591_WR | ch);     IIC_Stop(); ​     IIC_Start();     IIC_SendByte(ADDR_PCF8591 | 0x01);     value = IIC_SendByte(0xFF);     IIC_Stop(); ​     return value; } ​ /**  * 初始化SSD1306 OLED显示屏  */ void Init_OLED() {     IIC_Start();     IIC_SendByte(ADDR_OLED);     IIC_SendByte(0xAE);     // 关闭显示     IIC_SendByte(0x00);     // 列地址低4位     IIC_SendByte(0x10);     // 列地址高4位     IIC_SendByte(0x40);     // 起始行地址     IIC_SendByte(0xB0);     // 设置页地址     IIC_SendByte(0x81);     // 对比度设置命令     IIC_SendByte(0xCF);     // 对比度值     IIC_SendByte(0xA1);     // 段复用设置     IIC_SendByte(0xA6);     // 常规显示模式     IIC_SendByte(0xA8);     // 多路复用设置     IIC_SendByte(0x3F);     // 页面数-1     IIC_SendByte(0xC8);     // 扫描方式设置     IIC_SendByte(0xD3);     // 设置显示偏移     IIC_SendByte(0x00);     IIC_SendByte(0xD5);     // 频率设置命令     IIC_SendByte(0x80);     // 分频系数     IIC_SendByte(0xD9);     // 设置预充电周期     IIC_SendByte(0xF1);     IIC_SendByte(0xDA);     // 设置COM硬件连接方式     IIC_SendByte(0x12);     IIC_SendByte(0xDB);     // VCOMH设置     IIC_SendByte(0x40);     IIC_SendByte(0xA4);     // 全部点亮/正常显示     IIC_SendByte(0xA6);     // 正常/反显示控制     IIC_SendByte(0xAF);     // 开启显示     IIC_Stop(); } ​ /**  * 在OLED上显示字符串  * @param x 开始列地址  * @param y 开始页地址  * @param str 需要显示的字符串  */ void ShowString_OLED(uchar x, uchar y, uchar *str) {     uchar i = 0; ​     IIC_Start();     IIC_SendByte(ADDR_OLED);     IIC_SendByte(0x00);     // 列地址低4位     IIC_SendByte(0x10);     // 列地址高4位     IIC_SendByte(0xB0 + y);// 设置页地址     for(i=0; str[i]!="\\0"; i++)     {         IIC_SendByte(0xB0 + y);         IIC_SendByte((x + 8*i) & 0x0F);         IIC_SendByte(((x + 8*i) > > 4) | 0x10);         IIC_SendByte(str[i]);     }     IIC_Stop(); } ​ /**  * 主函数,心率计算和显示  */ void main() {     Init_PCF8591();     // 初始化PCF8591模块     Init_OLED();        // 初始化OLED显示屏 ​     while(1)     {         uchar adValue = Read_PCF8591(0); // 读取PCF8591的AD值         uint timeInterval = 100;         // 设定采集心率的时间间隔,单位为毫秒         uint count = 0;                  // 统计脉搏跳动次数的计数器         uint heartRateValue = 0;         // 计算得出的心率值 ​         for (uint i=0; i< timeInterval; i++)  // 在一定时间内采集数据         {             if (adValue > 200)          // 当AD值高于阈值时,统计脉搏跳动次数             {                 count++;                 while(adValue > 100)    // 等待一段时间,避免同一次脉搏被重复计数                 {                     adValue = Read_PCF8591(0);                 }             }             adValue = Read_PCF8591(0);  // 读取下一个AD值         } ​         heartRateValue = (uint)(count * 60.0 / timeInterval);  // 计算心率值         sprintf(heartRate, "%d", heartRateValue);              // 将心率值转换为字符串 ​         ShowString_OLED(0, 0, "Heart Rate:");     // 在OLED上显示标题         ShowString_OLED(80, 0, heartRate);       // 在OLED上显示心率值         ShowString_OLED(96, 0, "bpm");           // 在OLED上显示单位     } }

审核编辑:汤梓红

标签:

新资讯:基于STC89C52单片机+PulseSensor完成心率检测显示

来源:1126626497 2023-06-08 01:02:55

西南证券(600369)6月7日主力资金净卖出1136.53万元

来源:证券之星 2023-06-08 00:00:57

金昌成为河西走廊最大的新能源电池生产基地-当前快报

来源:金台资讯 2023-06-07 23:23:14

当前快播:河南省内黄县发布高温橙色预警

来源:北京青年报官网 2023-06-07 23:20:02

串联分压并联分流怎么理解_串联分压,并联分流怎么理解

来源:互联网 2023-06-07 22:10:33

微软在 Edge 浏览器中展示伪装成 AI 搜索结果的必应广告

来源:站长之家 2023-06-07 21:46:24

假如市场要“高考”?这一项重要数据又崩了

来源:药师的后花园 2023-06-07 21:00:36

华富数字经济混合延长募集期

来源:中国经济网 2023-06-07 20:56:55

广汽集团:5月汽车销量同比增长14.5%-世界新消息

来源:证券时报·e公司 2023-06-07 19:52:21

当前快报:将抖音视频设置为iPhone动态壁纸操作步骤

来源:互联网 2023-06-07 19:47:13

大理中考时间2023年具体时间 2023中考详细时间 世界播报

来源:初三网 2023-06-07 18:45:06

第124章睛姨梅开二度梅姨_梅开二度的由来

来源:互联网 2023-06-07 18:30:59

世界快讯:志愿者 汉阳喊你兑积分

来源:武汉头条 2023-06-07 17:57:12

华胜天成(600410)6月7日主力资金净卖出2808.80万元

来源:证券之星 2023-06-07 17:52:26

崩坏星穹铁道叠影器特制怎么用[多图]

来源:教程之家 2023-06-07 17:05:03

时讯:川渝建筑行业绿色建造技能大赛落幕

来源:工人日报客户端 2023-06-07 16:28:51

世界今日报丨西安市区域划分图2020_西安市区域划分

来源:互联网 2023-06-07 15:15:08

【全球聚看点】建设路街道:纾难解困助企业 释放活力促发展

来源:郑州晚报 郑州客户端官方网站 2023-06-07 14:22:45

专业,精准的ChantGPT解答:《热恋冰激凌》舞蹈为什么这么火?|观察

来源:哔哩哔哩 2023-06-07 13:26:33

中国银行女儿金金条价格今天多少一克(2023年06月07日)_焦点信息

来源:金投网 2023-06-07 12:39:25

银川灵武市2023城区一年级预报名入口在哪儿

来源:本地宝 2023-06-07 12:09:27

建发集团拟发行15亿元可续期公司债 用于偿还有息债务

来源:观点地产网 2023-06-07 11:16:37

即时焦点:艾滋病患者舌头是什么样的_艾滋病人的舌头有什么症状

来源:互联网 2023-06-07 09:47:01

据乌克兰国家通讯社6日报道,乌克兰央行当天公布数据称,5月乌克兰国际储备增长4%_独家焦点

来源:和讯刘海美 2023-06-07 09:17:22

视点!谁说当代年轻人不爱喝白酒,这3款颜值品质俱佳,很受欢迎!

来源:美食家庭季 2023-06-07 07:50:16

聊聊MAUI、WinUI3和WPF的优势及劣势

来源:博客园 2023-06-07 07:09:36

“吃顿钣的工夫收费500元”?特斯拉充电站这笔“超时占用费”该收吗 世界快讯

来源:亚设网 2023-06-07 06:45:24

上证i播报:美股三大指数低开

来源:上海证券报·中国证券网 2023-06-07 05:43:30

上证i播报:美股三大指数低开 百事通

来源:上海证券报·中国证券网 2023-06-07 05:45:12

北京南中轴国际文化科技园二期开工 推动大红门地区功能重塑-当前视讯

来源:中国新闻网 2023-06-07 05:19:49

Copyright   2015-2023 港澳知识产权网 版权所有  备案号:京ICP备2023022245号-31   联系邮箱:435 226 40 @qq.com