DS18B20测量温度液晶1602显示
DS18B20温度传感器简介
DS18B20是一种数字温度传感器。它输出的是数字信号,同时具有体积小,硬件资源耗费少,抗干扰能力强,精度高等特点。
DS18B20温度传感器特点
1、单线接口:DS18B20仅需一条线可实现与微处理器双向通信。
2、测温范围: DS18B20温度传感器的测温范围可达-55℃~+125℃,在-10℃到+85℃范围内误差为±0.4°。
3、支持多点组网功能:多个DS18B20温度传感器可以并联在一条数据线上,最多可以并联8个,实现多点测温。
4、工作电源: 3.0~5.5V/DC ,DS18B20温度传感器可以采用外部独立电源供电,也可以用数据线寄生电源供电。
5、DS18B20温度传感器在应用过程中不需要任何外围元件。
6、DS18B20测量温度的结果以9~12位数字量方式串行传送。
7、掉电保护功能, DS18B20温度传感器内部含有 EEPROM ,通过配置寄存器可以设定数字转换精度和报警温度。在DS18B20温度传感器掉电以后仍可保存分辨率及报警温度的设定值。
8、DS18B20温度传感器返回16位二进制数代表此刻探测的温度值,其高五位代表正负。如果高五位全部为1,则代表返回的温度值为负值。如果高五位全部为0,则代表返回的温度值为正值。后面的11位数据代表温度的绝对值,将其转换为十进制数值之后,再乘以0.0625即可获得此时的温度值。
DS18B20温度传感器引脚说明
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
DS18B20温度传感器接口电路
![](/assets/blank.gif)
液晶1602接口电路
![](/assets/blank.gif)
DS18B20测量温度程序源代码
/***************DS18B20测量温度,用1602显示温度值***************
* 单片机:51单片机
* 开发环境:keil
* 功能: DS18B20测量温度,并在LCD1602中显示出来
**********************************************************************/
#include <reg51.h>
#define LCD_Data P0
#define Busy 0x80
#define uchar unsigned char
#define uint unsigned int
uchar code table0[] = {" SL-51A "};
uchar code table1[] = {" TEMP: XX.X "};
uchar temperature[5]; //温度值
uint temp;
sbit LCD_RS = P1^0;
sbit LCD_RW = P1^1;
sbit LCD_E = P2^5;
sbit DS = P2^2;
void Delay5Ms(void);
void delay(uint count);
void WriteDataLCD(unsigned char WDLCD);
void WriteCommandLCD(unsigned char WCLCD,BuysC);
unsigned char ReadDataLCD(void);
unsigned char ReadStatusLCD(void);
void LCDInit(void);
void DisplayOneChar(unsigned char X, unsigned charY, unsigned char DData);
void DisplayListChar(unsigned char X, unsignedchar Y, unsigned char code *DData);
void Info_display(void);
void dsreset(void);
bit tmpreadbit(void);
uchar tmpread(void);
void tmpwritebyte(uchar dat);
void tmpchange(void);
uint tmp();
void delay(uint count)
{
uint i;
while(count)
{i=200;while(i>0)i--;count--;}
}
void dsreset(void) //发复位命令
{
uint i;
DS=0;i=103;while(i>0)i--;
DS=1;i=4;while(i>0)i--;
}
bit tmpreadbit(void) //读取一位
{
uint i;
bit dat;
DS=0;i++;
DS=1;i++;i++;
dat=DS;
i=8;while(i>0)i--;
return(dat);
}
uchar tmpread(void) //读取一个字节
{
uchari,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=tmpreadbit();
dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面
}
return(dat);
}
void tmpwritebyte(uchar dat) //向ds18b20写入一个字节
{
uint i;
uchar j;
bit testb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb)
{
DS=0;i++;i++;
DS=1;i=8;while(i>0)i--;
}
else
{
DS=0;i=8;while(i>0)i--;
DS=1;i++;i++;
}
}
}
void tmpchange(void) //DS18B20开始转换
{
dsreset();delay(1);
tmpwritebyte(0xcc); //命令的含义可以查18b20的手册
tmpwritebyte(0x44);
}
uint tmp() //获取温度值
{
float tt;
uchar a,b;
dsreset();delay(1);
tmpwritebyte(0xcc);
tmpwritebyte(0xbe);
a=tmpread();
b=tmpread();
temp=b;
temp<<=8;
temp=temp|a;
tt=temp*0.0625;
temp=tt*10+0.5;
returntemp;
}
/*************************5ms延时函数***************************/
void Delay5Ms(void)
{
unsignedint TempCyc = 3552;
while(TempCyc--);
}
/**************************写数据函数***************************/
void WriteDataLCD(unsigned char WDLCD)
{
ReadStatusLCD(); //检测忙
LCD_Data =WDLCD;
LCD_E = 0; //若晶振速度太高可以在这后加小的延时
LCD_E = 0; //延时
LCD_RS = 1;
LCD_RW = 0;
LCD_E = 1;
LCD_E = 0;
}
/*************************写指令函数****************************/
void WriteCommandLCD(unsigned charWCLCD,BuysC) //BuysC为0时忽略忙检测
{
if (BuysC)ReadStatusLCD(); //根据需要检测忙
LCD_Data =WCLCD;
LCD_E = 0;
LCD_E = 0;
LCD_RS = 0;
LCD_RW = 0;
LCD_E = 1;
LCD_E = 0;
}
/**************************读状态函数***************************/
unsigned char ReadStatusLCD(void)
{
LCD_Data =0xFF;
LCD_RS = 0;
LCD_RW = 1;
LCD_E = 0;
LCD_E = 0;
LCD_E = 1;
while(LCD_Data & Busy); //检测忙信号
return(LCD_Data);
}
/***************************LCD初始化***************************/
void LCDInit(void) //LCD初始化
{
LCD_Data =0;
WriteCommandLCD(0x38,0); //三次显示模式设置,不检测忙信号
Delay5Ms();
WriteCommandLCD(0x38,0);
Delay5Ms();
WriteCommandLCD(0x38,0);
Delay5Ms();
WriteCommandLCD(0x38,1); //显示模式设置, 开始要求每次检测忙信号
WriteCommandLCD(0x08,1); //关闭显示
WriteCommandLCD(0x01,1); //显示清屏
WriteCommandLCD(0x06,1); //显示光标移动设置
WriteCommandLCD(0x0C,1); //显示开及光标设置
}
/**********************按指定位置显示一个字符*********************/
void DisplayOneChar(unsigned char X, unsigned charY, unsigned char DData)
{
Y &=0x1;
X &=0xF; //限制X不能大于15,Y不能大于1
if (Y) X |=0x40; //当要显示第二行时地址码+0x40;
X |=0x80; //算出指令码
WriteCommandLCD(X,0); //这里不检测忙信号,发送地址码
WriteDataLCD(DData);
}
/***********************按指定位置显示一串字符********************/
void DisplayListChar(unsigned char X, unsignedchar Y, unsigned char code *DData)
{
unsignedchar ListLength;
ListLength= 0;
Y &=0x1;
X &=0xF; //限制X不能大于15,Y不能大于1
while(DData[ListLength]>=0x20) //若到达字串尾则退出
{
if (X<= 0xF) //X坐标应小于0xF
{
DisplayOneChar(X, Y, DData[ListLength]);//显示单个字符
ListLength++;
X++;
}
}
}
/*****************************************************************/
void temp_display(unsigned int temp) //显示程序
{
unsignedchar A1,A2,A2t,A3;
A1=temp/100; //百位
A2t=temp%100;
A2=A2t/10; //十位
A3=A2t%10; //个位
temperature[1]=A1 + 0x30;
temperature[2]=A2 + 0x30;
temperature[3]=A3 + 0x30;
DisplayOneChar(9,1,temperature[1]);
DisplayOneChar(10,1,temperature[2]);
DisplayOneChar(12,1,temperature[3]);
}
/******************************************************************/
void init()
{
LCDInit();
DisplayListChar(0,0,table0);
DisplayListChar(0,1,table1);
}
void main()
{
int i;
init();
while(1)
{
tmpchange();
for(i=0;i<=10;i++)
{if(i==10){temp_display(tmp());}}
}
}
DS18B20测量温度液晶1602显示相关推荐
- DS18B20测量温度数码管显示
DS18B20温度传感器简介 DS18B20是一种数字温度传感器.它输出的是数字信号,同时具有体积小,硬件资源耗费少,抗干扰能力强,精度高等特点. DS18B20温度传感器特点 1.单线接口:DS18 ...
- 18b20温度检测及其lcd显示_单片机使用DS18B20测量温度的程序
\ 单片机使用DS18B20测量温度的程序 //main.c #include #include #include "18B20.h" #include"disp.h&q ...
- ATMEGA16读取DS18B20温度,1602显示,并用proteus仿真,成功。
ATMEGA16单片机读取DS18B20的温度数据,用lcd1602显示,并用proteus实现仿真. 实现温度的实时读取,程序中设定温度的上下限,当温度超限时报警,用led小灯进行 指示. 开发环境 ...
- DS18B20测量温度
文章目录 一.DS18B20读取温度步骤 二.初始化复位时序 2.发送一个字节 二.读取数据 1.读取一个Bit 2.读取一个字节 三.启动温度转换 四.判断转换完成 五.读取温度 程序地址 一.DS ...
- c51单片机c语言显示矩形波,51单片机和DAC0832输出方波、矩形波和正弦波由液晶1602显示的C语言程序...
显示频率,幅度可调,可产生四种波形,正弦波,方波,锯齿波,三角波,希望你能喜欢,给你发了一张效果图,喜欢的话别忘了采纳我的回答啊 #include #define uchar unsigned cha ...
- 51单片机驱动DS18B20温度传感器测量温度
51单片机驱动DS18B20温度传感器测量温度 1.DS18B20温度传感器介绍: 2.51单片机驱动DS18B20测量温度 1.DS18B20温度传感器介绍: ①引脚定义 引脚 符号 说明 1 GN ...
- 51单片机使用LCD1602显示DS18B20温度传感器温度
使用LCD1602显示DS18B20温度传感器温度.关于DS18B20和LCD的原理,我就不再叙述了,大家自行查找,网上可以找到好多. 使用Proteus仿真.(需要仿真和Keil工程文件的可 ...
- ds18b20c语言显示小数位,DS18B20多点测温(读序列,匹配序列,51单片机C程序,1602显示)...
DS18B20多点测温(读序列,匹配序列,51 C程序,1602显示) 程序一:单个读序列号.程序二,匹配并且读两个DS18B20,当然,读多个与读两个基本原理一样,只要加上其序列号等即可.本程序所有 ...
- DS18B20温度转换与显示
单片机练习 - DS18B20温度转换与显示 最近都在学习和写单片机的程序, 今天有空又模仿DS18B20温度测量显示实验写了一个与DS18B20基于单总线通信的程序. DS18B20 数字温度传感器 ...
最新文章
- 关于mysql字符集及导入导出
- 深度学习已经彻底改变了制造业的质量控制,但还不够深入
- RHEL7 timedatectl命令
- 网络入侵检测规避工具fragrouter
- VideoTool之FFmpeg:FFmpeg的简介、安装、使用方法之详细攻略
- [转] Vuex入门(2)—— state,mapState,...mapState对象展开符详解
- 解决git@github.com: Permission denied (publickey). fatal: Could not read from remote repository. Pleas
- PAT 1048 数字加密
- JS高级——内存管理和闭包
- 监听浏览器返回上一页
- android 类的设计,Android App的类响应式设计
- 基于Lumisoft.NET组件开发碰到乱码等一些问题的解决
- linux怎么看系统盘,Linux系统怎么查看电脑的磁盘空间?
- 关于合格工程师素养的一些思考
- timesten mysql_timesten内存数据同步创建
- java groovy 乱码_解决Groovy复制文件的乱码
- 人人看得懂的ChatGPT技术原理解析
- 利用C#2005为你的软件制作小精灵
- make出错,编译通不过的解决办法
- android计算bmi的程序,简单的基于android的BMI计算应用
热门文章
- UT-Exynos4412 三星ARM四核旗舰开发平台android4.0体验-13串口功能调试
- 软件工程之制定计划①(可行性研究报告、项目开发计划)
- 美团2018测开编程题——改卷子魔法表
- 【JavaScript实现十进制转换成二进制】
- 计算机毕业优秀作品展观后感,毕业展观后感
- carsim与simulink联合仿真-ABS(制动防抱死系统) 入门——详细步骤
- 使用hMailServer搭建邮件服务器(windows邮件服务器)
- C语言——PTA 用格里高利公式求给定精度的PI值
- 小老弟linux进击之路(一)
- 怎样做中长线股票,中长线炒股技巧有哪些?