找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3068|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

51單片機藍牙心率計的程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:210022 發(fā)表于 2017-6-11 10:17 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
51藍牙心率計的程序,我只是搬運工==

  1. #include<reg52.h>
  2. #include <intrins.h>                            // 包含頭文件   
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit wei1=P1^0;        //數(shù)碼管位選
  6. sbit wei2=P1^1;
  7. sbit wei3=P1^2;
  8. sbit wei4=P1^3;







  9. unsigned char i=0,timecount=0,displayOK=0,rate=0,aa=0;
  10. unsigned int time[6]={0};
  11. uchar code table[]={0xc0,0xcf,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};


  12. //發(fā)送十六進制字節(jié)數(shù)據(jù)
  13. void SendByte(uchar dat)
  14. {
  15. SBUF = dat;
  16. while(!TI);
  17.        TI = 0;
  18. }






  19. /************ 延時函數(shù)  *****************/
  20. void DelayMs(unsigned int z)
  21. {
  22.    unsigned int x;
  23.    for(;z>0;z--)
  24.      for(x=110;x>0;x--);
  25. }
  26. void display(uchar bai,uchar shi,uchar ge)
  27. {
  28.         wei1=0;                          //顯示百位
  29.         P0=bai;
  30.         DelayMs(1);
  31.         wei1=1;
  32.         P0=0xff;


  33.         wei2=0;                          //顯示十位
  34.         P0=shi;
  35.         DelayMs(1);
  36.         wei2=1;       
  37.         P0=0xff;
  38.        
  39.         wei3=0;                          //顯示個位
  40.         P0=ge;
  41.         DelayMs(1);
  42.         wei3=1;
  43.         P0=0xff;
  44.        
  45. }         
  46. void main()
  47. {
  48.                 TCON=0x01;//設(shè)置外部中斷0
  49.                 EX0=1;
  50.                 TMOD=0x21;//定時器0初始化
  51.                 TH0=(65536-50000)/256;//實測每50ms中斷的定時值
  52.                 TL0=(65536-50000)%256;
  53.                 ET0=1;//開定時器中斷
  54.        


  55.                 TR0=0;//定時器停止
  56.                 EA=1;//開總中斷


  57.                 SCON=0x50;
  58. TH1=0xfd;
  59. TL1=0xfd;
  60. TCON=0x40;
  61. TR1=1;
  62. ES = 1;
  63.                 while(1)
  64.                 {
  65.                   
  66.                                
  67.                                 if(displayOK==1)
  68.                                 {
  69.                                                 rate=60000/(time[1]/5+time[2]/5+time[3]/5+time[4]/5+time[5]/5);
  70.                                        
  71.                                                 display(table[rate/100],table[rate/10%10],table[rate%10]);
  72.                                        
  73.                                                        
  74.                                 }
  75.                                 DelayMs(300);
  76.                                
  77.                        

  78.                                          SendByte(rate);
  79.                                
  80.                 }
  81. }

  82. void ex0() interrupt 0
  83. {
  84.                 EX0=0;//暫時關(guān)外部中斷
  85.                 if(timecount<8)   //當(dāng)連續(xù)兩次檢測時間間隔小于8*50ms=400ms不處理
  86.                 {
  87.                                 TR0=1;//開定時器
  88.                 }
  89.                 else
  90.                 {
  91.                                 time[i]=timecount*50+TH0*0.256+TL0/1000;//算出間隔時間
  92.                                 TL0=(65536-50000)%256;//重新設(shè)置定時器
  93.                                 TH0=(65536-50000)/256;
  94.                                 timecount=0;//50ms計數(shù)清零
  95.                                 i++;
  96.                                 if(i==6)//記錄到超過等于6次時間
  97.                                 {
  98.                                                 i=1;//計數(shù)從1開始
  99.                                                 displayOK=1;    //測得5次開始顯示
  100.                                 }       
  101.                                
  102.                 }
  103.                 EX0=1;
  104. }
  105. void et0() interrupt 1
  106. {
  107.                 TL0=(65536-50000)%256;
  108.                 TH0=(65536-50000)/256;
  109.                        
  110.                 timecount++;//每50ms一次計數(shù)
  111.                 if(timecount>25)     //當(dāng)超過25*50ms=1.25s沒有檢測到信號停止顯示
  112.                 {
  113.                                 i=0;//數(shù)據(jù)個數(shù)清零
  114.                                 timecount=0;//50ms計數(shù)清零
  115.                                 displayOK=0;//顯示關(guān)
  116.                                 TR0=0;//定時器關(guān)
  117.                                 TH0=(65536-50000)/256;
  118.                                 TL0=(65536-50000)%256;
  119.                 }
  120. }

  121. void RSINTR() interrupt 4 using 2
  122. {

  123.         if(RI==1)         //接收中斷                  
  124.         {       
  125.                 RI=0;       
  126.                
  127.                 switch(SBUF)
  128.                 {
  129.        
  130.                 }                                                         
  131.         }
  132. }
復(fù)制代碼


51藍牙心率計.docx

14.88 KB, 下載次數(shù): 28, 下載積分: 黑幣 -5

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

相關(guān)帖子

回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表