ds18b20c语言keil,DS18B20温度检测调节程序(C代码)
#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代码)相关推荐
- 基于51单片机的多路温度检测调节串口传输系统
本设计基于51单片机的多路温度检测调节串口传输系统(仿真+源码+视频讲解) 仿真:proteus8.9 程序编译器:keil 4 编程语言:C语言 编号C0009 [腾讯文档]C0009 网盘链接 资 ...
- matlab ds18b20 单片机,基于51单片机ds18b20温度检测————设计报告.doc
基于51单片机ds18b20温度检测----设计报告 课程名称: 微机原理课程设计 题 目: 温度检测课程设计 摘要 随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为 ...
- 卡尔曼滤波算法在DS18B20温度检测中的应用
KalmanFilterAlgorithm 1.卡尔曼滤波算法特点 采用递归的方法解决线性滤波问题,只需要当前的测量值和前一个采样周期的估计值就能进行状态估计,需要的存储空间小,每一步的计算量小. 2 ...
- 【001】基于51单片机的DS18B20温度检测与报警装置的proteus仿真设计
一.设计资料内容(私信获取) 1. 包含proteus仿真一份: 2. keil源代码一份: 3. 包含基于51单片机的DS18B20温度监测与报警的proteus仿真设计课程报告一份: 4. 包含基 ...
- 数字温度计的c语言编程,DS18B20数字温度计C程序(能显示负温)
DS18B20数字温度计C程序(能显示负温) //***********DS18B20数字温度计C程序****************// //*MCU: AT892051 // //*MCU-cry ...
- C语言电池电压检测程序,电池温度检测原理和示例代码
一.原理 其实电池内部有个热敏电阻, 与外部分压电阻构成一个简单的分压电路, 根据ADC采样得到的电压j计算热敏阻值再反推此时的温度, 首先我们要先了解热敏电阻阻值和温度一个公式: /*NTC热敏电 ...
- 基于DS18B20温度检测
目录 一 设计内容 二 芯片介绍 2.1 DS18B20芯片 2.2.1 DS18B20简介 2.1.2单总线介绍及应用: 2.1.3 DS18B20的应用: 2.2 LCD1602芯片 2.2.1 ...
- c语言 包络算法,包络检测C程序
最近做项目要提取一个声音信号的包络波形,所以花了点时间研究各种包络提取的算法. 所谓包络检测又叫幅度解调,在许多领域都有重要的应用.如果载波信号是确定的,那么通常可以采用同步解调的方式,这种方式的信噪 ...
- c语言密码强度的判断程序,C语言实现密码强度检测
这篇文章主要为大家详细介绍了C语言实现密码强度检测,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了C语言实现密码强度检测,供大家参考,具体内容如下 ...
最新文章
- rhel5.1 vncserver
- Location对象、History对象
- 个人见解:*与(c语言)
- sqlite管理工具_Liquibase 数据库版本管理工具:1.安装
- android 广告栏效果,实现android广告栏效果
- 面积计算(洛谷P5681题题解,Java语言描述)
- DevOps是微服务的秘方
- 10-R语言文本挖掘tm包详解
- linux 配置mq队列,Apache ActiveMQ 消息队列安装与配置
- 随着浏览器窗口缩小表格出现横向滚动条
- 【TCP/IP】【测试】常用发流软件一览
- 微信小程序·实现列表页和详情页同步收藏
- 微信卡券---第一步:上传卡券图片素材
- 关于win10无法打开.msi文件的解决方法
- 关于将Java编译过的.class文件打成jar可执行文件/JAR详解
- 《赋能:打造应对不确定性的敏捷团队》
- 无线蜂窝通信模组是什么?
- 【爬虫】Python3搜索并获取电影网站的迅雷下载链接
- apscheduler调度器异常错误:skipped: maximum number of running instances reached (1)
- Maxon Cinema 4D Release 21可立即供货
热门文章
- 《Understanding the Effective Receptive Field in Deep Convolutional Neural Networks》理解深卷积神经网络中的有效感受野
- 如何做到3个月吸粉10多万
- 当android调试遇到ADB server didn't ACK以及顽固的sjk_daemon进程 .
- 深入浅出Oracle Spatial
- 网易微专业python全栈工程师_Python 的工作已经饱和?那是因为你只会 Python
- DMU-单性状重复力模型-学习笔记3
- 谷歌浏览器崩溃之后卸载无法重装的解决方法
- Redis源码学习(14),t_set.c 学习(二),sismember,scard,spop 命令学习
- php 大转盘抽奖概率 角度,在线抽奖大转盘和概率计算
- ABAP——smartform添加图片