蓝桥杯单片机之模块代码《小数点精确后两位ds18b20》

文章详细介绍了DS18B20温度传感器的工作原理、特性、通信方式以及在单片机项目中的应用流程,包括头文件使用、流程图展示和省赛代码示例,展示了如何通过单线接口获取并显示温度值。
摘要由CSDN通过智能技术生成

过往历程

历程1:秒表

历程2:按键显示时钟

历程3:列矩阵按键显示时钟

历程4:行矩阵按键显示时钟

历程5:新DS1302



前期准备

1:本文使用的头文件是由stc生成
在这里插入图片描述
点击保存文件之后,保存至自己文件目录下方即可
在这里插入图片描述
2:本文使用的都是官方提供的底层驱动代码
在这里插入图片描述

一、DS18B20是什么?

DS18B20是一款常用的高精度的单总线数字温度测量芯片。具有体积小,硬件开销低,抗干扰能力强,精度高的特点。

二、大概认知

1:测温范围为-55℃到+125℃,在-10℃到+85℃范围内误差为±0.4°。

2:返回16位二进制温度数值

3:主机和从机通信使用单总线,即使用单线进行数据的发送和接收

4:在使用中不需要任何外围元件,独立芯片即可完成工作。

5:掉电保护功能 DS18B20 内部含有 EEPROM ,通过配置寄存器可以设定数字转换精度和报警温度,在系统掉电以后,它仍可保存分辨率及报警温度的设定值。

6:每个DS18B20都有独立唯一的64位-ID,此特性决定了它可以将任意多的DS18b20挂载到一根总线上,通过ROM搜索读取相应DS18B20的温度值

7:宽电压供电,电压2.5V~5.5V

8:DS18B20返回的16位二进制数代表此刻探测的温度值,其高五位代表正负。如果高五位全部为1,则代表返回的温度值为负值。如果高五位全部为0,则代表返回的温度值为正值。后面的11位数据代表温度的绝对值,将其转换为十进制数值之后,再乘以0.0625即可获得此时的温度值。

长这样
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、流程图&注意事项

这里是用的是小蜜蜂老师的
小蜜蜂笔记
大家可以去看一下,这里我只是拿之前做笔记的图

在这里插入图片描述
在这里插入图片描述

#include<stc15f2k.h>
#include<onewire.h>
char dula[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};
char dula_1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
char disdula[]={0,0,0,0,0,0,0,0};
int diswela,temp;

void buzz()
{
	P2=((P2&0X1F)|0XA0);
	P0=0X00;
	P2&=0X1F;
	
	P2=((P2&0X1F)|0X80);
	P0=0XFF;
	P2&=0X1F;
}

void delay(int x)
{
	int i;
	while(x--)
		for(i=0;i<5*123;i++);
}

void din()
{
	TMOD=0X10;
	TH1=(65536-11059/12)/256;
	TL1=(65536-11059/12)%256;
	EA=1;
	ET1=1;
	TR1=1;
}

void display()
{
	P2=((P2&0X1F)|0Xe0);
	P0=0XFF;
	P2&=0X1F;
	
	P2=((P2&0X1F)|0Xc0);
	P0=1<<diswela;
	P2&=0X1F;
	
	P2=((P2&0X1F)|0Xe0);
	if(diswela==1)P0=dula_1[disdula[diswela]];
	else P0=dula[disdula[diswela]];
	P2&=0X1F;
	
	if(++diswela>=8)diswela=0;
}

void read()
{
	int LSB,MSB;
	Init_DS18B20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0x44);
	delay(800);
	Init_DS18B20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0xbe);
	LSB=Read_DS18B20();
	MSB=Read_DS18B20();
	Init_DS18B20();
	temp=0x00;
	temp=MSB;
	temp=(temp<<8)|LSB;
	if((temp&0xf800)==0x0000)
	{
		temp>>=4;
		temp=temp*100;
		temp=temp+((LSB&0X0F)*6.25);
	}
}

void display_1()
{
	disdula[0]=temp/1000%10;
	disdula[1]=temp/100%10;
	disdula[2]=temp/10%10;
	disdula[3]=temp/1%10;
	disdula[4]=11;
	disdula[5]=11;
	disdula[6]=11;
	disdula[7]=11;
}

void main()
{
	buzz();
	din();
	while(1)
	{
		read();
		display_1();
	}
}

void qa() interrupt 3
{
	TH1=(65536-11059/12)/256;
	TL1=(65536-11059/12)%256;
	display();
}
	
	
	
	
	

省赛代码传送门

第三届蓝桥杯单片机省赛
第四届蓝桥杯单片机省赛
第五届蓝桥杯单片机省赛
第六届蓝桥杯单片机省赛
第七届蓝桥杯单片机省赛
第八届蓝桥杯单片机省赛
第九届蓝桥杯单片机省赛
第十届蓝桥杯单片机省赛
第十一届蓝桥杯单片机省赛

  • 21
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值