#include"reg52.h"

#include"intrins.h"

#include"absacc.h"

#define uint unsigned int

#define uchar unsigned char

uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳管0~9

uchar code tab_motor_1[]={0x03,0x06,0x0c,0x09}; //电机正转 向上

uchar code tab_motor_2[]={0x09,0x0c,0x06,0x03}; //电机反转 向下本文引用地址:http://www.eepw.com.cn/article/201611/315460.htm

sbit ds18b20_in=P2^4; //温度传感器数据线位定义

sbit dht11=P2^2; //温湿度传感器 数据线位定义

sbit SPEAKER=P2^3; //报警器

//sbit FAN=P2^5; //电风扇

sbit HEATERS=P3^1;

sbit FAN=P3^0;

//******************全局变量定义**********************************

uchar tempL=0,tempH=0; //ds18b20读取值

uchar Set_Temp_H=30,Set_Temp_L=24;//温度边界值设定值

uchar Set_Humi_H,Set_Humi_L;

uchar Set_Illu_H,Set_Illu_L;

uchar flag_judge_temp,flag_judge_humi,flag_judge_illu; //标志位定义

float temperature,illumination,humidity; //温度值、光照值、湿度值?

//**********************延时子程序************************

void delay(uint time)

{

uint n=0;

while(n {n++;}

return;

}

void delay1()

{

int k;

for(k=0;k<600;k++);

}

void delay20ms(void) //误差 0us

{

unsigned char a,b;

for(b=215;b>0;b--)

for(a=45;a>0;a--);

_nop_; //if Keil,require use intrins.h

_nop_; //if Keil,require use intrins.h

}

//*******************显示子程序**************************

void display(float k)

{

int t;

t=k*100;

P1=0xfe;

P0=tab[t/1000];//十位

delay1();

P1=0xfd;

P0=tab[t%1000/100]-0x80;//个位+小数点

delay1();

P1=0xfb;

P0=tab[t%100/10];//十分位

delay1();

P1=0xf7;

P0=tab[t%10];//百分位

delay1();

P1=0xff;

}

//*****************ds18b20的初始化程序*********************

init_ds18b20()

{

uchar x=0;

ds18b20_in=1; //ds18b20_in先置高

delay(8);

ds18b20_in=0; //发送复位脉冲

delay(85); //延时>480ms

ds18b20_in=1; //拉高数据线

delay(14); //等待15~60ms

x=ds18b20_in; //用x的值来判断初始化是否成功

//ds18b20存在的话x=0,否则x=1

delay(20);

}

/**************************读取字符子程序******************/

ReadOneChar()

{

uchar i=0; //主机数据线先从高电平拉低1ms以上,在拉高,从而产生读信号

uchar dat=0; //每个读取周期最短持续时间为60ms,各个读取周期之间必须有1ms以上的高电平恢复??

for(i=8;i>0;i--) //一个字节8位

{

ds18b20_in=1;delay(1);

ds18b20_in=0;dat>>=1;ds18b20_in=1;

if(ds18b20_in)

dat|=0x80;

delay(4);

}

return(dat);

}

//****************向写一个字节子程序*********************/

WriteOneChar(uchar dat)

{

uchar i; //数据从高电平拉至低电平,产生写起始信号

for(i=8;i>0;i--)

{

ds18b20_in=0;

ds18b20_in=dat&0x01;

delay(5);

ds18b20_in=1;

dat>>=1;

}

delay(4);

}

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

向ds18b20度温度值

出口参数temprature

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

ReadTemperature()

{

init_ds18b20(); //初始化

WriteOneChar(0xcc); //跳过读序列号的操作

WriteOneChar(0x44); //启动温度转换

delay(125); //转换延时

init_ds18b20(); //初始化

WriteOneChar(0xcc); //跳过读序列号的操作

WriteOneChar(0xbe); //读温度寄存器(头两个值分别是温度的低位和高位)

tempL=ReadOneChar(); //读出温度的低位LSB

tempH=ReadOneChar(); //读出高位的高位MSB

//tempL=0X91;tempH=0X01;

if(tempH&0x80)

temperature=(~((tempH*256)+tempL)+1)*0.0625; //零度以下

//温度转换,把高位低位做相应的运算转换为实际的温度

else

temperature=((tempH*256)+tempL)*0.0625; //零度以上

delay(200);

return(temperature);

}

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

//**************报警子程序****************

sounder_H()

{

SPEAKER=1;

delay1();delay1();delay1();

SPEAKER=0;

}

sounder_L() //蜂鸣器 低电平响

{

SPEAKER=1;

delay1();delay1();delay1();

delay1();delay1();delay1();

delay1();delay1();delay1();

delay1();delay1();delay1();

SPEAKER=0;

}

//*************步进电机子程序**************

void motor_up()

{

int m,n;

for(m=0;m<24;m++)

for(n=0;n<4;n++)

{ P3=tab_motor_1[n];delay20ms();}

}

void motor_down()

{

int m,n;

for(m=0;m<288;m++)

for(n=0;n<4;n++)

{ P3=tab_motor_2[n];delay20ms();}

}

/*************电风扇开启子程序 **************

**************由直流电机 控制 *************/

void fan()

{

FAN=0; //开启继电器 打开电动机

}

//**************加热器*********************

void heaters()

{

HEATERS=0;

}

/*************温度判断***************

正常返回“1 否则返回0?

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

judge_temp(float i)

{

int k;

k=(int)(i*100);

if( k<=Set_Temp_H*100 && k>=Set_Temp_L*100 ) //正常范围内

{ return 1;}

if(k {

flag_judge_temp=0; return 0;}

else

{

flag_judge_temp=1; return 0;} //高于最大值

}

/*************湿度判断***************

正常返回“1 否则返回0

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

judge_humi(float ii)

{}

/*************光照判断***************

正常返回“1 否则返回0

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

judge_illu(float iii)

{}

//********************主程序****************

void main()

{

float i;

while(1)

{

i=ReadTemperature();

display(i);

/**********判断******/

{

if(!judge_temp(i))

{

if(flag_judge_temp) //温度高

{sounder_H(); fan();HEATERS=1;//motor_up();

}

else

{sounder_L(); heaters();FAN=1;//motor_down();

} //温度低

}

else {SPEAKER=1;FAN=1;HEATERS=1;}//关闭相应调节功能

}

/*********处理**********/

}

}

ds18b20c语言keil,DS18B20温度检测调节程序(C代码)相关推荐

  1. 基于51单片机的多路温度检测调节串口传输系统

    本设计基于51单片机的多路温度检测调节串口传输系统(仿真+源码+视频讲解) 仿真:proteus8.9 程序编译器:keil 4 编程语言:C语言 编号C0009 [腾讯文档]C0009 网盘链接 资 ...

  2. matlab ds18b20 单片机,基于51单片机ds18b20温度检测————设计报告.doc

    基于51单片机ds18b20温度检测----设计报告 课程名称: 微机原理课程设计 题 目: 温度检测课程设计 摘要 随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为 ...

  3. 卡尔曼滤波算法在DS18B20温度检测中的应用

    KalmanFilterAlgorithm 1.卡尔曼滤波算法特点 采用递归的方法解决线性滤波问题,只需要当前的测量值和前一个采样周期的估计值就能进行状态估计,需要的存储空间小,每一步的计算量小. 2 ...

  4. 【001】基于51单片机的DS18B20温度检测与报警装置的proteus仿真设计

    一.设计资料内容(私信获取) 1. 包含proteus仿真一份: 2. keil源代码一份: 3. 包含基于51单片机的DS18B20温度监测与报警的proteus仿真设计课程报告一份: 4. 包含基 ...

  5. 数字温度计的c语言编程,DS18B20数字温度计C程序(能显示负温)

    DS18B20数字温度计C程序(能显示负温) //***********DS18B20数字温度计C程序****************// //*MCU: AT892051 // //*MCU-cry ...

  6. C语言电池电压检测程序,电池温度检测原理和示例代码

    一.原理 其实电池内部有个热敏电阻, 与外部分压电阻构成一个简单的分压电路,  根据ADC采样得到的电压j计算热敏阻值再反推此时的温度, 首先我们要先了解热敏电阻阻值和温度一个公式: /*NTC热敏电 ...

  7. 基于DS18B20温度检测

    目录 一 设计内容 二 芯片介绍 2.1 DS18B20芯片 2.2.1 DS18B20简介 2.1.2单总线介绍及应用: 2.1.3 DS18B20的应用: 2.2 LCD1602芯片 2.2.1 ...

  8. c语言 包络算法,包络检测C程序

    最近做项目要提取一个声音信号的包络波形,所以花了点时间研究各种包络提取的算法. 所谓包络检测又叫幅度解调,在许多领域都有重要的应用.如果载波信号是确定的,那么通常可以采用同步解调的方式,这种方式的信噪 ...

  9. c语言密码强度的判断程序,C语言实现密码强度检测

    这篇文章主要为大家详细介绍了C语言实现密码强度检测,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了C语言实现密码强度检测,供大家参考,具体内容如下 ...

最新文章

  1. rhel5.1 vncserver
  2. Location对象、History对象
  3. 个人见解:*与(c语言)
  4. sqlite管理工具_Liquibase 数据库版本管理工具:1.安装
  5. android 广告栏效果,实现android广告栏效果
  6. 面积计算(洛谷P5681题题解,Java语言描述)
  7. DevOps是微服务的秘方
  8. 10-R语言文本挖掘tm包详解
  9. linux 配置mq队列,Apache ActiveMQ 消息队列安装与配置
  10. 随着浏览器窗口缩小表格出现横向滚动条
  11. 【TCP/IP】【测试】常用发流软件一览
  12. 微信小程序·实现列表页和详情页同步收藏
  13. 微信卡券---第一步:上传卡券图片素材
  14. 关于win10无法打开.msi文件的解决方法
  15. 关于将Java编译过的.class文件打成jar可执行文件/JAR详解
  16. 《赋能:打造应对不确定性的敏捷团队》
  17. 无线蜂窝通信模组是什么?
  18. 【爬虫】Python3搜索并获取电影网站的迅雷下载链接
  19. apscheduler调度器异常错误:skipped: maximum number of running instances reached (1)
  20. Maxon Cinema 4D Release 21可立即供货

热门文章

  1. 《Understanding the Effective Receptive Field in Deep Convolutional Neural Networks》理解深卷积神经网络中的有效感受野
  2. 如何做到3个月吸粉10多万
  3. 当android调试遇到ADB server didn't ACK以及顽固的sjk_daemon进程 .
  4. 深入浅出Oracle Spatial
  5. 网易微专业python全栈工程师_Python 的工作已经饱和?那是因为你只会 Python
  6. DMU-单性状重复力模型-学习笔记3
  7. 谷歌浏览器崩溃之后卸载无法重装的解决方法
  8. Redis源码学习(14),t_set.c 学习(二),sismember,scard,spop 命令学习
  9. php 大转盘抽奖概率 角度,在线抽奖大转盘和概率计算
  10. ABAP——smartform添加图片