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

一、系统方案

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();		   //初始化18b20

write_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仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。

相关推荐
lucy153027510793 分钟前
【青牛科技】GC5931:工业风扇驱动芯片的卓越替代者
人工智能·科技·单片机·嵌入式硬件·算法·机器学习
scan113 小时前
单片机串口接收状态机STM32
stm32·单片机·串口·51·串口接收
Qingniu0113 小时前
【青牛科技】应用方案 | RTC实时时钟芯片D8563和D1302
科技·单片机·嵌入式硬件·实时音视频·安防·工控·储能
深圳市青牛科技实业有限公司15 小时前
【青牛科技】应用方案|D2587A高压大电流DC-DC
人工智能·科技·单片机·嵌入式硬件·机器人·安防监控
Mr.谢尔比16 小时前
电赛入门之软件stm32keil+cubemx
stm32·单片机·嵌入式硬件·mcu·信息与通信·信号处理
LightningJie16 小时前
STM32中ARR(自动重装寄存器)为什么要减1
stm32·单片机·嵌入式硬件
西瓜籽@16 小时前
STM32——毕设基于单片机的多功能节能窗控制系统
stm32·单片机·课程设计
远翔调光芯片^1382879887219 小时前
远翔升压恒流芯片FP7209X与FP7209M什么区别?做以下应用市场摄影补光灯、便携灯、智能家居(调光)市场、太阳能、车灯、洗墙灯、舞台灯必看!
科技·单片机·智能家居·能源
极客小张19 小时前
基于STM32的智能充电桩:集成RTOS、MQTT与SQLite的先进管理系统设计思路
stm32·单片机·嵌入式硬件·mqtt·sqlite·毕业设计·智能充电桩
m0_739312871 天前
【STM32】项目实战——OV7725/OV2604摄像头颜色识别检测(开源)
stm32·单片机·嵌入式硬件