找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 213|回复: 0
打印 上一主题 下一主题
收起左侧

单片机DS18B20温度传感器控制循环泵(电机)系统设计 程序仿真原理图

[复制链接]
跳转到指定楼层
楼主
DS18B20温度传感器,可设置水泵电机启动温度的上下限
AT89c51单片机
LED共阳极显示
循环泵控制仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
#include <reg51.h>
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int

uchar num = 0;

uchar flang;  // 工作模式变量
uchar xianshi1[] = "H-80 C    L-0 C"; // 温度上限改为80度
uchar xianshi2[] = "TEP:      25.0 C";
uint dingshi = 0;
uchar count;
uint wendu;
bit moshi;
bit xianshi;
uchar shangxian = 80; // 上限设置值改为80度
uchar xiaxian = 0;     // 下限设置值改为0度

sbit IN1 = P2 ^ 0;     // 风扇控制引脚

sbit DQ = P3 ^ 7;      // 定义DS18B20总线I/O

void Delay_DS18B20(int num);

/*****初始化DS18B20*****/
void Init_DS18B20()
{
  unsigned char x;
  DQ = 1;               // DQ复位
  Delay_DS18B20(8);     // 稍做延时
  DQ = 0;               // 单片机将DQ拉低
  Delay_DS18B20(80);    // 精确延时,大于480us
  DQ = 1;               // 拉高总线
  Delay_DS18B20(14);
  x = DQ;               // 稍做延时后,如果x=0则初始化成功,x=1则初始化失败
  Delay_DS18B20(20);
}

/*****延时子程序*****/
void Delay_DS18B20(int num)
{
  while (num--)
    ;
}

/*****写一个字节*****/
void WriteOneChar(unsigned char dat)
{
  unsigned char i = 0;
  EA = 0;
  for (i = 8; i > 0; i--)
  {
    DQ = 0;
    DQ = dat & 0x01;
    Delay_DS18B20(5);
    DQ = 1;
    dat >>= 1;
  }
  EA = 1;
}

/*****读一个字节*****/
unsigned char ReadOneChar(void)
{
  unsigned char i = 0;
  unsigned char dat = 0;
  EA = 0;
  for (i = 8; i > 0; i--)
  {
    DQ = 0; // 给脉冲信号
    dat >>= 1;
    DQ = 1; // 给脉冲信号
    if (DQ)
      dat |= 0x80;
    Delay_DS18B20(4);
  }
  EA = 1;
  return (dat);
}

/*****读取温度*****/
unsigned int ReadTemperature(void) // 读取温度并转换
{
  unsigned char a = 0;
  unsigned char b = 0;
  unsigned int t = 0;
  float tt = 0;
  Init_DS18B20();
  WriteOneChar(0xCC); // 跳过读序号列号的操作
  WriteOneChar(0x44); // 启动温度转换
  Init_DS18B20();
  WriteOneChar(0xCC); // 跳过读序号列号的操作
  WriteOneChar(0xBE); // 读取温度寄存器
  a = ReadOneChar();  // 读低8位
  b = ReadOneChar();  // 读高8位
  t = b;
  t <<= 8;
  t = t | a;
  tt = t * 0.0625;
  t = tt * 10 + 0.5; // 放大10倍输出并四舍五入
  return (t);
}

剩余部分请从附件中下载: 温度传感器.7z (68.09 KB, 下载次数: 11)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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