STC15w4k32s 数字温度传感器 DS18B20 +Lcd1602
DS18B20有九个字节寄存器,前四个是常用的,前两个温度转换,后两个温度上下限制
工具:
Keil uVision5
stc-isp-15xx-v6.86L
stc15w4k56s开发板
面包板
温度传感器DS18B20+电阻
液晶显示屏LCD1602
电路图连:DS18B20字面 对应引脚GND(1) IO(2) VDD(3) 电阻10K
头文件:
#include"stc15w4k32s4.h"
#include"intrins.h"
#include"delay.h"
#include"lcd1602.h"/*----------- 端口定义 -----------*/
sbit DQ=P1^7; //ds18b20 端口/*--------- 函数声明 ------------*/
bit Init_DS18B20(void);
unsigned char ReadOneChar(void);
void WriteOneChar(unsigned char dat);
unsigned int ReadTemperature(void);
DS18B20:
/*------- 18b20初始化 -----------*/bit Init_DS18B20(void)
{bit dat;//激活六步走DQ = 1; //复位开始 DelayUS(5); DQ = 0; DelayUS(260); //652us 精确延时 大于 480us 小于960usDQ = 1; DelayUS(50); //15~60us 后 接收60-240us的存在脉冲//复位结束dat=DQ; //若初始化成功,DQ保持低电平状态//while(dat==1);DelayUS(25); //稍作延时返回return dat;
}/*------- 单片机读取一个字节(低位先出) -------*/unsigned char ReadOneChar(void)
{unsigned char i;unsigned char dat=0; //先假设读入的是八个0for (i=0; i<8; i++){dat>>=1; //dat右移一位,【dat最高位置D7移走】 //激活四步走DQ = 0; DelayUS(1);DQ = 1; DelayUS(1);//读取18B20的DQ线上的比特数据if(DQ==1) dat|=0x80; //如果读入的DQ是1,将1替换dat最高位置比特D7 DelayUS(60);}return(dat);
}void WriteOneChar(unsigned char dat)
{char i;for (i=0; i<8; i++){//激活2步走DQ = 0; DelayUS(1);DQ = dat&0x01; //提取dat最低位置比特D0,赋给DQDelayUS(60);//善后1步走DQ = 1; // 写结束dat>>=1; //把dat高位比特往最低位置D0方向移动DelayUS(1);}
}
主程序:
/*------- 读取温度 -------*/unsigned int ReadTemperature(void)
{unsigned char a; //储存温度的低字节unsigned int b=0; //储存温度的高字节unsigned int t=0; //储存16位温度补码//第一个周期Init_DS18B20(); // 第1步:DS18B20复位WriteOneChar(0xCC); // 第2步:下达不读序列号的命令 WriteOneChar(0x44); // 第3步:下达启动温度转换命令DelayMS(10); // 第4步:适当延时//第二个周期Init_DS18B20(); // 第1步:DS18B20复位WriteOneChar(0xCC); // 第2步:下达不读序列号的命令 WriteOneChar(0xBE); // 第3步:下达读SRAM的命令// 第4步:读取温度寄存器(共可读9个寄存器)a=ReadOneChar(); //温度值的低8位 b=ReadOneChar(); // 温度值的高8位b<<=8; // 温度的高字节到位t=a+b; //16位温度补码return(t);
}
在主程序调用ReadTemperature():
int Disp_temp() //显示温度函数
{int t,y,z;long k;t=ReadTemperature(); //16位温度补码//判断温度正负,并求温度的绝对值if(t&0x8000){disp(5,'-');t=(~t)+1; //负温度的绝对值}else disp(5,'+');//t已经是温度的绝对值y=t>>4; //提取真实温度的整数部分z=y/100; //求温度值的百位数字disp(6,z+0x30); //送LCD1602显示z=y%100/10; //求温度值的十位数字disp(7,z+0x30); //送LCD1602显示z=y%10; //求温度值的个位数字 disp(8,z+0x30); //送LCD1602显示disp(9,'.'); //显示小数点k=t&0x000f; //提取真实温度的小数部分,小数部分权重0.0625k=(k*10+8)/16; //求温度值的小数部分数字,保留1位小数第2位四舍五入disp(10,k+0x30); //送LCD1602显示disp(11,'C'); //显示摄氏度return y;}
主函数:
void main()
{ unsigned char i,xs[]={"Temp:"};char Tl,Th;P1M0 = 0x00;P1M1 = 0x00; P4M0 = 0x00;P4M1 = 0x00;P5M0 = 0x00;P5M1 = 0x00;LCD_Initial(); //LCD1602初始化for(i=0;i<5;i++)disp(i,xs[i]); //在液晶屏的第1行显示Temp: while(1){Disp_temp(); //调用显示温度函数delay_ms(1000);}}
不足:ds18b20的温度上下限难以读出来(希望指教)
仅供学习
STC15w4k32s 数字温度传感器 DS18B20 +Lcd1602相关推荐
- Arduino基础入门篇30—数字温度传感器DS18B20
温度传感器的种类繁多,按照测量方式分为接触式和非接触式,按照传感器材料分为热电阻和热电偶两类,按照工作原理分为模拟式和数字式.上一篇介绍了模拟温度传感器LM35,本篇介绍数字温度传感器DS18B20的 ...
- STM32应用(八)数字温度传感器DS18B20、数字温湿度传感器DHT11(软件模拟I2C)
文章目录 1.DS18B20 数字温度传感器实验 1.1 DS18B20简介 1.2 硬件与IO口配置 1.3 实物图与接线 1.4 工程配置 1.5 驱动和检测代码编写 1.5.1 ds18b20. ...
- ds18b20和plc接线图_数字温度传感器DS18B20怎么应用到PLC S7-200中?-工业支持中心-西门子中国...
支持何种协议,如它支持Modbus等通讯还好搞些,这才是你要关心的核心问题.在某宝上查到此款产品已带继电器开关量输出并可设置那你只直接用它输出作DI输入吧! 回答者: AutoStart - 资深顾问 ...
- 基于DS18B20数字温度传感器的温度计设计
基于DS18B20数字温度传感器的温度计设计 本报告为哈尔滨工业大学电子与信息工程学院大二学期微机原理课程的课设报告.请注意,本文所述代码均在Quartus II 13.0程序内使用汇编语言运行. 一 ...
- Arduino基础篇(七)-- 如何使用DS18B20数字温度传感器(基于OneWire和DallasTemperature库)
温度传感器是指能感受温度并转换成可用输出信号的传感器.按测量方式分为接触式和非接触式,按照传感器材料及电子元件分为热电阻和热电偶两类,按照工作原理分为模拟式和数字式.本篇主要介绍数字温度传感器 DS1 ...
- 【FPGA的基础快速入门15------DS18B20数字温度传感器】
FPGA的基础学习------DS18B20数字温度传感器 DS18B20简介 命令 数据格式 数据时序 写操作 读操作 DS18B20简介 DS18B20是常用的数字温度传感器,其输出数字信号来表示 ...
- 基于数字温度传感器的数字温度计 华氏度和摄氏度
课程设计题三十一: 基于数字温度传感器的数字温度计 (1) 设计要求: 利用数字温度传感器DS18B20与单片机结合来测量温度.利用数字温度传感器DS18B20测量温度信号,计算后在LED数码管上显 ...
- 温度传感器的c语言程序,DS18B20数字温度传感器C语言程序实例
51单片机DS18B20数字温度传感器设计 与C程序 #include #define uchar unsigned char #define uint unsigned int #define DQ ...
- DS18B20数字温度传感器
目录 一.基础知识 1.基础介绍: 2.DS18B20特点: 3.单总线时序 4.相关操作时序 5.部分ROM指令 二.相关代码 1. 使用步骤(单点总线情况) 2. 代码展示 数字温度传感器你会用了 ...
最新文章
- android读取工程目录下的文件,Android编程实现读取工程中的txt文件功能
- 谈谈基于OAuth 2.0的第三方认证 [上篇]
- c语言为什么提供函数声明机制,通过实战理解C语言精要——函数篇
- Flutter基础知识链接汇总(持续更新中)
- c# 读取大文件方法
- 信息学奥赛一本通 2046:【例5.15】替换字母
- testing framework
- 51nod 1062 序列中最大的数【打表】
- mysql怎样在bat脚本中添加日志_如何在windows下用bat脚本定时备份mysql
- SIMATIC HMI操作系统更新
- springboot整合阿里云OSS存储(对象存储)图文详解-———入门操作指南。
- 详解 误差反向传播算法推导
- mashang6.edu.cn
- python俄罗斯方块小游戏实验报告_用Python实现童年小游戏俄罗斯方块
- 域名防红直连防封怎么布置?
- k8s实战入门——Service
- 自然语言14_Stemming words with NLTK
- BCS2022|“体系化防御,数字化运营” 奇安信终端安全能力再升级
- 官方免费工具(ODT)安装新版 Office2021【视频演示】
- 血战力扣 332.零钱兑换