资讯详情

基于STM32的心电体温监测系统

摘 要

随着人们生活水平的提高和生活节奏的加快,心血管疾病的发病率迅速上升,已成为威胁人类健康的主要因素之一。心电图是治疗此类疾病的主要依据。它具有诊断可靠、方法简单、对患者无害的优点,在现代医学中变得越来越重要。

本系统基于STM32单片机综合利用ADC与DAC模拟装换、LCD基于显示和内部温度传感的技术设计了一种STM32心电体温监测系统。通过电极和温度传感器模块,可以实时监测心率和周围温度状态,并实时转换为波形图LCD屏幕上显示

结果表明,本文设计的系统心电监测和体度测量处理精度达到98% ,为临床诊断提供了重要依据。

关键词:STM32单片机;LCD显示; 心电测量;温度传感;信号处理;模数转换;

Abstract

With the improvement of people's living standards and the acceleration of the pace of life, the incidence rate of cardiovascular disease has risen rapidly, and has become one of the main factors threatening human health. ECG is the main basis for the treatment of such diseases. It has the advantages of reliable diagnosis, simple method and no damage to patients. It has become more and more important in modern medicine.

The system is based on STM32 single chip microcomputer, and a ECG temperature monitoring system based on STM32 is designed by comprehensively using ADC and DAC simulation replacement, LCD display, internal temperature sensing and other technologies. Cooperating with the electrode and temperature sensor module, it can monitor the heart rate and ambient temperature in real time, and convert it into a waveform diagram for real-time display on the LCD screen

The results show that the accuracy of ECG monitoring and temperature measurement is 98%, which provides an important basis for clinical diagnosis.

Key words:STM32 single chip microcomputer; LCD display; ECG measurement; Temperature sensing; Signal processing; Analog to digital conversion;

目 录

6

6

6

1.2.1系统所需的元件 6

1.2.2系统电路搭建图 10

1.2.2系统所需的软件 10

10

11

 LCD 11

  LCD 11

12

  12

  15

  17

12

  12

  17

20

34

1 绪论

1.1 研究背景与意义

随着人们生活水平的提高、生活节奏的加快,心血管疾病的发病率迅速上升,已成为威胁人类身体健康的主 要因素之一。而心电图则是治疗此类疾病的主要依据,具有诊断可靠,方法简便,对病人无损害的优点,在现代医学中,变得越来越重要。常规心电图是病人在静卧情况下由心电图仪记录的心电活动,历时仅为几s~1 m,只能获取少量有关心脏状态的信息,所以在有限时间内即使发生心率失常,被发现的概率也是很低的。因此有必要通过相应的监护装置对患者进行长时间的实时监护,记录患者的心电数据。又由于心脏病的发生具有突发性的特点,患者不可能长时间地静卧在医院,但又需实时得到医护人员的监护,所以研发相应的便携式心电监测产品就显得更加重要。

体温作为生命体征的五大要素之一,在临床上监测到的患者实时的体温变化与每日平均体温读数,对于患者的病情诊断与后续的治疗,起到的作用明显有越来越大的趋势。体温也是人类生命健康与否的最直接明显的标志之一。这也就是为什么体温监测是住院患者每天必须监测记录的数据之一的原因。体温监测可最直接的分为两种:身体表面体温监测和体腔内核心体温监测。身体表面体温(环境温度)通常指的是腋窝或额头的温度,虽然直接体现了人体的表显温度,但是它会受到外部温度的影响。室内温度的高低,体表外包裹衣物的数量,等物理方面的升降温都能直接影响到人体表面温度的度数。体腔体温(身体核心体温)通常指的是食道、直肠和膀胱内的温度。它是相对稳定和均匀的,受外部温度影响较小。但由于是人体体腔内部温度,测量的难易程度相比去监测人体的表面体温而言,确实是有一些难度的。人体的正常体温范围大致为以下内容:

(1)使用皮肤体温探头监测记录到腋窝的平均正常温度,其范围是36.2℃-37.3℃。

(2)使用食道体温探头监测记录到食道的平均正常温度,其范围为36.8℃-37℃。

(3)使用耳道体温探头监测记录到的耳道平均正常温度,其范围为36.5℃-37.5℃。

(4)使用测温导尿管监测记录到到膀胱内平均正常温度,其范围为36.8℃-37.7℃。

(5)使用通用型体温探头监测记录到直肠的平均正常温度,其范围为36.9℃-37.9℃。

     对于住院患者、ICU患者、麻醉手术中患者与围手术期内患者而言,体温的监测记录都是重要的。在患者的体温变化超过正常范围时,医护人员越早的发现变化,就能越早的去采取适当的措施。这就是体温监测临床意义。

1.2 基于STM32的心电体温监测系统

本系统可实时监测病人心率与体温,主要所需元器件有心电监测模块、温度传感器模块、杜邦线若干、导联线若干、STM32单片机、下载线、LCD屏幕以及电极等,如下图所示:

 

图1.1 心电监测模块

 

图1.2 温度传感器模块

 

图1.3 杜邦线若干

 

图1.4 导联线若干

 

图1.5 STM32单片机+下载线+LCD显示屏

本系统需根据代码搭建电路,具体实物搭建图如下:

 

图1.6 系统电路搭建图

Keil C51是美国Keil Software公司出品的51系列兼容STM32单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统,其方便易用的集成环境、强大的软件仿真调试工具使我们的开发工作事半功倍。

Flymcu仿真软件官方版是一款功能强大的STM32最新串口烧写器,Flymcu仿真软件官方版连接上通讯所使用的串口,能够很方便地烧写程序,使用eagleIAP通过IAP烧录应用程序,用ISP烧录IAP引导程序和应用程序。

本系统基于STM32单片机开发,利用Keil5以及FlyMcu软件进行程序的编程与烧录。

 

图1.7 Keil5软件界面图

 

图1.8 Flymcu软件界面图

1.3 小组分工

本小组成员一共有3人,且各自有擅长的方面,对于本系统的开发研究均作出了突出的贡献。具体分工如下表所示:

表 1-1 成员分工

成员

负责工作

杨宁

软件编写、软件调试、项目报告修改

曹奎

心电监测、项目报告编写

崔灏

温度监测、项目报告编写

2  LCD模块

2.1 LCD模块介绍

LCD模块是LCM(LCDModule)即LCD显示模组,是指将玻璃和LCD驱动器集成到一起的LCD显示产品,它提供用户一个标准的LCD显示驱动接口(有4位、8位、VGA等不同类型),用户按照接口要求进行操作来控制LCD正确显示。

 

图2.1 LCD模块实物图

LCM相比较玻璃是一种更高集成度的LCD产品,对小尺寸LCD显示,LCM可以比较方便的与各种微控制器(比如单片机)连接;但是,对于大尺寸或彩色的LCD显示,一般会占用控制系统相当大部分的资源或根本无法实现控制,比如320×240 256色的彩色LCM,以20场/秒(即1秒钟全屏刷新显示20次)显示,一秒钟仅传输的数据量就高达:320×240×8×20=11.71875Mb或1.465MB,如果让标准MCS51系列单片机处理,假设重复使用MOVX指令连续传输这些数据,考虑地址计算时间,至少需要接421.875MHz的时钟才能完成数据的传输,可见处理数据量的巨大。

2.2  LCD界面设计

为了在LCD上能完整的显示心电、体温两个曲线、心电及体温值以及组员三人的姓名,所以必须要对LCD屏幕进行区域划分。具体代码如下:

LCD_DrawLine(10, 0, 319, 0);

LCD_DrawLine(10, 50, 319, 50);

LCD_DrawLine(10,150,319,150);

LCD_DrawLine(10,229,319,229);

LCD_DrawLine(10,0,10,229);

LCD_DrawLine(319,0,319,229);

LCD_ShowString(15, 10, 90, 50, 16, "HeartRate:");

LCD_ShowString(200, 10, 90, 50, 16, "Temp:");

LCD_ShowString(20,30 , 200, 50, 16, "YangNing CaoKui CuiHao");

LCD_ShowString(15,60 , 90, 50, 16, "ECG:");

LCD_ShowString(15,160, 90, 50, 16, "Temp:");

效果图如下:

 

图2.2  LCD模块界面图

3 心电监测模块

3.1 心电监测模块介绍

AD8232是全集成式单导联ECG前端,其中集成了仪表放大器、增益放大器、基准电压缓冲、驱动导联前端基准缓冲、右腿驱动电路、关断功能,以及用户可选的(交流或直流)导联脱落检测电路。AD8232解决了从电极到处理器之间的很多问题,整个外围电路简单,只需要几个电阻电容器件即可完成前端电路设计,利用ADI提供的计算公式就可以轻松恰当设置这些电阻电容的参数值。选用AD8232的原因是单芯片的模拟信号链前端芯片大大简化了系统设计。

前端采集模块中的AD8232的功能在于单通道采集使用者的心电(ECG)信号,经过芯片和外围电路的滤波处理和放大处理,并向stm32单片机的ADC输入输出电压。由于本应用中利用不锈钢电极在双手处测量心率信号。用户手臂和上身运动会产生较大的运动伪像,并且长引线使得系统非常容易受到共模干扰影响。需要具有极窄的带通特性,以便将心脏信号与干扰信号区分开来。,AD8232配置为使用一个0.5 Hz双极点高通滤波器,后接一个双极点、40 Hz、低通滤波器。为实现最佳共模抑制性能,需要驱动第三个电极。除40 Hz滤波功能以外,运算放大器级的增益还配置为11,因此系统总增益为1100。为优化系统的动态范围,增益电平可供调节,具体取决于输入信号幅度(可能因电极位置而异)和ADC输入范围。

 

图3.1 心电监测模块原理图

前端采集模块涉及到模拟电路和数字电路,所以电源需要设计隔离。由于ECG电信号是毫伏级电路,所以电路布线设计和电源滤波电路需要严格稳定的设计。由于stm32单片机的工作电压在3.3 V,为了简化电路,ADC的参考电压,和AD8232的输出范围,我们都统一设计为0.0 ~ 3.3 V。由于电路采用5 V的USB供电系统,所以我们采用了AMS1117降压电路。同时增加0.1UF的电容作为电压纹波的滤波电路,提高电源电路的稳定性。

 

图3.2 心电监测模块3D效果图

3.2 心电监测模数转换

ADC0832 是美国国家半导体公司生产的一种8 位分辨率、双通道A/D转换芯片。由于它体积小,兼容性,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。学习并使用ADC0832 可是使我们了解A/D转换器的原理,有助于我们单片机技术水平的提高。

ADC0832 特点:8位分辨率; 双通道A/D转换; 输入输出电平与TTL/CMOS相兼容;5V电源供电时输入电压在0~5V之间; 工作频率为250KHZ,转换时间为32μS;

(1)一般功耗仅为15mW;

(2) 8P、14P—DIP(双列直插)、PICC 多种封装;

(3) 商用级芯片温宽为0°C +70°C,工业级芯片温宽为40°C to +85°C;

芯片接口说明:

(1) CS_ 片选使能,低电平芯片使能。

(2) CH0 模拟输入通道0,或作为IN+/-使用。

(3) CH1 模拟输入通道1,或作为IN+/-使用。

(4) GND 芯片参考0 电位(地)。

(5) DI 数据信号输入,选择通道控制。

(6) DO 数据信号输出,转换数据输出。

(7) CLK 芯片时钟输入。

(8) Vcc/REF 电源输入及参考电压输入(复用)。

ADC0832 为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。通过DI 数据输入端,可以轻易的实现通道功能的选择。

正常情况下ADC0832 与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。但由于DO端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO和DI 并联在一根数据线上使用。当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK 和DO/DI 的电平可任意。当要进行A/D转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK 输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。在第1 个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号。在第2、3个脉冲下沉之前DI端应输入2 位数据用于选择通道功能,其功能项见官方资料。

如资料 所示,当此2 位数据为“1”、“0”时,只对CH0 进行单通道转换。当2位数据为“1”、“1”时,只对CH1进行单通道转换。当2 位数据为“0”、“0”时,将CH0作为正输入端IN+,CH1作为负输入端IN-进行输入。当2 位数据为“0”、“1”时,将CH0作为负输入端IN-,CH1 作为正输入端IN+进行输入。到第3 个脉冲的下沉之后DI端的输入电平就失去输入作用,此后DO/DI端则开始利用数据输出DO进行转换数据的读取。从第4个脉冲下沉开始由DO端输出转换数据最高位DATA7,随后每一个脉冲下沉DO端输出下一位数据。直到第11个脉冲时发出最低位数据DATA0,一个字节的数据输出完成。也正是从此位开始输出下一个相反字节的数据,即从第11个字节的下沉输出DATA0。随后输出8位数据,到第19 个脉冲时数据输出完成,也标志着一次A/D转换的结束。最后将CS置高电平禁用芯片,直接将转换后的数据进行处理就可以了。

为单通道模拟信号输入时ADC0832的输入电压是0~5V且8位分辨率时的电压精度为19.53mV。如果作为由IN+与IN-输入的输入时,可是将电压值设定在某一个较大范围之内,从而提高转换的宽度。但值得注意的是,在进行IN+与IN-的输入时,如果IN-的电压大于IN+的电压则转换后的数据结果始终为00H。

ADC_ConvertedValueLocal = (float)ADC_ConvertedValue /4000* 3.3; // 读取转换的AD值

心电监测部分代码如下:

//经滤波AD值

// temp = Sin_w(); //sin函数

temp = ADC_ConvertedValueLocal; //AD采样值

temp = IIR_Filter(LOW_PASS, temp); //低通

// temp = IIR_Filter(HIGH_PASS, temp); //高通

temp = IIR_Filter(NOTCH, temp); //50Hz陷波

y = Voltage2Pos(temp);

// y = Voltage2Pos(Sin_w(x - 11));

// y = Voltage2Pos(IIR_Filter(LOW_PASS, Sin_w(x - 11)));

/***********计算心率***********/

heartRate = FreqCalc(x, y);

// heartRate = 120;

if ((heartRate != 0) && (heartRate < 10000))

LCD_ShowxNum(100, 5, heartRate, 3, 16, 0);

3.3心电波形图显示

心电波形图显示代码如下:

oldValue[x] = y;

LCD_DrawPoint(x, y); //画点

if (x > 15&& x < 311) //画点间线

{

LCD_DrawLine(x-1, oldValue[x-1], x, oldValue[x]);

LCD_DrawLine(x-1, oldValue[x-1]+100, x, oldValue[x]+100);

}

x++; //下一个点

if (x > 310) //屏幕满了

{

for (i =15; i <=311; i++) //清除旧曲线

{

POINT_COLOR = BLACK;

LCD_DrawPoint(i, oldValue[i]);

if (i >15 && i < 311)

LCD_DrawLine(i-1, oldValue[i-1], i, oldValue[i]);

LCD_DrawLine(i-1, oldValue[i-1]+100, i, oldValue[i]+100);

POINT_COLOR = GREEN;

}

LCD_DrawLine(10, 0, 319, 0);

LCD_DrawLine(10, 50, 319, 50);

LCD_DrawLine(10,150,319,150);

LCD_DrawLine(10,229,319,229);

LCD_DrawLine(10,0,10,229);

LCD_DrawLine(319,0,319,229);

LCD_ShowString(15, 10, 90, 50, 16, "HeartRate:");

LCD_ShowString(200, 10, 90, 50, 16, "Temp:");

LCD_ShowString(20,30 , 200, 50, 16, "YangNing CaoKui CuiHao");

LCD_ShowString(15,60 , 90, 50, 16, "ECG:");

LCD_ShowString(15,160, 90, 50, 16, "Temp:");

x =15;//显示

4 体温监测模块

4.1 体温检测模块介绍

LM35 是由National Semiconductor 所生产的温度传感器,其输出电压与摄氏温标呈线性关系,转换公式如式,0 时输出为0V,每升高1℃,输出电压增加10mV。

LM35 有多种不同封装型式,外观如图所示。在常温下,LM35 不需要额外的校准处理即可达到 ±1/4℃的准确率。 其电源供应模式有单电源与正负双电源两种,其接脚如图所示,正负双电源的供电模式可提供负温度的量测;两种接法的静止电流-温度关系如图 所示,在静止温度中自热效应低(0.08℃),单电源模式在25℃下静止电流约50μA,工作电压较宽,可在4—20V的供电电压范围内正常工作非常省电。

 

单电源模式 正负双电源模式

供电电压35V到-0.2V

输出电压6V至-1.0V

输出电流10mA

指定工作温度范围

LM35A -55℃ to +150℃

LM35C, LM35CA -40℃ to +110℃

LM35D 0℃ to +100℃

4.1 体温波形图显示

体温波形图显示代码如下:

oldValue[x] = y;

LCD_DrawPoint(x, y); //画点

if (x > 15&& x < 311) //画点间线

{

LCD_DrawLine(x-1, oldValue[x-1], x, oldValue[x]);

LCD_DrawLine(x-1, oldValue[x-1]+100, x, oldValue[x]+100);

}

x++; //下一个点

if (x > 310) //屏幕满了

{

for (i =15; i <=311; i++) //清除旧曲线

{

POINT_COLOR = BLACK;

LCD_DrawPoint(i, oldValue[i]);

if (i >15 && i < 311)

LCD_DrawLine(i-1, oldValue[i-1], i, oldValue[i]);

   LCD_DrawLine(i-1, oldValue[i-1]+100, i, oldValue[i]+100);

POINT_COLOR = GREEN;

}

LCD_DrawLine(10, 0, 319, 0);

LCD_DrawLine(10, 50, 319, 50);

LCD_DrawLine(10,150,319,150);

LCD_DrawLine(10,229,319,229);

LCD_DrawLine(10,0,10,229);

LCD_DrawLine(319,0,319,229);

LCD_ShowString(15, 10, 90, 50, 16, "HeartRate:");

LCD_ShowString(200, 10, 90, 50, 16, "Temp:");

LCD_ShowString(20,30 , 200, 50, 16, "YangNing CaoKui CuiHao");

LCD_ShowString(15,60 , 90, 50, 16, "ECG:");

LCD_ShowString(15,160, 90, 50, 16, "Temp:");

x =15;//显示

5 心电体温阈值设定

根据如下代码设定阈值,进行滤波平滑操作:

int Voltage2Pos(float voltage)

{

if (voltage <  0)

voltage = 0;

else if (voltage > 3.3)

voltage = 3.3;

return (int)(150 - voltage / 3.3 * 100);

}

float FreqCalc(int x, int y)

{

static unsigned char flag = 0, count = 0, ready = 0;

static int foreX = 0;

int thresY = 0;

thresY = Voltage2Pos(threshold); //阈值电压

if (y > thresY)

{

ready = 1;

}

if (ready == 1)

{

if (y < thresY)

{

ready = 0;

flag = 1;

}

}

if (flag)

{

count++;

flag = 0;

if (count == 1)

{

foreX = x;

}

else if (count == 2)

{

count = 0;

if (x > foreX)

return (float)(200.0 / (x - foreX + 1)) * 60;

}

}

return 0;

}

附录

#include "stm32f10x.h"

#include "led.h"

#include "lcd.h"

#include "timer.h"

#include "adc.h"

#include "IIR_Filter.h"

#include <math.h>

#define FILTER_N 10

#define threshold   2.7

// ADC1转换的电压值通过MDA方式传到SRAM

extern __IO uint16_t ADC_ConvertedValue;

// 局部变量,用于保存转换计算后的电压值  

float ADC_ConvertedValueLocal;

int heartRate = 0;

int Voltage2Pos(float voltage)

{

if (voltage <  0)

voltage = 0;

else if (voltage > 3.3)

voltage = 3.3;

return (int)(150 - voltage / 3.3 * 100);

}

float FreqCalc(int x, int y)

{

static unsigned char flag = 0, count = 0, ready = 0;

static int foreX = 0;

int thresY = 0;

thresY = Voltage2Pos(threshold); //阈值电压

if (y > thresY)

{

ready = 1;

}

if (ready == 1)

{

if (y < thresY)

{

ready = 0;

flag = 1;

}

}

if (flag)

{

count++;

flag = 0;

if (count == 1)

{

foreX = x;

}

else if (count == 2)

{

count = 0;

if (x > foreX)

return (float)(200.0 / (x - foreX + 1)) * 60;

}

}

return 0;

}

void DrawWave(void)

{

int i = 0;

float temp = 0;

static int x = 11, y = 0; //x,y轴像素

static int oldValue[311] = {0}; //存储一屏曲线

/************计算y坐标***********/

//直接读取AD值

ADC_ConvertedValueLocal = (float)ADC_ConvertedValue /4000* 3.3; // 读取转换的AD值

//经滤波AD值

// temp = Sin_w(); //sin函数

temp = ADC_ConvertedValueLocal; //AD采样值

temp = IIR_Filter(LOW_PASS, temp); //低通

// temp = IIR_Filter(HIGH_PASS, temp); //高通

temp = IIR_Filter(NOTCH, temp); //50Hz陷波

y = Voltage2Pos(temp);

// y = Voltage2Pos(Sin_w(x - 11));

// y = Voltage2Pos(IIR_Filter(LOW_PASS, Sin_w(x - 11)));

/******************************/

/***********计算心率***********/

heartRate = FreqCalc(x, y);

// heartRate = 120;

if ((heartRate != 0) && (heartRate < 10000))

LCD_ShowxNum(100, 5, heartRate, 3, 16, 0);

/***********显示曲线***********/

oldValue[x] = y;

LCD_DrawPoint(x, y); //画点

if (x > 15&& x < 311) //画点间线

{

LCD_DrawLine(x-1, oldValue[x-1], x, oldValue[x]);

LCD_DrawLine(x-1, oldValue[x-1]+100, x, oldValue[x]+100);

}

x++; //下一个点

if (x > 310) //屏幕满了

{

for (i =15; i <=311; i++) //清除旧曲线

{

POINT_COLOR = BLACK;

LCD_DrawPoint(i, oldValue[i]);

if (i >15 && i < 311)

LCD_DrawLine(i-1, oldValue[i-1], i, oldValue[i]);

LCD_DrawLine(i-1, oldValue[i-1]+100, i, oldValue[i]+100);

POINT_COLOR = GREEN;

}

LCD_DrawLine(10, 0, 319, 0);

LCD_DrawLine(10, 50, 319, 50);

LCD_DrawLine(10,150,319,150);

LCD_DrawLine(10,229,319,229);

LCD_DrawLine(10,0,10,229);

LCD_DrawLine(319,0,319,229);

LCD_ShowString(15, 10, 90, 50, 16, "HeartRate:");

LCD_ShowString(200, 10, 90, 50, 16, "Temp:");

LCD_ShowString(20,30 , 200, 50, 16, "YangNing CaoKui CuiHao");

LCD_ShowString(15,60 , 90, 50, 16, "ECG:");

LCD_ShowString(15,160, 90, 50, 16, "Temp:");

x =15;//显示

}

}

int main(void)

{

LED_Init();

ADC1_Init();

LCD_Init();

//画坐标轴 显示区域:x->11-310 y->223-24

LCD_Clear(BLACK);

POINT_COLOR = WHITE;

//LCD_DrawLine(10, 0, 10, 224);

//LCD_DrawLine(10, 224, 311, 224);

//LCD_ShowChar(3, 218, 'O', 12, 1);

LCD_DrawLine(10, 0, 319, 0);

LCD_DrawLine(10, 50, 319, 50);

LCD_DrawLine(10,150,319,150);

LCD_DrawLine(10,229,319,229);

LCD_DrawLine(10,0,10,229);

LCD_DrawLine(319,0,319,229);

BACK_COLOR = BLACK;

POINT_COLOR = RED;

//LCD_ShowString(0, 0, 90, 50, 16, "HeartRate:");

LCD_ShowString(15, 10, 90, 50, 16, "HeartRate:");

LCD_ShowString(200, 10, 90, 50, 16, "Temp:");

LCD_ShowString(20,30 , 200, 50, 16, "YangNing CuiKui CuiHao");

LCD_ShowString(15,60 , 90, 50, 16, "ECG:");

LCD_ShowString(15,160, 90, 50, 16, "Temp:");

POINT_COLOR = GREEN;

TIM2_Base_Init(50); //10Khz的计数频率,计数到50为5ms, 200Hz

while (1);

}

void TIM2_IRQHandler(void)   //TIM2 5ms定时中断

{

static int count = 0;

if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源

{

   TIM_ClearITPendingBit(TIM2, TIM_IT_Update);  //清除TIMx的中断待处理位:TIM 中断源

DrawWave();

count++;

if (count == 90)

{

LED2_REV;

count = 0;

}

}

}

标签: cs系列速度传感器额头传感器fly传感器传感器重复性的正负单数字控制电位器single高精度的体温传感器模块

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台