51(52)单片机 DS18B20温度传感器与数码管的综合运用

news/2024/11/30 8:53:58/

单片机小白

DS18B20温度传感器的数据经过处理显示在数码管上

运行效果:

在这里插入图片描述

代码:

#include <reg52.h>
#include <intrins.h>typedef unsigned char u8;
typedef unsigned int u16;
typedef signed int s16;sbit IO_18B20=P3^7;sbit add_1=P2^2;sbit add_2=P2^3;sbit add_3=P2^4;u8 DQ;u8 c[8];u8 code a[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9void Delay_ms(unsigned char ms)//定时器延时函数{unsigned char T=0;TMOD=0x01;TH0=0xfb;TL0=0x80;TR0=1;while(T<ms){if(TF0==1){TF0=0;TH0=0xfb2 ;TL0=0x80;T++;}}}//1.25*msvoid Delay(u16 i)//延时
{while(i--);	
}void init_18B20()//DS18B20初始化
{IO_18B20=0;Delay(100);        IO_18B20=1;Delay(5);  DQ=IO_18B20;Delay(80);         }void write_cmd(u8 cmd)//DS18B20写时序
{u8 i;for(i=0;i<8;i++){IO_18B20=0;_nop_();         IO_18B20=cmd&0x01;Delay(6);         IO_18B20=1;cmd>>=1;}}u8 read_cmd()//DS18B20读时序
{u8 j,by,byte;for(j=0;j<8;j++){IO_18B20=0;_nop_();         IO_18B20=1;_nop_();  _nop_();      by=IO_18B20;byte=(byte>>1)|(by<<7);Delay(4);         }return byte;}void change_temper()//温度转换
{init_18B20();if(DQ==0){write_cmd(0xcc);//跳过ROMwrite_cmd(0x44);//温度转换后存储在暂存寄存器的2个字节长度的温度寄存器中}}void read_temper()//读温度
{init_18B20();if(DQ==0){write_cmd(0xcc);//跳过ROMwrite_cmd(0xbe);//读取暂存寄存器}
}s16 DS18B20temp_data()//采集DS18B20中cache温度数据
{s16 temp;u8 temph,templ;change_temper();read_temper();templ=read_cmd();temph=read_cmd();temp=temph;temp<<=8;temp|=templ;return temp;}void datapros(s16 temp)//将采集的数据按照规定的分辨率转化为数字
{float tp;if(temp<0){ c[0]=0x40;temp=~temp;temp+=1;tp=temp;temp=tp*0.0625*100+0.5;}else{c[0]=0x00;tp=temp;temp=tp*0.0625*100+0.5;   //0.0625为分辨率   100:保留两位小数  0.5:精度}c[1] = a[temp/1000%10];//显示温度十位c[2] = a[temp/100%10]+0x80;//显示温度个位c[3] = a[temp/10%10];//显示一位小数}	void shuaxin()//刷新数码管{add_1=0;add_2=0;add_3=0;P0=0x39;   //数码管显示  CDelay_ms(1);	P0=0x00;add_1=1;add_2=0;add_3=0;P0=c[3];Delay_ms(1);	P0=0x00;add_1=0;add_2=1;add_3=0;P0=c[2];Delay_ms(1);	P0=0x00;add_1=1;add_2=1;add_3=0;P0=c[1];Delay_ms(1);	P0=0x00;add_1=0;add_2=0;add_3=1;P0=c[0];Delay_ms(1);	P0=0x00;}	void main()//主函数 ---显示
{while(1){datapros(DS18B20temp_data());	 shuaxin();}
}

http://www.ppmy.cn/news/368142.html

相关文章

51单片机DS18B20温度报警器

主要是对主函数逻辑的编写&#xff0c;主要有两个注意点&#xff1a; ①将按键换成定时器扫描&#xff0c;要注意&#xff0c;单总线进行传输时&#xff0c;要关闭定时器中断&#xff0c;传输结束后再打开定时器&#xff0c;所有的单总线都得这样。因为单总线中必须要进行延时…

51单片机DS18B20温度传感器使用及数码管温度计、LCD1602温度显示代码详解

温馨提示&#xff1a;读者若要彻底理解并会灵活使用DS18B20温度传感器&#xff0c;请详细阅读中文手册&#xff0c;并且对照代码注释充分分析代码。请不要觉得中文手册内容繁多&#xff01;如能静心分析&#xff0c;定能深有体会&#xff0c;获益匪浅&#xff01; 一、DS18B20中…

pandas---数据合并(concat、append、merge)

1. concat函数 pd.concat([data1, data2], axis1) 按照行或列进行合并&#xff0c;axis0为列索引&#xff0c;axis1为行索引。 df1 make_df([1, 2], [A, B]) df2 make_df([3, 4], [A, B]) display(df1, df2) # 默认上下合并&#xff0c;垂直合并 pd.concat([df1, df2]) …

超声波测距系统(stc89c52单片机+lcd1602+srf04超声波传感器+DS18B20温度传感器+无源蜂鸣器)

求赞,它是我写博客的动力,请鼓励鼓励我,谢谢 基于超声波测距的倒车报警系统。 计划通过超声波传感器测距&#xff0c;温度传感器校正误差&#xff0c;lcd1602显示结果&#xff0c;距离小于某一值时将蜂鸣报警。 总体设计思路 HC-SR04超声波传感器模块为核心装置&#xff0c;…

DS18B20数字温度计设计

一、单片机简介. 1 二、设计任务和要求. 1 三、设计方案的总体设计框图. 1 3&#xff0e;1硬件电路框图. 1 3&#xff0e;2硬件电路概述. 2 3&#xff0e;3主控电路. 2 3&#xff0e;4显示电路. 2 3&#xff0e;5报警温度调节电路. 3 3. 7硬件电路连接引脚说明. 4 3. 8单片机硬…

51单片机DS18B20温度传感器及数码管显示温度

51单片机DS18B20温度传感器及数码管显示温度 大家好&#xff0c;今天给大家带来的代码及原理解释是&#xff0c;在51单片机在接收DS18B20温度传感器数据&#xff0c;并且在数码管上实时显示温度 DS18B20及数码管显示温度介绍 51单片机DS18B20温度传感器及数码管显示温度 DS18B…

基于51单片机+DS18B20温度测温器+LCD1602显示

DS18B20温度传感器 DS18B20相关介绍学习视频推荐DS18B20特性封装形式与引脚说明供电方式&#xff08;外部电源供电、寄生电源供电、寄生电源强上拉&#xff09;内部结构温度存储格式及配置寄存器&#xff08;模式和分辨率&#xff09;DS18B20指令&#xff08;ROM指令操作&#…

自动化项目倍加福测距仪QSM WCS RS485 与西门子S7 200通信

1、程序流程图 2、WCS位置数据处理流程 第一步&#xff1a;设置S7-200的RS485的通讯波特率19.2kbps&#xff0c;通讯格式&#xff08;8&#xff0c;1&#xff0c;E&#xff09;&#xff1b; 第二步&#xff1a;PLC向WCS发送请求码&#xff1a; A0A1为0&#xff0c;表示读码器地…