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]);
}
}
- mockjs,json-server一起搭建前端通用的数据模拟框架
- Oozie分布式工作流——流控制
- C++命名规则
- 论JavaScript的作用域
- 删除链表中的重复元素
- Single Number and Single Number II
- 前端限制上传文件的类型
- JavaSript模块规范 - AMD规范与CMD规范介绍
- [大数据之Sqoop] —— Sqoop初探
- [大数据之Sqoop] —— 什么是Sqoop?
- Node.js包管理器Yarn的入门介绍与安装
- static_cast ,reinterpret_cast
- NodeJS使用formidable实现文件上传
- 签下北方最大港口,聚焦无人驾驶卡车技术的主线科技朝商业化又进一步
- 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 数组属性和方法