当前位置: 首页 > news >正文

基于单片机体温脉搏检测控制系统及源程序

一、系统方案
1、本设计采用51单片机作为主控器。
2、DS18B20传感器检测体温。
3、红外对接管采集心率值送到液晶1602显示。
在这里插入图片描述
二、硬件设计
原理图如下:
在这里插入图片描述

三、单片机软件设计
1、首先是系统初始化
/lcd1602初始化设置*/
void init_1602()
{
write_com(0x38); //显示模式设置:16×2显示,5×7点阵,8位数据接口 不检测忙信号
write_com(0x0c); //开显示 不显示光标
write_com(0x06); //当写一个字符是,地址指针加 1
write_string(1,0," 000/min “); //初始化1602显示
write_string(2,0,” 00.0 "); //初始化1602显示
write_zifu(2,10,0xdf); //显示度
}

2、液晶显示程序
/1ms延时函数******/
void delay_1ms(uint q)
{
uint i,j;
for(i=0;i<q;i++)
for(j=0;j<120;j++);
}

/********************************************************************

  • 名称 : delay_uint()
  • 功能 : 小延时。
  • 输入 : 无
  • 输出 : 无
    ***********************************************************************/
    void delay_uint(uint q)
    {
    while(q–);
    }

/********************************************************************

  • 名称 : write_com(uchar com)
  • 功能 : 1602指令函数
  • 输入 : 输入的指令值
  • 输出 : 无
    ***********************************************************************/
    void write_com(uchar com)
    {
    rs=0; //写指令
    rw=0; //对1602写操作
    P0=com; //P0口对1602写指令
    delay_uint(25);
    e=1; //e=1使能信号
    delay_uint(100); //延时一下等1602完成操作
    e=0;
    }

/********************************************************************

  • 名称 : write_data(uchar dat)
  • 功能 : 1602写数据函数
  • 输入 : 需要写入1602的数据
  • 输出 : 无
    ***********************************************************************/
    void write_data(uchar dat)
    {
    rs=1; //写数据
    rw=0; //对1602写操作
    P0=dat; //P0口对1602写数据
    delay_uint(25);
    e=1; //e=1使能信号
    delay_uint(100); //延时一下等1602完成操作
    e=0;
    }

3、DS 18B 20程序
/18b20初始化函数******/
void init_18b20()
{
bit q;
dq = 1; //把总线拿高
delay_uint(8);
dq = 0; //给复位脉冲 再将数据线从高拉低,要求保持480~960us
delay_uint(80);
dq = 1; //把总线拿高 等待
delay_uint(8);
q = dq; //读取18b20初始化信号
delay_uint(4);
dq = 1; //把总线拿高 释放总线
}

/写18b20内的数据**/
void write_18b20(uchar dat)
{
uchar i;
for(i=0;i<8;i++) //单总线写8位的数据需要循环8次才能写完
{ //写数据是低位开始
dq = 0; //把总线拿低写时间隙开始
dq = dat & 0x01; //向18b20总线写一位数
delay_uint(4);
dq = 1; //释放总线
dat >>= 1; //将dat中的各二进制位数据右移1位
}
delay_uint(4); //稍作延时,给硬件一点反应时间
}

/读取18b20内的数据**/
uchar read_18b20()
{
uchar i,value;
for(i=0;i<8;i++)
{
dq = 0; //把总线拿低读时间隙开始
value >>= 1; //读数据是低位开始
dq = 1; //释放总线
if(dq == 1) //开始读写数据
value |= 0x80;
delay_uint(4);
}
return value; //返回数据
}

/读取温度的值 读出来的是小数**/
uint read_temp()
{
uint value;
uchar low; //在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序
init_18b20(); //初始化18b20
write_18b20(0xcc); //跳过64位ROM
write_18b20(0x44); //启动一次温度转换命令
delay_uint(50); //转换一次温度需要时间 延时一下

init_18b20();		   //初始化18b20write_18b20(0xcc);	   //跳过64位ROM
write_18b20(0xbe);	   //发出读取暂存器命令low = read_18b20();	   //读温度低字节
value = read_18b20();  //读温度高字节
value <<= 8;		   //把温度的高位左移8位
value |= low;		   //把读出的温度低位放到value的低八位中
value *= 0.625;	       //转换到温度值 小数
return value;		   //返回读出的温度 带小数

}

4、核心算法程序
/*主函数/
void main()
{
init_1602(); //1602初始化
time_init(); //初始化定时器
init_int0(); //外部中断0初始化程序
temperature = read_temp(); //先读出温度的值
delay_1ms(600);
while(1)
{
if(displayOK==0)//如果显示关
{
rate = 0;
}
else//如果显示开
{
rate=60000/(time[1]/5+time[2]/5+time[3]/5+time[4]/5+time[5]/5); //计算脉搏次数
}
flag_200ms ++; //加1
if(flag_200ms >= 200) //200毫秒到执行一次里面的程序
{
flag_200ms = 0;
temperature = read_temp(); //先读出温度的值
write_lcd3(1,5,rate); //显示脉搏
write_lcd3_18B20(2,6,temperature);
}
delay_1ms(1); //延时1毫秒
}
}

四、 proteus仿真设计
Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
在这里插入图片描述

http://www.lryc.cn/news/237571.html

相关文章:

  • MyBatis-Plus逻辑删@TableLogic
  • 本地私域线上线下 线上和线下的小程序
  • 【前端学java】java中的Object类(8)
  • TensorFlow实战教程(二十六)-什么是生成对抗网络GAN?基础原理和代码普及
  • IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Maven依赖管理,版本号管理,继承和聚合
  • OpenVPN Connect使用连接公网VPN服务器实现内网穿透
  • Redis(集合Set和有序集合SortedSet)
  • 黔院长 | 《黄帝内经》——奇病论!
  • 手撕单链表(C语言)
  • 60 权限提升-MYMSORA等SQL数据库提权
  • 【C++上层应用】2. 预处理器
  • ISP--Black Level Correction(黑电平矫正)
  • python项目源码基于django的宿舍管理系统dormitory+mysql数据库文件
  • Java和 JS 的10大不同之处,你清楚吗?
  • vue动态配置路由
  • 科技云报道:全球勒索攻击创历史新高,如何建立网络安全的防线?
  • 通过bat命令启动jar后缀软件
  • Python选择排序和冒泡排序算法
  • 集合的自反关系和对称关系
  • 传递函数的推导和理解
  • STM32 SPI
  • Linux系统编程 day02 vim、gcc、库的制作与使用
  • Mistral 7B 比Llama 2更好的开源大模型 (四)
  • 相似基因序列问题 ——查找
  • 【汇编】“转移”综述、操作符offset、jmp指令
  • Java格式化类Format
  • 力扣每日一题-美化数组的最少删除数-2023.11.21
  • 【练习】检测U盘并自动复制内容到电脑的软件
  • 【计算机毕业设计】Springboot高校论文管理系统 -96280,免费送源码,【开题选题+程序定制+论文书写+答辩ppt书写-原创定制程序】
  • nginx 代理接口报404 问题排查