51单片机DS18B20温度传感器
时间:2019-03-19
本文章向大家介绍51单片机DS18B20温度传感器,主要包括51单片机DS18B20温度传感器使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
#include <reg52.h>
//宏定义
sbit RS = P3^5;
sbit RW = P3^6;
sbit EN = P3^4;
sbit DQ = P2^2;
unsigned int shuju;
unsigned char a;
unsigned char b;
unsigned char c;
unsigned char code digital[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
//延时函数
void yanchi_1602(unsigned char q)
{
unsigned char p;
while(q--)
{
for(p=0;p<=113;p++);
}
}
//
void Delay(int n)
{
while(n--);
}
//发送命令
void Wcmd(unsigned char cmd)
{
RS = 0;
RW = 0;
EN = 1;
P0 = cmd;
yanchi_1602(5);
EN = 0;
}
//发送数据
void Wdat(unsigned char dat)
{
RS = 1;
RW = 0;
EN = 1;
P0 = dat;
yanchi_1602(5);
EN = 0;
}
//初始化1602屏幕
void start_1602()
{
Wcmd(0x01); //清屏
Wcmd(0x02); //光标归位
Wcmd(0x06); //设置输入模式
Wcmd(0x0C); //显示设置
Wcmd(0x38); //功能设置
}
//
void plan()
{
a = shuju/100;
b = shuju%100/10;
c = shuju%10;
}
//B站
//初始化DS18B20
void Init_18b20()
{
DQ = 1; //DQ复位
Delay(4); //延时
DQ = 0; //DQ拉低
Delay(100); //精确延时大于48us
DQ = 1; //DQ拉高
Delay(40); //延时
}
//读数据函数
unsigned char Readdat()
{
unsigned char i = 0;
unsigned char dat = 0;
for(i=8;i>0;i--)
{
DQ = 1;
Delay(1);
DQ = 0;
dat >>= 1;
DQ = 1;
if(DQ)
dat |= 0x80;
Delay(10);
}
return(dat);
}
//写数据函数
void Writedat(unsigned char dat)
{
unsigned char i = 0;
for(i=8;i>0;i--)
{
DQ = 0;
DQ = dat & 0x01;
Delay(10);
DQ = 1;
dat >>= 1;
}
}
//读取温度
unsigned int ReadDigital(void)
{
unsigned char m;
unsigned char n;
Init_18b20();
Writedat(0xcc); //跳过读序列号
Writedat(0x44); //启动温度转换
Delay(5);
Init_18b20();
Writedat(0xcc); //跳过读序列号
Writedat(0xbe); //开始读取温度
m = Readdat();
n = Readdat();
shuju = n;
shuju <<= 8;
shuju = shuju|m;
shuju = (shuju*0.0625)*10; //温度值扩大十倍,精确到一位小数
return(shuju);
}
void main()
{
start_1602();
Wcmd(0x82);
Wdat('t');
Wcmd(0x83);
Wdat('e');
Wcmd(0x84);
Wdat('m');
Wcmd(0x85);
Wdat('p');
Wcmd(0x86);
Wdat('e');
Wcmd(0x87);
Wdat('r');
Wcmd(0x88);
Wdat('a');
Wcmd(0x89);
Wdat('t');
Wcmd(0x8a);
Wdat('u');
Wcmd(0x8b);
Wdat('r');
Wcmd(0x8c);
Wdat('e');
Wcmd(0x8d);
Wdat(':');
while(1)
{
shuju = ReadDigital();
plan();
Wcmd(0xc4);
Wdat('+');
Wcmd(0xc5);
Wdat(digital[a]);
Wcmd(0xc6);
Wdat(digital[b]);
Wcmd(0xc7);
Wdat('.');
Wcmd(0xc8);
Wdat(digital[c]);
}
}
- 阅读Ext 学习Javascript(二)Core/Ext.extend 从继承说起
- IronPython资料
- WordPress免插件仅代码实现“返回顶部、返回底部、评论”效果(样式一)
- encodeURIcomponent编码和ASP.NET之间编码转换
- WordPress免插件仅修改代码去掉评论/留言里的链接
- 阅读Ext 学习Javascript(一)Core/Ext.js
- 利用腾讯的ip地址库做ip地址定位
- WordPress登陆不了后台的原因及解决方法(登陆界面不断返回)
- select元素的options.add 与 insertbefore的区别
- 如何去理解 拓扑排序算法
- WordPress免插件仅代码实现文章归档(模板页面)I
- Bing Map App 开发 还没入门遇见错误无法继续
- 使用MongoDB的支持Linq 驱动NoRM
- Ext的组件模型印象
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android中使用ListView模拟微信好友功能
- Android实现压缩字符串的方法示例
- Android使用OkHttp请求自签名的https网站的示例
- Android Notification 使用方法详解
- Android空心圆及层叠效果实现代码
- 如何更改Dialog的标题与按钮颜色详解
- Android编程之数据库的创建方法详解
- android studio集成ijkplayer的示例代码
- Android开发实现浏览器全屏显示功能
- Android动态人脸检测的示例代码(脸数可调)
- Android抽奖轮盘的制作方法
- Android 获取屏幕的多种宽高信息的示例代码
- Android编程实现禁止StatusBar下拉的方法
- Android自定义view圆并随手指移动
- Android仿微信发送语音消息的功能及示例代码