项目五串行通信系统 任务5-3温度信息上传

任务描述:DS18B20测量温度,单片机采集温度数据转换显示代码,并通过串行口发送到上位机显示。

底层文件:

/*********************************************
ds18b20底层函数:能完成一次温度数据读取
**********************************************/
#include<reg51.h>
#include<intrins.h>
sbit dq=P3^7;//ds18b20数据线
unsigned char tl,th;//tl记录温度数据低8位,th记录温度数据高8位
/***********************************************/
void init_18b20();
void write_18b20(int dat);
char read_18b20();
void ds18b20();
/***********************************************/
void delayus(int i)//微秒级延时:12us
{
//  i=i*10;while(i--);
}
/***********************************************/
void delayms(int i)	//毫秒级延时 :3ms
{int j;while(i--){for(j=255;j>0;j--);	  }
}
/***********************************************/
void init_18b20() //初始化
{dq=0;		  //拉低数据线delayus(50);//因为串行口时钟为11.0592MHz,延时时间增加了,所以循环次数减小到50次dq=1;		  //拉高数据线  while(1)	  //不断查询数据线{if(dq==0) break; //若数据线变低,退出查询}delayus(5); //延时60usdq=1;		  //拉高数据线delayus(5); //延时
}
/***********************************************/void write_18b20(int dat)	//向18B20写1字节命令
{int i;for(i=0;i<8;i++){dq=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
//因为串行口时钟为11.0592MHz,延时时间增加了,所以改用空操作完成延时12usdq=dat&0x01;//逻辑与运算取dat最低位给数据线dqdelayus(3);//延时60usdq=1;//拉高数据线dat>>=1;//dat=dat>>1;将命令字dat右移一位}
} 
/***********************************************/
char read_18b20()//从18b20读取1字节数据
{int i,temp=0;for(i=0;i<8;i++){dq=0;dq=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
//因为串行口时钟为11.0592MHz,延时时间增加了,所以改用空操作完成延时12ustemp>>=1;if(dq==1)temp=temp|0x80;//逻辑加10000000delayus(4);}
return(temp);
}
/***********************************************/
void ds18b20()//完成一次温度数据读取(16位二进制数,高8位给变量th,低8位给变量tl)
{init_18b20();write_18b20(0xcc);write_18b20(0x44);init_18b20();write_18b20(0xcc);write_18b20(0xbe);tl=read_18b20();//读取温度低8位th=read_18b20();//读取温度高8位
}
extern void init_18b20();
extern void write_18b20(int dat);
extern int read_18b20();
extern void ds18b20();
extern void delayus(int i);
extern void delayms(int i);
extern unsigned char tl,th;//tl记录温度数据低8位,th记录温度数据高8位

 

 

 

实物:

接线:

 

 

/*************************
项目名称:项目五串行通信系统
任务名称:任务5-2火焰报警器
任务描述:DS18B20测量温度,单片机采集温度数据转换显示代码,并通过串行口发送到上位机显示。*************************/
#include<reg51.h>
#include<stdio.h>
#include<ds18b20.h>int t;//存放16位温度数据
void init_uart();//异步串行口初始化
void send(unsigned char x);//串口发送一帧数据/************************************/
void init_uart()//init初始化,uart异步串行口
{SCON=0X40;//定义时必须要大写,选择工作方式。0x40,9位1帧,只允许发送,不允许接收TMOD=0X20;//定时器1方式2:8位自动重装初值PCON=0X00;//波特率不倍增TH1=TL1=0Xfd;//波特率节奏器,数三下产生波特率,9600bps,fosc=11.0592MHzTI=0;//允许发送TR1=1;//启动定时器1,开始数数,产生波特率
}
/************************************/
void send(unsigned char x)
{SBUF=x;//自动拆字,按照定时器的节奏自动发送(P3.1),//自动添加结束标志,1帧数据发送完成后TI自动置1while(TI==0);//1帧发送未结束,就等待TI=0;//允许下一次发送
}
/************************************/
char putchar(char x)
{send(x);return x;
}
/************************************/void main()
{init_uart();ds18b20();delayms(500);//延时避让开机错误温度数据,只测量不显示while(1){ds18b20();t=(th<<8)|tl;//合成16位温度数据,最低刻度0.0625℃printf("温度: %.1foC\r\n",t*0.0625);delayms(500);}
}

 注意要11.0592MHz

仪器要9600 

 

温度传感器要精确到0.1 

 

可以定义温度初始值:

下面的符号也可以改变温度: 

 

接线   接上蓝牙与温度传感器:

 

效果:用手捏住温度传感器就可以实现升温

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/348427.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker 拉取不到镜像的问题:拉取超时

error pulling image configuration: download failed after attempts6: dial tcp 31.13.94.10:443: i/o timeout 首先设置国内的镜像源&#xff1a;复制下面直接执行 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF{"registry-mirrors"…

NSS题目练习9

[极客大挑战 2020]welcome 界面打开后一片空白&#xff0c;查看题目描述&#xff0c;翻译过来是 1.除了GET请求方法&#xff0c;还有一种常见的请求方法… 2.学习一些关于sha1和array的知识。 3.更仔细地检查phpinfo&#xff0c;你会发现标志在哪里。 补充&#xff1a; sh…

MicroPython 环境下使用 ESP32 连接百度 AI 大模型

前言 在物联网领域&#xff0c;ESP32 由于其丰富的功能和低功耗性能成为了一种流行的选择。结合 MicroPython&#xff0c;它为开发者提供了一个高效的开发环量&#xff0c;让 Python 程序员也能轻松介入到嵌入式系统和 IoT 应用的开发之中。本文将介绍如何利用这些技术&#x…

基于redis的分布式锁

一、redis分布式锁基本信息 1.详细讲解&#xff1a; Redis 分布式锁是一种用于控制分布式系统中多个进程对共享资源的并发访问的机制。通过 Redis 的原子操作和过期时间功能&#xff0c;可以实现一个简单而有效的分布式锁。接下来&#xff0c;我们将详细介绍其工作原理、基本…

引入tinyMCE富文本框在vue3中的使用

实现效果&#xff1a; 官网地址&#xff1a;TinyMCE 7 Documentation | TinyMCE Documentation 1.下载依赖&#xff08;我使用的版本是5.0 目前最新版本到7了&#xff09; pnpm/npm install tinymce5.0.0 -S pnpm/npm install tinymce/tinymce-vue -S 2.在public文件夹下…

模拟电子之电子管

如果要实现一个放大器的功能&#xff0c;需要一个固定的放大倍数&#xff08;Gain&#xff09;&#xff0c;这也就是说输出信号应该是跟随输入信号变化而变化&#xff0c;换句话说输出信号应该要受到输入信号的控制。 在电子学中使用的最多的两个物理量就是电压和电流&#xf…

Java的核心类库

引言 在Java编程中&#xff0c;熟练掌握常用类与对象操作是开发的基础。Java的核心类库提供了丰富的功能&#xff0c;可以帮助开发者高效地处理各种编程任务。本文将详细介绍Java字符串操作、集合框架、日期与时间处理等内容&#xff0c;并通过图表和表格进行总结与示范。 字符…

java1.8运行arthas-boot.jar运行报错解决

报错内容 输入java -jar arthas-boot.jar&#xff0c;后报错。 [INFO] JAVA_HOME: D:\developing\jdk\jre1.8 [INFO] arthas-boot version: 3.7.2 [INFO] Can not find java process. Try to run jps command lists the instrumented Java HotSpot VMs on the target system.…

IPv6 ND 协议功能概述

ND 协议功能概述 ND&#xff08;Neighbor Discovery&#xff0c;邻居发现&#xff09;协议是 IPv6 的一个关键协议&#xff0c;它综合了 IPv4 中的 ARP&#xff0c;ICMP 路由发现和 ICMP 重定向等协议&#xff0c;并对它们做了改进。 作为 IPv6 的基础性协议&#xff0c;ND 协…

乐鑫 ESP32-C6 现身 Apple WWDC 2024 官方 Swift Demo

北京时间 6 月 11 日凌晨 1 点&#xff0c;苹果 2024 年全球开发者大会 (WWDC) 开幕。WWDC 是苹果公司每年举办一次的会议&#xff0c;旨在和全球开发者交流最新的技术和工具。大会通常分为主题演讲、技术讲座、实验室和论坛交流等板块。 苹果公司 WWDC 2024 开发者大会 在今年…

Lua解释器裁剪

本文目录 1、引言2、文件功能3、选择需要初始化的库4、结论 文章对应视频教程&#xff1a; 已更新。见下方 点击图片或链接访问我的B站主页~~~ Lua解释器裁剪&#xff0c;很简单~ 1、引言 在嵌入式中使用lua解释器&#xff0c;很多时候会面临资源紧张的情况。 同时&#xff0c…

Qt:QDialogButtonBox的使用

QDialogButtonBox是Qt自带的按钮箱&#xff0c;通过枚举QDialogButtonBox::ButtonRole可以添加Qt定义按钮&#xff0c;或者通过方法QDialogButtonBox::addButton添加自定义的按钮。 // 自定义按钮。 button_box_ new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonB…

Visual Studio编译fatal error C1001: 编译器中发生内部错误

项目本来是能正常编译的&#xff0c;但是突然出现“fatal error C1001: 编译器中发生内部错误。” 2> (编译器文件“f:\dd\vctools\compiler\utc\src\p2\main.c”&#xff0c;第 255 行) 2> 要解决此问题&#xff0c;请尝试简化或更改上面所列位置附近的程序。 2> …

网络编程2----UDP简单客户端服务器的实现

首先我们要知道传输层提供的协议主要有两种&#xff0c;TCP协议和UDP协议&#xff0c;先来介绍一下它们的区别&#xff1a; 1、TCP是面向连接的&#xff0c;UDP是无连接的。 连接的本质是双方分别保存了对方的关键信息&#xff0c;而面向连接并不意味着数据一定能正常传输到对…

高考志愿填报,选错了专业怎么办?

高考充满惊喜也充满遗憾&#xff0c;惊喜的是分数出来的时候自己可能会满意&#xff0c;可能会选到一个好的专业&#xff0c;遗憾的是自己可能分数不理想&#xff0c;想读的专业因分数不达标作罢。在进行专业选择时&#xff0c;也有可能因为父母的建议&#xff0c;放弃了自己最…

集合java

1.集合 ArrayList 集合和数组的优势对比&#xff1a; 长度可变 添加数据的时候不需要考虑索引&#xff0c;默认将数据添加到末尾 package com.itheima;import java.util.ArrayList;/*public boolean add(要添加的元素) | 将指定的元素追加到此集合的末尾 | | p…

gpt、llama大模型模型结构细节探索

参考&#xff1a; https://github.com/naklecha/llama3-from-scratch&#xff08;一定要看看&#xff09; https://github.com/karpathy/build-nanogpt/blob/master/play.ipynb 视频&#xff1a; https://www.youtube.com/watch?vl8pRSuU81PU https://tiktokenizer.vercel…

编辑并保存hosts文件

1.以管理员权限打开cmd 2.执行命令 notepad C:\Windows\System32\drivers\etc\hosts 回车后会通过记事本打开hosts文件&#xff0c;然后就可以编辑并保存了。

Django中使用下拉列表过滤HTML表格数据

在Django中&#xff0c;你可以使用下拉列表&#xff08;即选择框&#xff09;来过滤HTML表格中的数据。这通常涉及两个主要步骤&#xff1a;创建过滤表单和处理过滤逻辑。 创建过滤表单 首先&#xff0c;你需要创建一个表单&#xff0c;用于接收用户选择的过滤条件。这个表单可…

【C++高阶】C++继承学习手册:全面解析继承的各个方面

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;模板进阶 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 继承 &#x1f4d6;1. 继承的概念及定义…