久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: STM32和uCGUI實現人體心電采集波形顯示(開源原理圖和工程文件 [打印本頁]

作者: 51黑ww    時間: 2016-4-11 22:27
標題: STM32和uCGUI實現人體心電采集波形顯示(開源原理圖和工程文件
本設計主要實現了以STM32為核心的人體心電采集系統軟硬件的設計。軟件設計過程是在STM32上移植的uCGUI做圖形界面,并如實顯示采集到的心電波形信號,有SD卡存儲和USB數據傳輸功能,歡迎大家互相交流學習,有做不到的地方還需各路高手指導修正。

1、整體效果圖




2、ucgui


3、界面顯示


4、心電電路板和STM32


5、示波器顯示心電波形


6、STM32顯示心電波形


部分源碼(完整版本請下載附件):
  1. #include "..APPincludes.h"


  2. // A/D 通道選擇命令字和工作寄存器
  3. #define        CHX         0x90         //通道X+的選擇控制字        
  4. #define        CHY         0xd0        //通道Y+的選擇控制字

  5. //#define        CHX         0xd0         //通道X+的選擇控制字        
  6. //#define        CHY         0x90        //通道Y+的選擇控制字

  7. MATRIX  Matrix;//為了避免重復校準,可以保存該校準值

  8. //====================================================================================
  9. static void Delayus( int k)
  10. {
  11. int j;
  12.    
  13.     for(j=k;j > 0;j--);   
  14. }

  15. //====================================================================================
  16. void TP_Init(void)
  17. {
  18.   //PB10, PD9, PD10   CS,SI,CLK
  19.   GPIO_InitTypeDef GPIO_InitStructure;
  20.   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_10;
  21.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                 //推挽輸出
  22.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  23.   GPIO_Init(GPIOB, &GPIO_InitStructure);

  24.   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_9|GPIO_Pin_10 ;  
  25.   GPIO_Init(GPIOD, &GPIO_InitStructure);

  26.   //PENIRQ, SO        
  27.   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_11;
  28.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
  29.   GPIO_Init(GPIOB, &GPIO_InitStructure);

  30.   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_15;
  31.   GPIO_Init(GPIOE, &GPIO_InitStructure);
  32.   //start_touch();
  33. }

  34. void start_touch()   
  35. {           
  36.         TP_DCLK_L();   
  37.         TP_CS_H();         
  38.         TP_DIN_H();  
  39.         TP_DCLK_H();   
  40.         TP_CS_L();         
  41. }

  42. //====================================================================================
  43. static void WR_CMD (u8 cmd)
  44. {
  45. //u8 buf;
  46.          
  47. }


  48. //====================================================================================
  49. static u16 RD_AD(void)
  50. {
  51.   u16 buf=0;
  52. u8 i;
  53.    
  54.     TP_DIN_L(); //TP_DIN(0);
  55.     TP_DCLK_H(); //TP_DCLK(1);
  56.     for(i=0; i<12; i++)
  57.     {        buf <<= 1;
  58.         
  59.         TP_DCLK_H(); //TP_DCLK(0);         
  60.         Delayus(5);
  61.         TP_DCLK_L(); //TP_DCLK(1);
  62.         
  63.         if(TP_DOUT)        buf |= 1;
  64.         
  65.         Delayus(5);
  66.         
  67.     }
  68.     TP_CS_H(); //TP_CS(1);
  69.     //buf>>=4;//只有12位有效
  70.     //buf&=0x0fff;
  71.     return(buf);
  72. }





  73. #define ReadLoop 13 //必須>2
  74. #define LOSS_DATA 5 //前后丟掉數據個數
  75. u16 Read_XY(u8 xy)
  76. {
  77. u16 i, j;
  78. u16 buf[ReadLoop];
  79. uint32 sum;
  80. u16 val;
  81.    
  82.     for(i=0; i<readloop; i++)
  83.     {
  84.        WR_CMD(xy);
  85.        //while(TP_BUSY);
  86.        Delayus(5);
  87.        buf[i]=RD_AD();
  88.       
  89.        //sum += buf[i];
  90.     }
  91.    
  92.     //排序
  93.     for(i=0; i<readloop-1; i++)
  94.     {
  95.        for(j=i+1; j<readloop; j++)
  96.        {
  97.           if(buf[i]>buf[j])
  98.           {
  99.              val=buf[i];
  100.              buf[i]=buf[j];
  101.              buf[j]=val;
  102.           }
  103.        }
  104.     }
  105.    
  106.     sum=0;
  107.     for(i=LOSS_DATA; i<readloop-1-loss_data; i++)
  108.        sum += buf[i];
  109.     val=sum/(ReadLoop-2*LOSS_DATA);
  110.    
  111.     return (val);   
  112. }

  113. //====================================================================================
  114. uint8 TP_GetAdXY(u16 *x, u16 *y)
  115. {
  116. //u16 adx,ady;
  117.    
  118.     *y=Read_XY(CHX);
  119.     *x=Read_XY(CHY);
  120.     //*x=adx;
  121.     //*y=ady;
  122.     if(*x<100 || *y<100)
  123.        return(0);
  124.     else
  125.        return(1);
  126. }

  127. /*
  128. 功能:讀取觸摸屏讀坐標,該坐標未做轉換,不能直接使用

  129. 返回:0=無效坐標
  130.       1=有效坐標

  131. 說明:本函數連續采樣2次,2次采樣結果+-5范圍內才算有效
  132. */
  133. uint8 TP_GetAdXY2(u16 *x, u16 *y, uint32 delay)
  134. {u16 x1,y1;
  135. u16 x2,y2;
  136. u8 flag;

  137.     flag=TP_GetAdXY(&x1, &y1);
  138.    
  139.     if(flag==0)
  140.        return(0);
  141.    
  142. //    if(delay>=OS_TIME)
  143. //       os_dly_wait(delay/OS_TIME);//300ms后再采樣1次
  144.    
  145.     //do{
  146.        flag=TP_GetAdXY(&x2, &y2);
  147.     //}while(flag);
  148.    
  149.     if(flag==0)
  150.        return(0);
  151.    
  152.     if( ( (x2<=x1 && x1<x2+50) ||="" (x1<="x2" &&="" x2<x1+50)="" )="" 前后兩次采樣在+-5內
  153.      && ( (y2<=y1 && y1<y2+50) ||="" (y1<="y2" &&="" y2<y1+50)="" )="" )
  154.     {
  155.         *x=(x1+x2)/2;
  156.         *y=(y1+y2)/2;
  157.         return(1);
  158.     }
  159.     else
  160.        return(0);
  161. }

  162. ///*
  163. //功能:讀取觸摸屏在LCD的坐標,該坐標已經轉換為可用的視圖坐標
  164. //返回:0=不在顯示區域
  165. //      1=在顯示區域
  166. //*/
  167. //uint8 TP_GetLCDXY(u16 *x, u16 *y)
  168. //{POINT   displayPoint;
  169. // POINT   TouchSample;
  170. // uint16 xt,yt;        
  171. // uint8 flag;
  172. //
  173. //    flag=TP_GetAdXY2(&xt, &yt, 0);
  174. //    if(flag)
  175. //    {
  176. //       TouchSample.x=xt/4; TouchSample.y=yt/4;
  177. //       getDisplayPoint( &displayPoint, &TouchSample, &Matrix );
  178. //      
  179. //       if(IsDisplayArea(&displayPoint)) //判斷是否在顯示區域
  180. //       {
  181. //          flag=1;
  182. //          *x=displayPoint.x;
  183. //          *y=displayPoint.y;
  184. //       }
  185. //       else
  186. //          flag=0;
  187. //    }
  188. //   
  189. //    return(flag);
  190. //}
復制代碼

描述:工程文件 My_MiniSTM32VET_ECG_uCGUI_DEMO.rar (3.57 MB, 下載次數: 348)

描述:ECG&STM32電路原理圖: 人體心電采集系統電路原理圖.zip (210.65 KB, 下載次數: 252)


作者: eee123    時間: 2016-6-2 11:05
頂一個
作者: chuanqi12    時間: 2016-6-3 17:29
太棒了!
作者: 3242946435    時間: 2016-6-4 00:49
謝謝分享
作者: lilisd    時間: 2016-6-6 08:17
感謝樓主分享
作者: 飛飛藍鳥    時間: 2016-12-28 17:57
號帖子,有時間做一個
作者: 邰夏留    時間: 2017-1-3 12:35
看到開源的好帖就的頂,讓大家都看看。。。
作者: movier    時間: 2017-3-8 15:19
學習了這個貼對我幫助很大
作者: fengye20101112    時間: 2017-9-28 13:50
贊一個,學習學習
作者: cnc2020    時間: 2018-3-21 20:52
謝謝分享
作者: heruihung1    時間: 2018-3-23 20:53
學習了這個貼對我幫助很大
作者: 張大彪    時間: 2018-3-30 16:01
學習了
作者: ERWQW    時間: 2018-5-18 16:34
樓主,你的例程我下下來編譯報了個錯誤
hw_config.c(17): error:  #5: cannot open source input file "stm32f10x_lib.h": No such file or directory
樓主的工程中是不是少添加了這個.h的?

作者: smartphone    時間: 2018-5-26 21:34
這個好棒 頂
作者: a89588038    時間: 2018-7-26 15:08
漲見識了,厲害厲害
作者: stan_00    時間: 2018-9-16 10:59

頂一個
作者: chen.michael    時間: 2019-2-18 10:06
請問編程環境是keil嗎

作者: redlake    時間: 2019-5-25 18:00
謝謝分享。
作者: anono    時間: 2020-1-12 11:12
好東西,謝謝
作者: ujsme    時間: 2020-5-27 13:29
下載下來學習一下,感謝分享
作者: 中恒電子asus    時間: 2020-5-27 22:49
謝謝分享
作者: jialongfei    時間: 2021-3-25 13:37
很棒,試試看能不能改改
作者: lanxichang    時間: 2022-6-17 23:50
下載下來了,可是沒編譯過去,有4個錯誤,咋辦呢?"..\ObjFlash\STM32-FD-ucgui.axf" - 4 Error(s), 21 Warning(s).
作者: lanxichang    時間: 2022-6-17 23:51
chen.michael 發表于 2019-2-18 10:06
請問編程環境是keil嗎

是的。打開了文件,文件挺大的
作者: 885357    時間: 2023-5-2 17:23
lanxichang 發表于 2022-6-17 23:50
下載下來了,可是沒編譯過去,有4個錯誤,咋辦呢?"..\ObjFlash\STM32-FD-ucgui.axf" - 4 Error(s), 21 War ...

你好,我下載了之后沒有看到project文件,想問問你是在哪里打開的呀
作者: 885357    時間: 2023-5-2 17:24
lanxichang 發表于 2022-6-17 23:51
是的。打開了文件,文件挺大的

你好,請問在哪里打開呀,我咋沒看到project文件呢




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 看毛片网站 | 色综合天天综合网国产成人网 | 精品无人国产偷自产在线 | 久久riav| 日日夜夜噜 | 午夜久久久久久 | 精品视频在线免费观看 | 欧美日韩第一页 | 亚洲一区影院 | 少妇在线观看 | 国产成人在线免费视频 | 国产成人精品免费视频 | 三级福利视频 | 800av在线播放 | av三级在线观看 | 国产在线二区 | 午夜免费时刻 | 在线免费成人 | 在线色网 | 国产成人区 | 日韩高清在线观看 | 亚洲麻豆视频 | 成人深夜福利 | 日韩视频免费大全中文字幕 | 欧美日韩激情视频 | 日韩免费网站 | 日本伊人网 | 欧美成人一区二区三区片免费 | 国产日韩欧美视频 | 久久亚洲国产精品 | 欧美日韩免费看 | 久久久久久久久久久久久久 | 一级片av | www久久| 8x8ⅹ国产精品一区二区 | 逼逼操 | 五月开心激情网 | 久视频在线 | 精品国产乱码久久久久久蜜柚 | 日产毛片| 一级片久久久 |