基于DS18B20温度检测
目录
一 设计内容
二 芯片介绍
2.1 DS18B20芯片
2.2.1 DS18B20简介
2.1.2单总线介绍及应用:
2.1.3 DS18B20的应用:
2.2 LCD1602芯片
2.2.1 LCD1602简介:
2.2.2引脚及其应用电路:
2.2.3 时序结构:
2.2.4 LCD1602 指令集
2.2.5 LCD初始化
三 蜂鸣器
3.1 蜂鸣器简介:
3.2 驱动电路:
3.3 蜂鸣器报警设置:
四 其它设置
4.1 报警灯设置:
4.2按键设置:
五 程序源码
六 仿真图
一 设计内容
- 利用OneWire与DS18B20通信,将DS18B20中的温度读出并显示在LCD1602上,设置温度报警界限,可通过按钮设置温度上,下限。
- 报警灯光设置:
- 温度在正常界限内LED绿灯亮;
- 超过温度下限时,黄灯亮;
- 超过温度上限时,红灯亮;
- 并在温度超过正常界限时,蜂鸣器发出报警声,蓝色LED闪烁。
- 按键设置:
- K1选择温度上限或下限;
- K2控制温度下限加减;
- K3控制温度上限加减;
二 芯片介绍
2.1 DS18B20芯片
2.2.1 DS18B20简介
- DS18B20是一种常见的数字温度传感器,其控制命令和数据都是以数字信号的方式输入输出,相比较于模拟温度传感器,具有功能强大、硬件简单、易扩展、抗干扰性强等特点
- 测温范围:-55°C 到 +125°C
- 通信接口:1-Wire(单总线)
- 其它特征:可形成总线结构、内置温度报警功能、可寄生供电
引脚及应用电路:
引脚 |
功能 |
VDD |
电源(3.0V ~ 5.5V) |
GND |
电源地 |
DQ |
单总线接口 |
存储器结构 |
2.1.2单总线介绍及应用:
单总线简介:
- 单总线(1-Wire BUS)是由Dallas公司开发的一种通用数据总线
- 一根通信线:DQ
- 异步、半双工
- 单总线只需要一根通信线即可实现数据的双向传输,当采用寄生供电时,还可以省去设备的VDD线路,此时,供电加通信只需要DQ和GND两根线
单总线电路规范:
- 设备的DQ均要配置成开漏输出模式
- DQ添加一个上拉电阻,阻值一般为4.7KΩ左右
- 若此总线的从机采取寄生供电,则主机还应配一个强上拉输出电路
单总线时序结构:
- 初始化:主机将总线拉低至少480us,然后释放总线,等待15~60us后,存在的从机会拉低总线60~240us以响应主机,之后从机将释放总线
sbit OneWire_DQ=P1^0;
unsigned char OneWire_Init(void)
{
unsigned char i;
unsigned char AckBit;
OneWire_DQ=1;
OneWire_DQ=0;
i = 247;while (--i); //Delay 500us
OneWire_DQ=1;
i = 32;while (--i); //Delay 70us
AckBit=OneWire_DQ;
i = 247;while (--i); //Delay 500us
return AckBit;
}
- 发送一位:主机将总线拉低60~120us,然后释放总线,表示发送0;主机将总线拉低1~15us,然后释放总线,表示发送1。从机将在总线拉低30us后(典型值)读取电平,整个时间片应大于60us
sbit OneWire_DQ=P1^0;
void OneWire_SendBit(unsigned char Bit)
{
unsigned char i;
OneWire_DQ=0;
i = 4;while (--i); //Delay 10us
OneWire_DQ=Bit;
i = 24;while (--i); //Delay 50us
OneWire_DQ=1;
}
- 接收一位:主机将总线拉低1~15us,然后释放总线,并在拉低后15us内读取总线电平(尽量贴近15us的末尾),读取为低电平则为接收0,读取为高电平则为接收1 ,整个时间片应大于60us
sbit OneWire_DQ=P1^0;
unsigned char OneWire_ReceiveBit(void)
{
unsigned char i;
unsigned char Bit;
OneWire_DQ=0;
i = 2;while (--i); //Delay 5us
OneWire_DQ=1;
i = 2;while (--i); //Delay 5us
Bit=OneWire_DQ;
i = 24;while (--i); //Delay 50us
return Bit;}
sbit OneWire_DQ=P1^0;
发送一个字节
void OneWire_SendByte(unsigned char Byte)
{
unsigned char i;
for(i=0;i<8;i++)
{
OneWire_SendBit(Byte&(0x01<<i));
}
}
接收一个字节
unsigned char OneWire_ReceiveByte(void)
{
unsigned char i;
unsigned char Byte=0x00;
for(i=0;i<8;i++)
{
if(OneWire_ReceiveBit()){Byte|=(0x01<<i);}
return Byte;
}
2.1.3 DS18B20的应用:
//DS18B20指令
#define DS18B20_SKIP_ROM 0xCC
#define DS18B20_CONVERT_T 0x44
#define DS18B20_READ_SCRATCHPAD 0xBE
- 初始化:从机复位,主机判断从机是否响应
ROM操作:ROM指令+本指令需要的读写操作
功能操作:功能指令+本指令需要的读写操作
ROM指令 |
功能指令 |
SEARCH ROM [F0h] |
CONVERT T [44h] |
READ ROM [33h] |
WRITE SCRATCHPAD [4Eh] |
MATCH ROM [55h] |
READ SCRATCHPAD [BEh] |
SKIP ROM [CCh] |
COPY SCRATCHPAD [48h] |
ALARM SEARCH [ECh] |
RECALL E2 [B8h] |
READ POWER SUPPLY [B4h] |
void DS18B20_ConvertT(void)
{
OneWire_Init();
OneWire_SendByte(DS18B20_SKIP_ROM);
OneWire_SendByte(DS18B20_CONVERT_T);
}
void DS18B20_ConvertT(void)
{
OneWire_Init();
OneWire_SendByte(DS18B20_SKIP_ROM);
OneWire_SendByte(DS18B20_CONVERT_T);
}
float DS18B20_ReadT(void)
{
unsigned char TLSB,TMSB;
int Temp;
float T;
OneWire_Init();
OneWire_SendByte(DS18B20_SKIP_ROM);
OneWire_SendByte(DS18B20_READ_SCRATCHPAD);
TLSB=OneWire_ReceiveByte();
TMSB=OneWire_ReceiveByte();
Temp=(TMSB<<8)|TLSB;
T=Temp/16.0;
return T;
}
2.2 LCD1602芯片
2.2.1 LCD1602简介:
- LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字符,还可以有8个自定义字符
- 显示容量:16×2个字符,每个字符为5*7点阵
2.2.2引脚及其应用电路:
引脚 |
功能 |
VSS |
地 |
VDD |
电源正极(4.5~5.5V) |
VO |
对比度调节电压 |
RS |
数据/指令选择,1为数据,0为指令 |
RW |
读/写选择,1为读,0为写 |
E |
使能,1为数据有效,下降沿执行命令 |
D0~D7 |
数据输入/输出 |
A |
背光灯电源正极 |
K |
背光灯电源负极 |
2.2.3 时序结构:
写数据/指令
2.2.4 LCD1602 指令集
2.2.5 LCD初始化
- 初始化:
发送指令0x38 //八位数据接口,两行显示,5*7点阵
发送指令0x0C //显示开,光标关,闪烁关
发送指令0x06 //数据读写操作后,光标自动加一,画面不动
发送指令0x01 //清屏
- 显示字符:
发送指令0x80|AC //设置光标位置
发送数据 //发送要显示的字符数据
发送数据 //发送要显示的字符数据
void LCD_Init()
{
LCD_WriteCommand(0x38);//八位数据接口,两行显示,5*7点阵
LCD_WriteCommand(0x0c);//显示开,光标关,闪烁关
LCD_WriteCommand(0x06);//数据读写操作后,光标自动加一,画面不动
LCD_WriteCommand(0x01);//光标复位,清屏
}
三 蜂鸣器
3.1 蜂鸣器简介:
- 蜂鸣器是一种将电信号转换为声音信号的器件,常用来产生设备的按键音、报警音等提示信号
- 蜂鸣器按驱动方式可分为有源蜂鸣器和无源蜂鸣器
- 有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定
- 无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音
3.2 驱动电路:
- 三极管驱动:
- 集成电路驱动:
3.3 蜂鸣器报警设置:
- 温度超过正常界限时,蜂鸣器发出报警声,蓝色LED闪烁。
程序源码:
sbit LED=P2^7;
sbit beer=P1^1;
//报警灯闪烁
void Lamp()
{
//while(1)
//{
LED=~LED;
Delay(500);
//}
}
//报警蜂鸣声
void Buzzer()
{
unsigned char i=0;
for(i=0;i<200;i++)
{
beer=!beer;
Delay(1);
}
}
四 其它设置
4.1 报警灯设置:
- 温度在正常界限内LED绿灯亮;
- 超过温度下限时,黄灯亮;
- 超过温度上限时,红灯亮;
程序源码:
void TemperarureAlarm_Adjust()
{
DS18B20_ConvertT(); //转换温度
T=DS18B20_ReadT(); //读取温度
//温度不在范围内报警
if( T>=THigh){ //温度超过温度上限
LED_LOW=1;
LED_HIGH=0;//黄灯亮
LED_NORMAL=1;
Lamp();
Buzzer();
}
else if(T<=TLow){ //温度低于温度下限
LED_LOW=0;
LED_HIGH=1;//红灯亮
LED_NORMAL=1;
Lamp();
Buzzer();
}
else{ //温度处于正常范围
LED_LOW=1;
LED_HIGH=1;
LED_NORMAL=0;//绿灯亮
//yinyue();
}
4.2按键设置:
- K1选择温度上限或下限;
- K2控制温度下限加减;
- K3控制温度上限加减;
程序源码:
void Type_Adjust()
{
if(k1==0){Delay(5);while(k1==0);flag=~flag;}
}
void Temperarure_Adjust()
{
if(k2==0)
{
Delay(5);
while(k2==0);
if(flag==0)
TLow++; //温度下限+
else
TLow--;//温度下限-
}
if(k3==0)
{
Delay(5);
while(k3==0);
if(flag==0)
THigh++;//温度上限+
else
THigh--;//温度上限-
}
LCD_ShowSignedNum(1,4,THigh,2);
LCD_ShowSignedNum(2,4,TLow,2);
}
五 程序源码
OneWire.c
Ds18b20.c |
Delay.c |
Adjust.c |
main.c |
六 仿真图
基于DS18B20温度检测相关推荐
- matlab ds18b20 单片机,基于51单片机ds18b20温度检测————设计报告.doc
基于51单片机ds18b20温度检测----设计报告 课程名称: 微机原理课程设计 题 目: 温度检测课程设计 摘要 随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为 ...
- 卡尔曼滤波算法在DS18B20温度检测中的应用
KalmanFilterAlgorithm 1.卡尔曼滤波算法特点 采用递归的方法解决线性滤波问题,只需要当前的测量值和前一个采样周期的估计值就能进行状态估计,需要的存储空间小,每一步的计算量小. 2 ...
- 【001】基于51单片机的DS18B20温度检测与报警装置的proteus仿真设计
一.设计资料内容(私信获取) 1. 包含proteus仿真一份: 2. keil源代码一份: 3. 包含基于51单片机的DS18B20温度监测与报警的proteus仿真设计课程报告一份: 4. 包含基 ...
- ds18b20c语言keil,DS18B20温度检测调节程序(C代码)
#include"reg52.h" #include"intrins.h" #include"absacc.h" #define uint ...
- 单片机温度检测高温报警系统 汇编语言
单片机温度检测高温报警系统 实验目的 1) 掌握 51 单片机定时器/计数器工作原理与应用: 2) 掌握 51 单片机中断系统工作原理与应用: 3) 掌握 Keil μVision 软件开发环境,汇编 ...
- 基于51单片机多路温度检测proteus仿真 ds18b20
本设计是基于51单片机多路温度检测proteus仿真_ds18b20(仿真+程序+原理图) 仿真图proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:C0042 ...
- ds18b20温度转换指令_学习心得 | 温度检测工程模块划分总结与案例分析
本文为明德扬原创文章,转载请注明出处! 很多朋友在学习FPGA的时候会发现模块划分很令人头大,今天我就通过明德扬温度检测工程来与大家分享一下本人的划分思路. 明德扬温度检测工程是基于FPGA的一个实用 ...
- 基于51单片机的多路温度检测调节串口传输系统
本设计基于51单片机的多路温度检测调节串口传输系统(仿真+源码+视频讲解) 仿真:proteus8.9 程序编译器:keil 4 编程语言:C语言 编号C0009 [腾讯文档]C0009 网盘链接 资 ...
- 基于单片机双路温度检测报警系统设计-基于单片机声光控智能开关控制灯设计-基于单片机热电偶智能体温检测设计-基于单片机小型家用燃气锅炉控制系统设计-基于单片机一氧化碳有毒气体采集报警系统设计
1628基于单片机双路温度检测报警系统设计(串口上位机控制) 基于pcf8591 tlc2543的双路温度检测报警系统 带串口上位机控制带仿真 源程序 温度传感器是 LM35 两路测温通道所用的ad芯 ...
最新文章
- 区块链公司Coingeek支持一系列BCH协议变更
- HyperLink的使用
- 【MASHIII调制器】MASHIII调制器的Simulink建模与仿真
- 最近安装了win2008R2,界面比win2003友好多了
- 开源的pop3和smtp组件(支持中文及SSL)
- CCNA-第四篇-OSI模型-下
- 非空参数校验的工具类
- php日历表代码,PHP输出日历表代码实例
- 国内期刊 CCT 模板编译经验
- 联想电脑尺寸在哪里看_笔记本型号在哪里看 怎么看笔记本屏幕大小
- 昆明理工计算机学硕,昆工计算机老师之我见
- 如何使用 Reflector Keygen
- 按头安利 好看又实用的毛笔书法字体素材看这里
- intellij idea maven项目jdk版本会自动重置
- DES加密算法的C++实现
- deepin20.7隐藏分区
- asn.1 rsa java_android - RSA公钥生成失败:“错误:0c0000be:ASN.1编码例程:OPENSSL_internal:WRONG_TAG” - 堆栈内存溢出...
- [AHU2021校内赛] ez-injection
- 移动硬盘无法弹出,显示被进程占用(system占用)
- 微信开发自带版本管理的使用(图文)---推送,抓取,拉取,贮藏