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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4092|回復: 0
打印 上一主題 下一主題
收起左側

面包板+單片機簡易測心率制作(代碼+詳解)多動手,相信一次會比一次好,繼續努力

[復制鏈接]
跳轉到指定樓層
樓主
每一次動手操作總會遇到很多困難,經歷很多挫折,不過每次收獲都很多,未來加油!
制作出來的實物圖如下:

一、主要器材
       芯片5532、LM393、電容、電阻、51單片機
三、實驗原理
通過紅外對管檢測血管舒張收縮情況,反應為電壓的變化,經過放大濾波,輸出電平到單片機,通過程序計算周期,再計算心率并在液晶上顯示。



測量計算
設K個連續的動脈搏動所用時間為t(秒),在時間 t 內心率的平均值為n(次/分),則:
         n = 60K/t                                               
為了能夠控制用單片機計算機測定t值,我們利用脈動信號控制(在K個連續的脈搏周期內)單片機的定時/計數器T0定時(定時1ms中斷一次),工作寄存器對中斷次數進行計數,然后讀取計數值。設該計數值為N,于是有:
         t = 0.001N                                             
把(2)帶入(1)得到:
         n = 60k/0.001N =60000K/N                              
式(3)就是利用單片計算機測定心率值的數學模型(誤差小于0.4%)。在該單片機系統中,K = 1~~9(用戶可通過按鍵自行設置)。可測心率范圍20次/分~~200次/分(N的范圍:300~~30000)。


單片機源程序如下:
  1. #include<reg52.h>
  2. #define LCD_DB  P0
  3. unsigned long int fre;
  4. unsigned char time;
  5. unsigned char Flag0;
  6. unsigned char Flag1;
  7. unsigned char Flag2;  
  8. unsigned char count;
  9. unsigned char kai;
  10. sbit   LCD_RS=P2^6;         
  11. sbit   LCD_RW=P2^5;           
  12. sbit   LCD_E=P2^7;
  13. sbit   key_0=P3^1;
  14. sbit   key_1=P3^0;
  15. sbit   key_2=P3^2;
  16. sbit   key_3=P3^3;
  17. sbit   beep=P2^0;                     
  18. unsigned char character[10]={0};
  19. unsigned char character_1[]={"Heart Rate  "};
  20. unsigned char character_2[]={"upper "};
  21. unsigned char character_3[]={"lower "};
  22. void displaym();
  23. void displaym1();
  24. void LCD_init(void);   
  25. void LCD_write_command(unsigned char command);         
  26. void LCD_write_data(unsigned char dat);           
  27. void LCD_disp_char(unsigned char x,unsigned char y,unsigned char dat);
  28. void delay_n(unsigned int n);
  29. void clocktimer_init();
  30.             
  31. //--------------------------------------------------------------延時
  32. void delay_n(unsigned int n)//延時函數                  
  33. {
  34.         unsigned int i;
  35.         unsigned char j;            
  36.         for(i=n;i>0;i--)
  37.         for(j=0;j<2;j++);         
  38. }

  39. //--------------------------------------------------------------液晶顯示                                 
  40. void LCD_init(void)//液晶初始化函數
  41. {
  42.         LCD_write_command(0x38);
  43.         LCD_write_command(0x38);
  44.         LCD_write_command(0x38);
  45.         LCD_write_command(0x0c);
  46.         LCD_write_command(0x06);
  47.         LCD_write_command(0x01);         
  48.         delay_n(100);
  49. }

  50. void LCD_write_command(unsigned char dat)//液晶寫命令函數
  51. {
  52.         LCD_DB=dat;
  53.         LCD_RS=0;
  54.         LCD_RW=0;         
  55.         LCD_E=1;           
  56.         LCD_E=0;
  57.         delay_n(1);   
  58. }
  59.          
  60. void LCD_write_data(unsigned char dat)//液晶寫數據函數
  61. {
  62.         LCD_DB=dat;
  63.         LCD_RS=1;         
  64.         LCD_RW=0;  
  65.         LCD_E=1;  
  66.         LCD_E=0;
  67.         delay_n(1);        
  68. }

  69. void LCD_disp_char(unsigned char x,unsigned char y,unsigned char dat)//液晶顯示一個字符
  70. {
  71.         unsigned char address;
  72.         if(y==1)
  73.                  address=0x80+x;        
  74.         else
  75.                  address=0xc0+x;         
  76.         LCD_write_command(address);         
  77.         LCD_write_data(dat);                  
  78. }

  79. void LCD_disp_num(unsigned char x,unsigned char y,unsigned char dat)//顯示一個數字
  80. {
  81.         unsigned char address;
  82.         if(y==1)
  83.                  address=0x80+x;        
  84.         else
  85.                  address=0xc0+x;         
  86.         LCD_write_command(address);         
  87.         LCD_write_data(dat+48);                  
  88. }

  89. void dis_num(void)
  90. {
  91.         unsigned char i=0,j=0,k=0;
  92.         LCD_write_command(0x01);
  93.         character[0] = fre/1000;
  94.         character[1] = fre/100%10;
  95.         character[2] = fre/10%10;
  96.         character[3] = fre%10;               

  97.         for(i = 0;i<10;i++)
  98.         {
  99.                  LCD_disp_char(i+0,1,character_1[i]);
  100.         }

  101.         for(i = 0;i<4;i++)
  102.         {
  103.                 if(character[i]!=0)
  104.                 break;
  105.         }

  106.         k=4-i;
  107.         for(j = 0;j<k;j++)
  108.         {
  109.             if(fre>40&&fre<120)
  110.                 LCD_disp_num(12+j,1,character[i++]);        
  111.         }

  112.         if(Flag0==1)
  113.          {
  114.                  for(i = 0;i<5;i++)
  115.             {
  116.                      LCD_disp_char(i+0,2,character_2[i]);
  117.              }
  118.                 displaym();
  119.          }
  120.          if(Flag0==2)
  121.          {
  122.                  for(i = 0;i<5;i++)
  123.             {
  124.                      LCD_disp_char(i+0,2,character_3[i]);
  125.             }
  126.                    displaym1();
  127.          }
  128.          
  129. }                                             

  130. //-------------------------------------------------------------定時/計數器初始化
  131. void clocktimer_init(void)        
  132. {
  133.         TMOD=0x60;//計數器0和計數器1賦初值初始化                                                         
  134.         TL1=0;
  135.         TR1=1;                                
  136.         ET1=1;                       
  137.         RCAP2H=(65536-60000)/256;
  138.         RCAP2L=(65536-60000)%256;  
  139.         TH2=RCAP2H;               
  140.         TL2=RCAP2L;
  141.         ET2=1;                             
  142.         TR2=1;                     
  143.         EA=1;                        
  144. }         

  145. void clock1(void) interrupt 3 //計數器1中斷
  146. {
  147.         count++;
  148. }

  149. void timer2(void) interrupt 5 //定時器2中斷
  150. {
  151.         time++;
  152.         TF2=0;                  
  153.         if (time==200)               
  154.         {
  155.            time=0;               
  156.            EA=0;                                   
  157.            fre=(count*256+TL1)*4;      
  158.            TL1=0;
  159.            TH1=0;                                   
  160.            count=0;            
  161.            EA=1;                              
  162.         }
  163. }

  164. void  key_scan()
  165. {
  166.          if(key_0==0)                                                                                                           
  167.          {
  168.                  delay_n(50);
  169.                 if(key_0==0)
  170.                 {        
  171.                           while(key_0==0);
  172.                     Flag0++;
  173.                         while(Flag0>2)
  174.                         Flag0=0;               
  175.                 }
  176.          }

  177.          if(key_1==0)
  178.          {
  179.                  delay_n(100);
  180.                 if(key_1==0)
  181.                 {        
  182.                    if(Flag0==1)
  183.                     {
  184.                            Flag1++;
  185.                            dis_num();
  186.                         }
  187.                    if(Flag0==2)
  188.                         {
  189.                            Flag2++;
  190.                            dis_num();
  191.                         }           
  192.                 }
  193.          }

  194.          if(key_2==0)
  195.          {
  196.                  delay_n(100);
  197.                 if(key_2==0)
  198.                 {        
  199.                         if(Flag0==1)
  200.                     {
  201.                            Flag1--;
  202.                            dis_num();
  203.                         }
  204.                    if(Flag0==2)
  205.                         {
  206.                            Flag2--;
  207.                            dis_num();
  208.                         }
  209.                 }
  210.          }
  211.          if(key_3==0)
  212.   {
  213.     delay_n(100);
  214.      if(key_3==0)
  215.      {
  216.        while(key_3==0);
  217.        kai=1-kai;
  218.      }
  219.   }
  220. }
  221.                                           
  222. void displaym()
  223. {
  224.        LCD_write_command(0xc6);
  225.        if(Flag1/200%10!=0)
  226.        {
  227.               LCD_write_data(Flag1/200%10+0x30);
  228.            }              
  229.        else
  230.            {
  231.           LCD_write_data(' ');
  232.            }
  233.   
  234.       if(Flag1/200%10==0&&Flag1/20%10==0)
  235.           {
  236.            LCD_write_data(' ');
  237.           }
  238.       else
  239.           {
  240.            LCD_write_data(Flag1/20%10+0x30);
  241.           }            

  242.        LCD_write_data(Flag1/2%10+0x30);              
  243. }

  244. void displaym1()
  245. {
  246.        LCD_write_command(0xc6);
  247.        if(Flag2/200%10!=0)
  248.        {
  249.               LCD_write_data(Flag2/200%10+0x30);
  250.            }              
  251.        else
  252.            {
  253.           LCD_write_data(' ');
  254.            }
  255.   
  256.       if(Flag2/200%10==0&&Flag2/20%10==0)
  257.           {
  258.            LCD_write_data(' ');
  259.           }
  260.       else
  261.           {
  262. ……………………

  263. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
代碼文檔.7z (3.21 MB, 下載次數: 18)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区视频在线 | 国内成人免费视频 | 免费一级黄色电影 | 国产农村妇女精品一区 | 欧美午夜在线 | 国产精品一二三区 | 国产精品免费av | 国产成人麻豆免费观看 | 色接久久 | 99精品久久 | 欧美极品在线观看 | 久久手机视频 | gav成人免费播放视频 | 亚洲精品久久久一区二区三区 | 国产午夜精品一区二区三区在线观看 | 狠狠干天天干 | 99av成人精品国语自产拍 | 青春草91 | 91视频入口 | 国产激情视频网站 | 有码在线 | 国产高清一区二区 | 狠狠夜夜 | 久久精品国产久精国产 | www国产亚洲精品 | 午夜播放器在线观看 | 五月花丁香婷婷 | 男人的天堂中文字幕 | 欧美a区 | 久草视频在线播放 | 一级毛片大全免费播放 | 一区二区在线看 | 国产四区 | 黄视频欧美| 欧美国产精品一区二区三区 | 久久久精| 女女百合av大片一区二区三区九县 | 国产精品揄拍一区二区 | 亚洲精品一区国语对白 | 日韩和的一区二在线 | 国产精品99免费视频 |