找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13604|回复: 25
打印 上一主题 下一主题
收起左侧

多功能医疗健康手表设计制作,可测量心率,体温 实现计步器 比赛作品

  [复制链接]
跳转到指定楼层
楼主
  这是我们暑假参加比赛的作品,含源码,实物图,原理图。请大家多多指教,一起学习本作品设计了一种可以同时检测心率和体温,并可以实现计步功能的手表,该装置包括单片机控制器、MLX90614红外测温模块、MMA7455计步模块、系统实时时钟、Pulse Sensor心率模块、OLED12864显示模块、nRF24L01无线通信模块和计算机控制软件、电源九部分。
利用MLX90614红外测温模块及Pulse Sensor心率模块采集到人的实时体温和心率数据,通过nRF24L01无线通信模块将采集到的数据发送到单片机控制器,经过STC89LE5A60S2微控制器进行数据处理,再将数据传到OLED12864显示,并通过数据线串口发送数据到电脑,然后通过LabVIEW软件对采集到的数据进一步的处理和分析。

  同时本作品还可以将计步模块的数据通过STC89LE5A60S2单片机送到OLED12864显示,实现计步功能。该作品可当作一个便携式家用医疗小系统,实时监测体温和心率,并可实现户外运动的计步功能,达到方便、快捷、可自由移动的目的。

实物图计步器功能:


下面是电路原理图:


下面是整机图:


多功能医疗健康手表设计的所有资料下载
(里面包含2个单片机源程序,分别实现了2个功能MLX90614程序-发送-耳温和手表显示):
程序.rar (253.42 KB, 下载次数: 235)



计步程序jibu.h文件:
  1. #include<reg51.h>
  2. #include <intrins.h>
  3. //#define uchar unsigned char
  4. //#define uint unsigned int

  5. void KeyScan1(void);

  6. sbit Key_jibu=P2^0;

  7. #define SET_TR2 AUXR |=  0x10
  8. #define CLR_TR2 AUXR &= ~0x10

  9. #define SET_ET2 IE2 |=  0x04
  10. #define CLR_ET2 IE2 &= ~0x04


  11. //nop指令个数定义
  12. #define nops() {_nop_();_nop_();_nop_();_nop_();_nop_();}
  13. bit start_flag=0;
  14. //端口定义,可修改
  15. sbit SDA1=P1^1; //IIC数据线定义 (可自行定义引脚)
  16. sbit SCL=P1^0; //IIC时钟线定义 (可自行定义引脚)

  17. //内部数据定义
  18. unsigned char IIC_ad_main; //器件从地址   
  19. unsigned char IIC_ad_sub;  //器件子地址            
  20. unsigned char *IIC_buf;    //发送接收数据缓冲区   
  21. unsigned char IIC_num;     //发送接收数据缓个数
  22. unsigned int step_num=0;
  23. unsigned char x1,y1,z1;
  24. int x,y,z;
  25. bit x_flag=0;  
  26. //bit z_flag=0;
  27. #define ack 1      //主应答
  28. #define no_ack 0   //从应答

  29. /*延时子程序,实现按键消抖功能*/
  30. void delayms( )
  31. { int i=10,j=110;
  32.   for(i=10;i>0;i--)
  33.     for(j=110;j>0;j--);
  34.   }


  35. void send232byte(unsigned char bytebuf)
  36. {
  37.         SBUF=bytebuf;
  38.         while(!TI);       
  39.     TI=0;          
  40. }

  41. void IIC_start(void){
  42.         SCL=0;
  43.         SDA1=1;
  44.         _nop_();
  45.         SCL=1;
  46.         nops();
  47.         SDA1=0;
  48.         nops();
  49.         SCL=0;
  50. }
  51. //************************************************
  52. //送停止位SDA=0->1
  53. void IIC_stop(void){
  54.         SCL=0;
  55.         _nop_();
  56.         SDA1=0;
  57.         _nop_();
  58.         SCL=1;
  59.         nops();
  60.         SDA1=1;
  61.         nops();
  62.         SCL=0;
  63. }
  64. //************************************************
  65. //主应答(包括ack:SDA=0和no_ack:SDA=0)
  66. void IIC_ack_main(bit ack_main){
  67.         SCL=0;
  68.         if(ack_main)SDA1=0; //ack主应答
  69.         else SDA1=1; //no_ack无需应答
  70.         nops();
  71.         SCL=1;
  72.         nops();
  73.         SCL=0;
  74. }
  75. //*************************************************
  76. //字节发送程序
  77. //发送c(可以是数据也可以是地址),送完后接收从应答
  78. //不考虑从应答
  79. void send_byte(unsigned char c)
  80. {
  81.         unsigned char i;
  82.         for(i=0;i<8;i++)
  83.         {
  84.                 SCL=0;
  85.                 if((c<<i) & 0x80)SDA1=1; //判断发送位
  86.                 else SDA1=0;
  87.                 _nop_();
  88.                 SCL=1;
  89.                 nops();
  90.                 SCL=0;
  91.        
  92.         nops();
  93.         SCL=0;
  94.         }
  95.         nops();
  96.         SDA1=1; //发送完8bit,释放总线准备接受应答位
  97.         _nop_();
  98.         SCL=1;
  99.         nops(); //sda上数据即是从应答位
  100.         SCL=0; //不考虑从应答但要控制好时序
  101. }
  102. //**************************************************
  103. //字节接收程序
  104. //接受器件传来的数据,此程序应配合主应答函数IIC-ack main()使用
  105. //return: uchar型1字节
  106. unsigned char read_byte(void){
  107. unsigned char i;
  108. unsigned char c;
  109.         c=0;
  110.         SCL=0;
  111.         _nop_();
  112.         SDA1=1; //置数据线为输入方式
  113.         for(i=0;i<8;i++){
  114.                 _nop_();
  115.                 SCL=0; //置时钟线为低,准备接收数据位
  116.                 nops();
  117.                 SCL=1; //置时钟线为高,使数据线上数据有效
  118.                 _nop_();
  119.                 c<<=1;
  120.                 if(SDA1)c+=1; //读数据位,将接收的数据存c
  121.         }
  122.         SCL=0;
  123.         return c;
  124. }
  125. //***************************************************
  126. //向无子地址器件发送单字节数据
  127. void send_to_byte(unsigned char ad_main,unsigned char c){
  128.         IIC_start();
  129.         send_byte(ad_main); //发送器件地址
  130.         send_byte(c); //发送数据c
  131.         IIC_stop();
  132. }
  133. //***************************************************
  134. //向有子地址器件发送多字节数据
  135. void send_to_nbyte(unsigned char ad_main,unsigned char ad_sub,unsigned char *buf,unsigned char num)
  136. {   unsigned char i;
  137.     IIC_start();
  138.         send_byte(ad_main); //发送器件地址
  139.         send_byte(ad_sub); //发送器件子地址
  140.         for(i=0;i<num;i++){
  141.                 send_byte(*buf); //发送数据buf
  142.                 buf++;
  143.         }
  144.         IIC_stop();
  145. }
  146. //***************************************************
  147. //从无子地址器件读单字节数据
  148. //function:器件地址,所读数据存在接收缓冲区当前字节
  149. void read_from_byte(unsigned char ad_main,unsigned char *buf){
  150.         IIC_start();
  151.         send_byte(ad_main); //发送器件
  152.         *buf=read_byte();
  153.         IIC_ack_main(no_ack); //无需应答<no_ack=0>
  154.         IIC_stop();
  155.         }
  156. //***************************************************
  157. //从有子地址器件读多个字节数据
  158. //function:
  159. void read_from_nbyte(unsigned char ad_main,unsigned char ad_sub,unsigned char *buf,unsigned char num){
  160.         unsigned char i;
  161.         IIC_start();
  162.         send_byte(ad_main);
  163.         send_byte(ad_sub);
  164.         for(i=0;i<num-1;i++){
  165.                 *buf=read_byte();
  166.                 IIC_ack_main(ack); //,主应答<ack=1>
  167.                 buf++;
  168.         }
  169.         *buf=read_byte;
  170.         buf++; //本次指针调整无意义,目的是操作后buf指向下一地址
  171.         IIC_ack_main(no_ack); //无需应答<no_ack=0>
  172.         IIC_stop();
  173. }


  174. unsigned char MMA7455_readbyte(unsigned char address)
  175. {
  176. unsigned char ret = 100;
  177.         IIC_start();                //启动
  178.         send_byte(0x3A);        //写入设备ID及写信号
  179.         send_byte(address);        //X地址
  180.         IIC_start();                //重新发送开始
  181.         send_byte(0x3B);        //写入设备ID及读信号
  182.         ret = read_byte();        //读取一字节
  183.         IIC_stop();

  184.         return ret;
  185. }

  186. //写入
  187. void MMA7455_writebyte(unsigned char address, unsigned char thedata)
  188. {
  189.         IIC_start();                //启动
  190.         send_byte(0x3A);        //写入设备ID及写信号
  191.         send_byte(address);        //X地址
  192.         send_byte(thedata);        //写入设备ID及读信号
  193.         IIC_stop();
  194. }

  195. //初始化
  196. //初始化为指定模式
  197. void MMA7455_init()
  198. {  //2g输出 测量模式
  199.         MMA7455_writebyte(0x16, 0x05);
  200.         //根据实际环境修改校验值
  201.         /*MMA7455_writebyte(0x10,0x10);//校正X值
  202.         MMA7455_writebyte(0x12,0x30);//校正Y值
  203.         MMA7455_writebyte(0x14,0x00);//校正Z值 */
  204. }
  205. /************************显示程序**********************************/
  206. void display()
  207. {
  208.   if (step_num/10000>0)         //万
  209.    OLED_ShowNum(0+8*5,4,step_num/10000,1,8*16);
  210.   else
  211.    OLED_ShowNum(0+8*5,4,0,1,8*16);
  212.       if (step_num/1000>0)        //千
  213.         OLED_ShowNum(0+8*6,4,step_num%10000/1000,1,8*16);
  214.      else
  215.         OLED_ShowNum(0+8*6,4,0,1,8*16);          
  216.                      if (step_num/100>0)        //百
  217.              OLED_ShowNum(0+8*7,4,step_num%1000/100,1,8*16);
  218.           else
  219.              OLED_ShowNum(0+8*7,4,0,1,8*16);
  220.                          if (step_num/10>0)        //十
  221.              OLED_ShowNum(0+8*8,4,step_num%100/10,1,8*16);
  222.           else
  223.              OLED_ShowNum(0+8*8,4,0,1,8*16);
  224.                          //个
  225.                         OLED_ShowNum(0+8*9,4,step_num%10,1,8*16);                    
  226. }

  227. /************读取重力信息**************/
  228. void Dat_dispose()
  229. {
  230.            if(start_flag)
  231.      {  x1=MMA7455_readbyte(0x06);
  232.             y1=MMA7455_readbyte(0x07);
  233.         z1=MMA7455_readbyte(0x08);
  234.           }
  235.            x=x1;
  236.          y=y1;
  237.          z=z1;
  238.          if((x&0x80)==0x00)
  239.          { x=(int)((x*196)/127); //转变成加速度值
  240.          }
  241.          else {  x=255-x;
  242.                  x=(int)((x*196)/127);//转变成加速度值
  243.                          x=(-1)*x;
  244.                    }
  245.          if((y&0x80)==0x00)
  246.          { y=(int)((y*196)/127); //转变成加速度值
  247.          }
  248.          else {  y=255-y;
  249.                  y=(int)((y*196)/127);//转变成加速度值
  250.                          y=(-1)*y;
  251.                    }
  252.          if((z&0x80)==0x00)
  253.          { z=(int)(((z-10)*196)/127); //转变成加速度值
  254.          }
  255.          else {  z=255-z;
  256.                  z=(int)(((z+12)*196)/127);//转变成加速度值
  257.                          z=(-1)*z;
  258.                    }

  259.          if(start_flag)
  260.           {
  261.            if(y>30&&x_flag==0&&z>70&&z<100)
  262.              {x_flag=1;
  263.                   step_num++;}
  264.                 else if(y<0)
  265.                 {  x_flag=0;}
  266.            }
  267.           else x_flag=0;
  268. }

复制代码


主程序:
  1. #include "REG51.h"
  2. #include "OLED.h"
  3. //#include "bmp.h"
  4. #include "DS1302.h"
  5. #include "NRF24L01.h"
  6. #include "key_deal.h"
  7. #include "MMA7455.h"


  8. #define false 0
  9. #define true 1
  10. #define FOSC 11059200L                //系统时钟
  11. #define BAUD 115200                                //波特率
  12. #define T0MS (65536-FOSC/12/500)                //500HZ in 12T MODE

  13. #define ADC_POWER 0x80                        //ADC POWER CONTROL BIT
  14. #define ADC_FLAG 0x10                        //ADC COMPLETE FLAG
  15. #define ADC_START 0x08;                        //ADC START CONTROL BIT
  16. #define ADC_SPEEDLL 0x00                //540 CLOCKS
  17. #define ADC_SPEEDL 0x20                        //360 CLOCKS
  18. #define ADC_SPEEDH 0x40                        //180 CLOCKS
  19. #define ADC_SPEEDHH 0x60                //90 CLOCKS
  20. #define ADC_MASK 0x01


  21. void ADC_init(unsigned char channel);
  22. void InitTimer0(void);
  23. unsigned char ReturnPulse(void);
  24. unsigned int analogRead(unsigned char channel);
  25. unsigned char PulsePin = 5;       // Pulse Sensor purple wire connected to analog pin 0(P1.0为传感器输入口)
  26. int fadeRate = 0;                 // used to fade LED on with PWM on fadePin
  27. unsigned char pp1;
  28. unsigned char pp0;
  29. unsigned char pp2;
  30. unsigned char pp3;
  31. unsigned int PL1=0;

  32. void UART_init(void);
  33. void Send(void);

  34. // these variables are volatile because they are used during the interrupt service routine!
  35. volatile unsigned int BPM;                   // used to hold the pulse rate
  36. volatile unsigned int Signal;                // holds the incoming raw data
  37. volatile unsigned int IBI = 600;             // holds the time between beats, must be seeded!
  38. volatile bit Pulse = false;     // true when pulse wave is high, false when it's low
  39. volatile bit QS = false;        // becomes true when Arduoino finds a beat.
  40. volatile int rate[10];                    // array to hold last ten IBI values
  41. volatile unsigned long sampleCounter = 0;          // used to determine pulse timing
  42. volatile unsigned long lastBeatTime = 0;           // used to find IBI
  43. volatile int Peak =512;                      // used to find peak in pulse wave, seeded
  44. volatile int Trough = 512;                     // used to find trough in pulse wave, seeded
  45. volatile int thresh = 512;                // used to find instant moment of heart beat, seeded
  46. volatile int amp = 100;                   // used to hold amplitude of pulse waveform, seeded
  47. volatile bit firstBeat = true;        // used to seed rate array so we startup with reasonable BPM
  48. volatile bit secondBeat = false;      // used to seed rate array so we startup with reasonable BPM
  49. static unsigned char order=0;
  50. unsigned char DisBuff[4]={0};

  51. void Int0_Init(void);
  52. //void Int1_Init(void);
  53. void Display_Init(void);


  54. static unsigned char data temp[10];
  55. bit data T0_FLAG=0;
  56. bit data key_flag;
  57. bit data key_flag1;
  58. unsigned int mode1 = 0;

  59. void delay(unsigned int n)
  60. {
  61.         unsigned int i,j;
  62.         for(i=0;i<n;i++)
  63.                 for(j=0;j<100;j++);
  64. }



  65. int main(void)
  66. {             //u8 t;
  67.                 //delay_init();                     //延时函数初始化          
  68.         //        NVIC_Configuration();          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级         LED_Init();                             //LED端口初始化
  69.                 OLED_Init();                        //初始化OLED
  70.                 Ds1302_Init();
  71.                 InitTimer0();
  72.                 Display_Init();
  73.                 ADC_init(PulsePin);
  74.                 //InitTimer1();
  75.                 Int0_Init();
  76.                 init_NRF24L01();
  77.                 SetRX_Mode();
  78.                 UART_init();
  79.                 //Int1_Init();       

  80.     while(1)
  81.         {
  82.              delay_ms(10);

  83.             Ds1302_Read_Time();
  84.            /*判断按键2是否启动测试*/
  85.                 if(0 == Key_Down)               
  86.             {
  87.                  delay_ms(100);
  88.                  if(0 == Key_Down)
  89.             {
  90.              mode1=mode1+1;
  91.                  }
  92.                  }
  93.                  
  94.                                 /*        测心率        */
  95.                 if(mode1==1)
  96.                 {
  97.                          OLED_ShowCHinese(0,0,0);  //心
  98.                 OLED_ShowCHinese(16,0,1); //率
  99.                 OLED_ShowString(32,0,":");
  100.                         OLED_ShowCHinese(0,2,2);  //体
  101.                 OLED_ShowCHinese(16,2,3);  //温
  102.                 OLED_ShowString(32,2,":");
  103.                                        
  104.                 if (QS == true&&PL1>1000)
  105.                 {                       // Quantified Self flag is true when arduino finds a heartbeat
  106.                                
  107.                 QS = false;
  108.                     delay(100);
  109.                         OLED_ShowNum(0+8*5,0,DisBuff[2],1,8*16);         //百位显示
  110.                         OLED_ShowNum(0+8*6,0,DisBuff[1],1,8*16);                                         //个十位显示
  111.                         OLED_ShowNum(0+8*7,0,DisBuff[0],1,8*16);
  112.                     OLED_ShowString(64,0,"bpm");
  113.                                  
  114.                                   ///判断是否异常
  115.                         if((DisBuff[1]*10+DisBuff[0])<100&&(DisBuff[1]*10+DisBuff[0])>=60&&DisBuff[2]!=1)          
  116.                         {
  117.                          OLED_ShowCHinese(0+8*12,0,24);         //正常
  118.                          OLED_ShowCHinese(0+8*14,0,26);
  119.                         }
  120.                         else if(DisBuff[1]==0&&DisBuff[2]==0&&DisBuff[0]==0)
  121.                         {        
  122.                            OLED_ShowCHinese(0+8*12,0,29);           //空
  123.                            OLED_ShowCHinese(0+8*14,0,29);
  124.                          }
  125.                         else
  126.                         {
  127.                          OLED_ShowCHinese(0+8*12,0,25);                //异常
  128.                          OLED_ShowCHinese(0+8*14,0,26);
  129.                         }               
  130.                          
  131.                          }
  132.           delay(138);                         //  take a break 19.6ms

  133.                   /*温度测量 */
  134.                    if(nRF24L01_RxPacket(temp)&&PL1>1000)  //接收温度
  135.                 {
  136.                         SetTX_Mode();
  137.                         delay(100);                                          
  138.                         OLED_ShowString(56,2,".");
  139.                         OLED_ShowCHinese(72,2,19);
  140.                     OLED_ShowNum(0+8*5,2,temp[3]%100/10,1,8*16);   //temp[3]存放十位
  141.                         OLED_ShowNum(0+8*6,2,temp[3]%10,1,8*16);             //个位
  142.                         OLED_ShowNum(0+8*8,2,temp[2]%100/10,1,8*16);                //temp[2]存放小数位
  143.                             if(temp[3]>=36&&temp[3]<38)
  144.                             {
  145.                               OLED_ShowCHinese(0+8*12,2,24);
  146.                               OLED_ShowCHinese(0+8*14,2,26);
  147.                              }
  148.                                 else
  149.                                    {
  150.                                       OLED_ShowCHinese(0+8*12,2,25);
  151.                                       OLED_ShowCHinese(0+8*14,2,26);
  152.                                            }  
  153.                         temp[4] = ReturnPulse();
  154.                         nRF24L01_TxPacket(temp);
  155.                         SetRX_Mode();
  156.                                
  157.            }   
  158.                 if(PL1>1000)
  159.                  {
  160.                 PL1=0;
  161.                 Send();
  162.                 }
  163.            }
  164.            if(mode1>=3)
  165.            {                                                                      
  166.                     mode1=0;
  167.                         OLED_ShowCHinese(0,0,29); //心
  168.                         OLED_ShowCHinese(16,0,29);        //率
  169.                         OLED_ShowCHinese(32,0,29);
  170.                         OLED_ShowCHinese(64,0,29);
  171.                         OLED_ShowCHinese(72,0,29);
  172.                         OLED_ShowCHinese(48,0,29);
  173.                         OLED_ShowCHinese(56,0,29);
  174.                         OLED_ShowCHinese(40,0,29);
  175.                         OLED_ShowCHinese(0+8*12,0,29);
  176.                         OLED_ShowCHinese(0+8*14,0,29);
  177.                        
  178.                                          
  179.                         OLED_ShowCHinese(0,2,29); //
  180.                         OLED_ShowCHinese(16,2,29);        //
  181.                         OLED_ShowCHinese(32,2,29);
  182.                         OLED_ShowCHinese(72,2,29);
  183.                         OLED_ShowCHinese(64,2,29);
  184.                         OLED_ShowCHinese(48,2,29);
  185.                         OLED_ShowCHinese(56,2,29);
  186.                         OLED_ShowCHinese(40,2,29);
  187.                         OLED_ShowCHinese(0+8*12,2,29);       
  188.                         OLED_ShowCHinese(0+8*14,2,29);
  189.           
  190.                 }
  191.                                      
  192.                                 OLED_ShowNum(0+8*10,4,time_buf1[6]/10,1,8*16);                  
  193.                                 OLED_ShowNum(0+8*11,4,time_buf1[6]%10,1,8*16);
  194.                                 if(0 == time_buf1[6])
  195.                                 {
  196.                             OLED_ShowNum(0+8*7,4,time_buf1[5]/10,1,8*16);
  197.                                 OLED_ShowNum(0+8*8,4,time_buf1[5]%10,1,8*16);
  198.                                         if(0 == time_buf1[5])
  199.                                         {
  200.                                             EA = 0;                                                //////
  201.                                                 OLED_ShowNum(0+8*4,4,time_buf1[4]/10,1,8*16);
  202.                                                 OLED_ShowNum(0+8*5,4,time_buf1[4]%10,1,8*16);
  203.                                                 if(0 == time_buf1[4])                                                 
  204.                                                 {                                       
  205.                                                         OLED_ShowNum(0+8*9,6,time_buf1[3]/10,1,8*16);
  206.                                                         OLED_ShowNum(0+8*10,6,time_buf1[3]%10,1,8*16);
  207.                                                         OLED_ShowCHinese(8*12,6,WEEK[time_buf1[7]]);
  208.                                                         if(0 == time_buf1[3])
  209.                                                         {
  210.                                                                         OLED_ShowNum(0+8*6,6,time_buf1[2]/10,1,8*16);
  211.                                                                         OLED_ShowNum(0+8*7,6,time_buf1[2]%10,1,8*16);
  212.                                                                 if(0 == time_buf1[2])
  213.                                                                 {
  214.                                                                         OLED_ShowNum(0+8*3,6,time_buf1[1]/10,1,8*16);
  215.                                                                         OLED_ShowNum(0+8*4,6,time_buf1[1]%10,1,8*16);
  216.                                                                 }               
  217.                                                         }
  218.                                                 }
  219.                                        
  220.                                                 InitTimer0();  //每隔一小时,重新初始化一次                               
  221.                                         }
  222.                   
  223.                                                 }
  224.                         /*        时间调整/计步按键判断        */
  225.                                                                 //按键判断
  226.                         if(key_flag == 1) //进入按键扫描
  227.                         {
  228.                                 KeyScan();
  229.                                 key_flag = 0;
  230.                                 mode1=0;
  231.                         }
  232.                                  
  233.                        
  234.                         }                 
  235.                         }
  236.                        
  237. …………余下代码请下载附件……
复制代码

评分

参与人数 7黑币 +133 收起 理由
nmhhjzl + 10 赞一个!
lwf1 + 8 很给力!
yangxiaochen + 5 很给力!
chenyan + 1
飞飞蓝鸟 + 5 共享资料的黑币奖励!
send + 4 绝世好帖!
admin + 100 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏21 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:138247 发表于 2017-3-8 13:43 | 只看该作者
不错哟。。。
回复

使用道具 举报

板凳
ID:151348 发表于 2017-3-8 21:11 | 只看该作者
还不错,功能也多
回复

使用道具 举报

地板
ID:170098 发表于 2017-3-12 15:20 | 只看该作者
多向你们学习
回复

使用道具 举报

5#
ID:170098 发表于 2017-3-12 15:27 | 只看该作者
如果你还喜欢健身,那么你就会很想做一个这东西了
回复

使用道具 举报

6#
ID:185155 发表于 2017-3-31 17:53 | 只看该作者
你好  请问你的心律仪在哪里买的 型号是?
回复

使用道具 举报

7#
ID:185155 发表于 2017-3-31 17:54 | 只看该作者
你好  请问你的心律仪是在哪里买的
回复

使用道具 举报

8#
ID:138931 发表于 2017-4-2 15:07 | 只看该作者
如果能加上心电监测就好了
回复

使用道具 举报

9#
ID:159521 发表于 2017-4-24 15:36 | 只看该作者
楼主,能发一下电路原理图吗?1327342081@qq.com,不胜感激
回复

使用道具 举报

10#
ID:194844 发表于 2017-5-4 19:06 | 只看该作者
如果能加上心电监测就好了
回复

使用道具 举报

11#
ID:285299 发表于 2018-3-2 10:58 | 只看该作者
厉害   很给力啊
回复

使用道具 举报

12#
ID:275610 发表于 2018-3-13 20:29 | 只看该作者
若能连接手机app显示心电图就太棒了
回复

使用道具 举报

13#
ID:248186 发表于 2018-3-21 16:55 | 只看该作者
厉害啊
回复

使用道具 举报

14#
ID:295949 发表于 2018-3-23 15:06 来自手机 | 只看该作者
要想链接手机app要怎么做啊
回复

使用道具 举报

15#
ID:82765 发表于 2018-3-23 18:41 | 只看该作者
DDbong 发表于 2018-3-23 15:06
要想链接手机app要怎么做啊

你好!如果手机APP显示,要用 WIFI 或 蓝牙模块来实现;
可以加我QQ,完成方案设计
回复

使用道具 举报

16#
ID:297504 发表于 2018-3-26 20:49 | 只看该作者
厉害厉害
回复

使用道具 举报

17#
ID:335251 发表于 2018-7-9 15:59 | 只看该作者
请问你的心律仪是在哪里买的
回复

使用道具 举报

18#
ID:380389 发表于 2018-7-29 10:06 来自手机 | 只看该作者
很有实用价值,感谢分享
回复

使用道具 举报

19#
ID:380519 发表于 2018-7-29 16:06 | 只看该作者
谢谢分享,感觉你这个肯定获奖了把。很不错
回复

使用道具 举报

20#
ID:370943 发表于 2018-9-18 14:59 | 只看该作者
谢谢分享,使用价值很高,很不错的设计
回复

使用道具 举报

21#
ID:403698 发表于 2018-9-28 17:24 | 只看该作者
cjjcjj1 发表于 2018-3-23 18:41
你好!如果手机APP显示,要用 WIFI 或 蓝牙模块来实现;
可以加我QQ,完成方案设计

有偿急需设计一款只有计步功能的,速联系我,电话:13930396692
回复

使用道具 举报

22#
ID:284488 发表于 2019-3-25 09:55 | 只看该作者
下載,學習了。
回复

使用道具 举报

23#
ID:503407 发表于 2019-4-7 23:54 | 只看该作者
谢谢分享,很不错的
回复

使用道具 举报

24#
ID:65956 发表于 2019-4-8 09:35 | 只看该作者
不错的想法,不错的设计,但体积和电池续航问题怎样呢?
回复

使用道具 举报

25#
ID:743099 发表于 2020-5-3 00:58 | 只看该作者
labview文件可以发吗
回复

使用道具 举报

26#
ID:961921 发表于 2021-8-31 14:45 | 只看该作者
感谢博主的干货
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表