找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2754|回复: 0
收起左侧

51单片机蓝牙心率计的程序

[复制链接]
ID:210022 发表于 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;        //数码管位选
  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. //发送十六进制字节数据
  13. void SendByte(uchar dat)
  14. {
  15. SBUF = dat;
  16. while(!TI);
  17.        TI = 0;
  18. }






  19. /************ 延时函数  *****************/
  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;//设置外部中断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;//暂时关外部中断
  85.                 if(timecount<8)   //当连续两次检测时间间隔小于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;//重新设置定时器
  93.                                 TH0=(65536-50000)/256;
  94.                                 timecount=0;//50ms计数清零
  95.                                 i++;
  96.                                 if(i==6)//记录到超过等于6次时间
  97.                                 {
  98.                                                 i=1;//计数从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一次计数
  111.                 if(timecount>25)     //当超过25*50ms=1.25s没有检测到信号停止显示
  112.                 {
  113.                                 i=0;//数据个数清零
  114.                                 timecount=0;//50ms计数清零
  115.                                 displayOK=0;//显示关
  116.                                 TR0=0;//定时器关
  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. }
复制代码


51蓝牙心率计.docx

14.88 KB, 下载次数: 28, 下载积分: 黑币 -5

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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