首页>资讯 > 社会资讯 > 正文

基于STC89C52单片机+PulseSensor完成心率检测显示_世界快看

来源:1126626497    2023-06-08 06:47:31


(资料图片)

一、设计介绍

当前基于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完成心率检测显示_世界快看

当前基于STC89C52单片机和PCF8591、PulseSensor心率传感器、SSD1306OLE

国家级名单,咸宁入选!全省宣传系统仅两个

近日,共青团中央、中央宣传部、中央政法委、中央网信办、全国妇联、最

内蒙古粮食作物播种超亿亩 用节水农业打造“塞上粮仓”

央视网消息:据内蒙古农情调度,截至6月5日,内蒙古粮食作物播种超亿亩

辽沈地区会计人才大型专场招聘会在沈阳举办

为帮助企业更好地引进、储备和培育会计人才,促进会计人员舒心就业,近

当前资讯!丹东增殖放流中国对虾幼苗10亿尾

为进一步恢复中国对虾种群数量,改善黄海北部海域生态环境,加快海洋渔

辽宁大中型灌区现代化改造完成年度投资近八成 全球最新

6月7日,记者从省水利厅获悉,今年以来,我省加快推动大中型灌区现代化

世界播报:洪都拉斯总统将访华 中国外交部介绍此访安排及期待

此访是洪都拉斯总统首次对中国进行国事访问,两国元首将举行历史性会晤

即时焦点:吉尔吉斯斯坦安全部门拘留30余名组织骚乱嫌疑人

中新网阿斯塔纳6月7日电比什凯克消息:当地时间6日,据吉尔吉斯斯坦国

洪都拉斯总统将访华 中国外交部介绍此访安排及期待

此访是洪都拉斯总统首次对中国进行国事访问,两国元首将举行历史性会晤

加拿大野火烟雾飘向美国,自由女神像和帝国大厦被笼罩-全球新视野

中新网6月7日电据美国有线电视新闻网(CNN)报道,当地时间6日,受加拿大

今热点:美媒称布林肯将在几周内访华,中方能否证实?外交部回应

有记者提问称,据多家美国媒体报道,美国国务卿布林肯将在几周内访华,

全球百事通!北向资金净买入25.1亿元 交易活跃度下降

6月7日,截至A股收盘,北向资金合计净买入25 10亿元,其中沪股通净买入

快播:延长PoE距离:解锁以太网供电的最大范围

以太网供电(PoE)彻底改变了我们为网络设备供电和连接的方式。使用PoE,

世界热门:即将发布全球车型,哪吒汽车参加9月慕尼黑车展

6月7日,买车网Buycar获悉,哪吒汽车将参加9月开幕的德国慕尼黑车展,

【天天时快讯】您敢选电车吗?撞收费站起火的案例带给我们哪些警示

日前南方发生一辆电车撞收费站起火致死案例,您还敢选电车吗?作为普通

内蒙古粮食作物播种超亿亩 用节水农业打造“塞上粮仓” 今日热议

央视网消息:据内蒙古农情调度,截至6月5日,内蒙古粮食作物播种超亿亩

非学科类校外培训市场价格纳入监测预警 严查价格违规行为 今日快讯

央视网消息:记者从教育部了解到,为深化非学科类培训治理,教育部委托

散文丨水运宪:我的峡谷我的村-天天即时看

最近一次去乌龙山大峡谷感觉特别奇妙。多云的日子避开了阳光暴晒,体肤

“鼠头罗生门”持续发酵:网友不买账校方通报,之前出过类似事件 全球微资讯

近日,在江西一高校官微6月3日通报“食堂吃出老鼠头”事件后,由于官方

SQL Server 补丁理解及安装 内附完整版下载地址及sp1/2/3补丁

启动安装程序下载sqlserver2014,双击startup exe进行安装系统配置检查

全球热门:3辆全新特斯拉超跑竟被遗弃中国码头13年!原车主身份不简单

13年前的特斯拉超跑,你见过吗?最近,在中国青岛一个港口的集装箱里,

天天滚动:受贿1992615.31元!陈克祥一审获刑三年半!

经审理查明,被告人陈克祥在先后担任岳阳市畜牧水产局局长、岳阳市城市

雷雨大风+冰雹+龙卷!黑龙江省发布龙卷预警|环球通讯

龙卷预警黑龙江省气象台2023年6月7日14时20分发布龙卷预警:预计未来2

洛川县147辆巡游出租车免费送考 当前速读

6月6日,由洛川县交通运输局、洛川县道路运输服务中心组织,辖区内保兴

创新“三问”工作法 激发人才工作“调研力” 动态

新华网北京6月7日电(刘觅觅)2023年以来,山东曹县深入贯彻落实《关于

天天观察:洛川农村商业银行违反反洗钱管理规定被罚20万元

近日,中国人民银行西安分行对陕西洛川农村商业银行股份有限公司发布行

AI相关职位需求量爆发性增长,岗位薪资最高达50万一年|要闻速递

根据猎聘大数据研究院发布的《2023Q1就业趋势大数据报告》,从新发职位

北京住建委:已购共有产权住房家庭取得不动产权证书未满5年的,不允许转让房屋产权份额-天天热推荐

证券时报网讯,北京住建委发布关于对《关于加强已购共有产权住房管理有

2012年以来首次下跌!英国5月Halifax房价同比下降1% 前沿热点

智通财经APP获悉,根据抵押贷款机构Halifax的数据,英国房价出现了自20

世界报道:加拿大野火烟雾飘向美国,自由女神像和帝国大厦被笼罩

中新网6月7日电据美国有线电视新闻网(CNN)报道,当地时间6日,受加拿大

综合资讯

+更多

热点资讯

+更多
股票账户的钱会不会突然消失?股票钱什么时候能转出?
股票账户的钱会不会突然消失?股票账户钱不会无缘无故消失,股票账户钱其实是存在银行而非券商,银行肯定是正规的地方,只要存的钱在里面就 [详细]

Copyright @ 2008-2020  www.43710.com   All Right Reserved Powered by 财经情报网 版权所有

财经情报网   联系邮箱:562 66 29@qq.com

网站备案:沪ICP备2020036824号-12