18 基于51单片机的心率体温监测报警系统(包罗程序、仿真、原理图、流程图) ...

打印 上一主题 下一主题

主题 1519|帖子 1519|积分 4557

目录
一、紧张功能
二、硬件资源
三、程序编程
四、实现现象

一、紧张功能

基于51单片机 ds18B20读取温度,
设置初始心率65 设置温度阈值38
心率阈值60 100 如果超过阈值,蜂鸣器报警,led灯亮
二、硬件资源

基于KEIL5编写C++代码,PROTEUS8.15举行仿真,全部资源在页尾,提供安装包。

三、程序编程

  1. #include <REGX52.H>#include<intrins.h>#include<stdio.h>#include "Delay.h"#include "LCD1602.h"#define uchar unsigned char#define uint unsigned  intsbit beep = P2^5;                          //蜂鸣器引脚sbit DS=P2^4;                 //DS18B20温度传感器sbit key1=P3^2;
  2. sbit key2=P3^3;
  3. sbit key3=P3^4;
  4. sbit key4=P3^5;
  5. sbit led =  P1^0;unsigned char count;typedef unsigned char u8;typedef unsigned int  u16;static uint temp;static float ftemp = 0.0f;//温度转变uint temp;static unsigned char num;static int wdyz=38,xlyzmax=100,xlyzmin=60;static int xl=65;void tmpchange();uint tmp();void beep\_warning();void Time0\_Init()          //定时器初始化{
  6. TMOD = 0x01;           //定时器0工作在方式1    IE   = 0x82;
  7. TH0  = 0xfe;
  8. TL0  = 0x33;     //11.0592MZ晶振,0.5msTR0=1;                 //定时器开始EA=1;
  9. }void Time0_Int() interrupt 1 //中断程序{
  10.    TH0  = 0xfe;             //重新赋值
  11.    TL0  = 0x33;
  12.     num++;        if(num==200)
  13.         {            tmpchange();        //让18b20开始转换温度
  14.             temp = tmp();       //读取温度
  15.             ftemp = temp/10.0f; //转换温度
  16.                 num=0;
  17.         }
  18. }void dsreset(void)            //发出命令{
  19.   uint i;
  20.   DS=0;                              
  21.   i=103;                                   //将总线拉低480us~960us
  22.   while(i>0)i--;
  23.   DS=1;                                           //然后拉高总线,若DS18B20做出反应会将在15us~60us后将总线拉低
  24.   i=4;                                           //15us~60us等待
  25.   while(i>0)i--;  //while(DS);}bit tmpreadbit(void)          //读取数据{
  26.    uint i;
  27.    bit dat;
  28.    DS=0;i++;          //i++ for delay
  29.    DS=1;i++;i++;
  30.    dat=DS;
  31.    i=8;while(i>0)i--;   return (dat);
  32. }uchar tmpread(void)           //读取数据{
  33.   uchar i,j,dat;
  34.   dat=0;  for(i=1;i<=8;i++)
  35.   {
  36.     j=tmpreadbit();
  37.     dat=(j<<7)|(dat>>1);   //读出的数据最低位在最前面,这样刚好一个字节在DAT里
  38.   }  return(dat);
  39. }void tmpwritebyte(uchar dat)  //传输数据给DS18B20{
  40.   uint i;
  41.   uchar j;
  42.   bit testb;  for(j=1;j<=8;j++)
  43.   {
  44.     testb=dat&0x01;
  45.     dat=dat>>1;    if(testb)     //write 1
  46.     {
  47.       DS=0;
  48.       i++;i++;
  49.       DS=1;
  50.       i=8;while(i>0)i--;
  51.     }    else
  52.     {
  53.       DS=0;       //write 0
  54.       i=8;while(i>0)i--;
  55.       DS=1;
  56.       i++;i++;
  57.     }
  58.   }
  59. }void tmpchange(void)          //DS18B20开始工作{  dsreset();  Delay(1);  tmpwritebyte(0xcc);  
  60.   tmpwritebyte(0x44);  
  61. }                                          
  62. uint tmp()                    //获得温度{  float tt;
  63.   uchar a,b;  dsreset();  Delay(1);  tmpwritebyte(0xcc);  tmpwritebyte(0xbe);
  64.   a=tmpread();//低八位
  65.   b=tmpread();//高八位
  66.   temp=b;
  67.   temp<<=8;             //two byte  compose a int variable
  68.   temp=temp|a;
  69.   tt=temp*0.0625; //算出来的是测到的温度,数值可到小数点后两位
  70.   temp=tt*10+0.5; //为了显示温度后的小数点后一位并作出四舍五入,因为取值运算不能取小数点后的数
  71.   return temp;
  72. }void beep_warning() //温度传感器蜂鸣器警报并且电机转动{        if(ftemp>=wdyz)
  73.         {
  74.                 beep=1;                         //蜂鸣器报警
  75.                 led = 1;
  76.         }       
  77.         if(xl>xlyzmax)
  78.         {
  79.                 beep=1;                         //蜂鸣器报警
  80.                 led = 1;
  81.         }       
  82.         if(xl<xlyzmin)
  83.         {
  84.                 beep=1;                         //蜂鸣器报警
  85.                 led = 1;
  86.         }       
  87.         if(ftemp<wdyz && xl<xlyzmax && xl>xlyzmin)
  88.         {
  89.          beep=0;                                        //蜂鸣器报警
  90.          led = 0;
  91.         }
  92. }void main()                                          //主函数{       
  93.         beep=0;                            //蜂鸣器关掉
  94.         led = 0;        LCD_Init();         //显示屏初始化
  95.         Time0\_Init();        LCD\_ShowString(1,1,"wendu:");        LCD_ShowString(2,1,"xinlv:");        while(1)
  96.         {               
  97.                
  98.          if(key1==0)                  //第一个按键按下
  99.          {          Delay(150);          if(key1==0)
  100.           {
  101.            xl++;
  102.           }
  103.          }         if(key2==0)
  104.           {          Delay(150);          if(key2==0)
  105.           {
  106.            xl--;
  107.           }
  108.          }                  
  109.                  if(key3==0)                  //第一个按键按下
  110.          {          Delay(150);          if(key3==0)
  111.           {
  112.            wdyz++;
  113.           }
  114.          }         if(key4==0)
  115.           {          Delay(150);          if(key4==0)
  116.           {
  117.            wdyz--;
  118.           }
  119.          }          LCD_ShowNum(1,7,ftemp,2); //第一行显示温度
  120.                 LCD_ShowString(1,9,"C ");
  121.           LCD\_ShowNum(2,7,xl,2);         LCD\_ShowNum(1,13,wdyz,2);         beep_warning(); //温度/心率超出报警
  122.         }
  123. }
复制代码
四、实现现象

具体动态效果看B站演示视频:
基于51单片机的心率体温监测报警系统_哔哩哔哩_bilibili
全部资料(源程序、仿真文件、原理图、流程图、安装包、演示视频):
通过百度网盘分享的文件:基于51单片机的心率体温监测报警系统.zip
链接:https://pan.baidu.com/s/1VRiz4-p8dzY0NeCt0Rmxog?pwd=i5cw
提取码:i5cw
–来自百度网盘超等会员V4的分享

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

灌篮少年

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表