51单片机-LED灯蜂鸣器数码管按键DS18B20温度传感器
LDE灯的相关程序
LED灯闪烁
LED流水灯
方法1
方法二:
因为P1口可以直接控制P1^0~P1^7的8个led灯,利用一个8位的二进制数字来进行控制即可。如果要点亮P1^0 只需要给P1口传递 1111 1110即可。
蜂鸣器的使用
什么是蜂鸣器?
蜂鸣器是一种一体化结构的电子发生器,主要是用来起到报警的作用。
蜂鸣器分类
有源蜂鸣器
内部有震荡源,所以只要通电就会鸣叫,控制比较方便。
无源蜂鸣器
内部不带震荡源,所以通电不能让它直接鸣叫,必须使用2K~5K的方波去驱动它,声音频率可以调整。
什么是三极管
一种控制电流的半导体器件,作用就是把微弱的电信号放大成更大幅度的电信号,在电路中主要作用于开关和放大电流的作用。
三级管有三个引脚:B(基极)、C(集电极)、E(发射极)。
PNP三极管的图示:
关键点在于B极和E极之间的电压情况,对于PNP而言,只要E极电话高于B极0.7V以上,这个三极管就可以顺利导通。
方波
一种非正弦曲线的波形,通常会与电子和讯号处理的时候出现。
理想的方波只有高和低这两个值,救护车的声音频率高频是1000Hz 低频是 750Hz。
1000HZ的分析:
750HZ的分析:
方波图:
代码实现
数码管的使用
数码管显示数字的原理
数码管的电路图
数码管段选图
不同的数字对应的P0口应该传递的16进制数字(不带小数点的)
数码管显示指定数字
数码管显示动态数字
按键的使用
按键消抖
当物理按键按下或者弹起的时候,电平都不是立即为0或者立即为1的,会出现抖动的情况,所以要进行消抖操作。
按键按下一次的时候电平变化:
代码演示
DS18B20温度传感器的使用
简介
DS18B20是一款常用的高精度单总线数字温度测量芯片,体积小,占用资源少,抗干扰能力强。
使用方法说明
图示
由于温度传感器的电路设计原因,必须按照如下顺序进行操作才能成功
1、先复位
2、执行一次ROM指令
3、执行一次RAM指令
注意: 一次ROM只能搭配一次RAM
完成温度读取的步骤
先做温度转换
复位和检测:每次发命令之前都要先进行复位检测,目的是检测当前温度传感器的状态是否正常。
按照ROM指令表,发送0xCC来跳过ROM存储器,因为设备上只有一个DS18B20,所以不需要进行其他的寻址等操作。
按照RAM指令表,发送0x44来启动温度传感器降温度转化为数字信号,存储到RAM中。
读取温度数据
复位和检测
给ROM发送0xCC跳过ROM存储器
给RAM发送0xBE来读取RAM暂存器中的温度数据:读取温度低位;读取温度高位。
温度的转化问题
图示
原码、反码和补码
原码:
最高位是符号位,0表示正数,1表示负数。
反码:
最高位是符号位,0表示正数,1表示负数;
正数的反码是它本身,负数的反码除了符号位以外,各位取反。
补码:
最高位是符号位,0表示正数,1表示负数;
正数的补码也是它本身,负数的补码是反码+1;
如:原码是1011 对应反码是1100 补码就是 1101;
设计补码的目的:就是能够和其相反数相加通过溢出的方式从而使计算机内的结果变为合理的二进制码。
例:比如1 和 -1相加 正常的结果是0;如果用原码计算:0001 + 1001 = 1010,结果是-2 这样的结果是错误的;利用补码实现:0001 + 1111 = 10000, 将最高位的1溢出, 结果就变成了0000,这样的结果是正确的。
DS18B20的时序问题
初始化时序
图示:
单总线上所有的通信都是从初始化时序开始的,主机输出低电平,保持低电平至少480us(实际在480~960us之间都可以),以产生复位脉冲。
接着主机释放总线,将电平拉高,延时15~60us,进入接受模式,接着DS18B20会自己拉低总线60~240us,会产生应答脉冲,如果是低电平会延时一段时间,之后会上拉电阻至少480us结束。
代码
写时序
图示:
说明:
写0时序:主机输出低电平,60us以后拉高电平 延时一会让电平稳定。
写1时序:主机输出低先平,立即拉高,然后延时60us即可。
按位与(&):
按位与遵循的原则:两个二进制数对应的每一位如果都是1,结果就是1,否则0。
代码演示
读时序
图示:
说明:
单总线仅在主机发出读时序的时候,才向主机传输数据,所以在发出读数据命令之后,必须马上产生读时序,以便从机能够发送输出给主机。
所有的读时序都需要60us的时间, 并且要在两次独立的读时序之间要间隔至少1us。主机在读时序期间必须要释放总线,并且在时序起始后的15us采样数据。
按位或(|):
对应的两个数字,如果有一个为1,那么结果就是1,否则结果为0。
代码:
使用DS18B20温度传感器完成温度检测并在数码管上显示:
// DS18B20的温度传感器程序
#include <reg51.h>
// 定义温度传感器的引脚变量
sbit DQ=P3^7;
// 定义不带小数点的数字数组
unsigned char arr1[10] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
// 定义带小数点的数字数组
unsigned char arr2[10] = {0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10};
// 定义全局变量来保存温度的低八位和高八位
unsigned char tempL = 0;
unsigned char tempH = 0;// 定义一个变量来确定温度到底是正值还是负值
unsigned char flag=1;
// 定义变量存放温度值的整数部分
unsigned int sdata;// 定义变量来存放小数第一位和第二位
unsigned char xiaoshu1;
unsigned char xiaoshu2;
// 定义延时函数
// 这个延时程序的具体延时时间是 time(us) = i * 8 + 10, 适用于2ms之内的延时
void delay(unsigned char i)
{for(i; i > 0; i--);
}
// 初始化程序
unsigned char Init_DS18B20()
{unsigned char x = 0;DQ=1; // 先让DS18B20稳定在高电平的状态,先拉高delay(8); // 延时74us准备开始初始化时序DQ=0; // 发送低电平,开始发送低电压的脉冲信号delay(80); // 等待650us,在480us到960us之间DQ=1; // 拉高总线delay(5); // 延时50us(在15us到60us之间) 等待DS18B20反应,准备接收DS18B20发送的数据x = DQ; // 用x来接受DS18B20返回的电平值,如果DS18B20初始化成功X的值就是0,否则为1delay(30); // 等待一会完成整个的初始化时序。return x;
}// 写函数
// 调用一次写入一个字节
void writeOneChar(unsigned char dat)
{unsigned char i=0;for(i = 8;i > 0;i--) // 循环8次,每次写入一位,写完8位 就是一个字节{DQ=0; // 不论写0还是写1,都需要先拉低总线// 从最低位开始写,让dat和0x01进行与操作获取最低位数字发送给DS18B20DQ=dat&0x01;delay(5); // 继续延时,等待DS18B20采样完成DQ=1; // 释放总线dat>>=1; // 将dat的值直接右移,将下一位的值移动到最低位,再重新赋值给dat用来下次获取最低位数据delay(2); // 执行完一个写数字的程序,等待一下 准备开始下次写程序。}
}// 读函数
// 循环8次可以读完一个字节
unsigned char readOneChar()
{unsigned char dat=0; // 准备一个变量来接受读出来的一个字节的数据unsigned int i ;for(i = 0; i < 8 ;i++){DQ=1;// 先拉高电平,进入准备工作delay(1); // 可以让每次的读时序间隔1us以上,实际等待了18usDQ=0; // 拉低总线delay(1); // 延时18us// 将dat右移一位,因为实际保存的数据是8位数据。// 但是在每次保存之后进行位移,总共位移7次,所以要将第一次位移给取消掉dat>>=1; // 如果读到的DQ是1 进行下面判断将1写入dat,如果是0,就直接进行右移,将0保存下来即可DQ=1; // 释放总线,回到高电平,会产生读信号。// 因为DS18B20如果发送的是一个0的数据,产生读信号之后,仍然会将总线设置为低电平持续完读时序之后才释放总线// 如果DS18B20要发送的是一个1的数据,产生读信号之后,会直接释放总线,那么我们读到的就是高电平。// 如果读到的DQ是高电平,就直接与0x80进行按位或运算, 将数据直接写到dat中if(DQ){// dat 0000 0000// 0x80 1000 0000// 1000 0000// 右移一位// 0100 0000// dat 0100 0000// 0x80 1000 0000// 1100 0000// 0110 0000dat|=0x80;}delay(4); // 等待42us完成整个的读时序}return dat;
}// 读取温度值
void readTemperature()
{while(Init_Ds18B20()); // 初始化writeOneChar(0xcc); // 跳过ROM读序列号的操作writeOneChar(0x44); // 命令DS18B20开始温度转化delay(124); // 等一会开始下一次的执行步骤while(Init_Ds18B20()); // 初始化writeOneChar(0xcc); // 跳过ROM读序列号的操作writeOneChar(0xbe); // 开始读暂存器的数据tempL = readOneChar(); // 读取温度值的低8位 LSBtempH = readOneChar(); // 读取温度值的高8位 MSB// 将读取到的温度值进行转化成实际温度// LSB 1111 1100// MSB 0000 0111// 0000 0111 0000 0000// 0000 0000 1111 1100// 0000 0111 1111 1100// 判断温度是否负值,如果是负值,就取反加1,如果是正值就不做处理if(tempH>0x7f){tempL = ~tempL + 1;tempH = ~tempH;flag = 0;}sdata = (float)(tempH << 8 | tempL) / 16.0; // 整数部分计算// 计算小数一位xiaoshu1 = (tempL&0x0f)*10/16;// 计算小数二位xiaoshu2 = (tempL&0x0f)*100/16%10;
}void led()
{if(flag){P2=0xfe;// 打开第一个数码管P0=arr1[sdata/10]; // 显示十位数P0=0xff;P2=0xfd;// 打开第二个数码管P0=arr2[sdata%10]; // 显示个位数P0=0xff;P2=0xfb;// 打开第三个数码管P0=arr1[xiaoshu1]; // 显示小数第一位P0=0xff;P2=0xf7;// 打开第四个数码管P0=arr1[xiaoshu2]; // 显示小数第二位P0=0xff;}else{P2=0xfe;// 打开第一个数码管P0=0xbf; // 显示负号P0=0xff;P2=0xfd;// 打开第二个数码管P0=arr1[sdata/10]; // 显示十位数P0=0xff;P2=0xfb;// 打开第三个数码管P0=arr2[sdata%10]; // 显示整数个位P0=0xff;P2=0xf7;// 打开第四个数码管P0=arr1[xiaoshu1]; // 显示小数第一位P0=0xff;}}// 定义蜂鸣器
sbit beef = P3^6;
// 报警程序
void alarm()
{if(sdata >= 25){beef = !beef;}else{beef = 1;}
}
void main()
{while(1){readTemperature();led();}
}
相关文章:

51单片机-LED灯蜂鸣器数码管按键DS18B20温度传感器
LDE灯的相关程序 LED灯闪烁 LED流水灯 方法1 方法二: 因为P1口可以直接控制P1^0~P1^7的8个led灯,利用一个8位的二进制数字来进行控制即可。如果要点亮P1^0 只需要给P1口传递 1111 1110即可。 蜂鸣器的使用 什么是蜂鸣器? 蜂鸣器是一种一…...
笔记本一线品牌有哪些
笔记本电脑的一线品牌通常指的是在市场上具有较高市场份额、良好口碑、较强的技术实力和服务能力的品牌。根据目前的信息,笔记本电脑市场的一线品牌主要包括以下几个: 联想 (Lenovo):联想在全球笔记本市场上的占有率较高,其产品线…...

mysql聚合函数和分组
我最近开了几个专栏,诚信互三! > |||《算法专栏》::刷题教程来自网站《代码随想录》。||| > |||《C专栏》::记录我学习C的经历,看完你一定会有收获。||| > |||《Linux专栏》࿱…...
ubuntu20.04+RealSenseD455
ubuntu20.04安装驱动双目相机RealSenseD455 安装环境安装RealSense SDK 2.0ROS包安装启动Realsense摄像头存在的 bugD455标定安装环境 系统:Ubuntu20.04 ROS:Noetic 视觉传感器:Intel RealSense D455 安装RealSense SDK 2.0 该安装有两种方式,一个是用命令安装,另一个是…...
WAF绕过技巧
WAF绕过技巧 WAF(Web Application Firewall)是一种安全系统,旨在监控和控制网络流量,以防止攻击,如SQL 注入、跨站脚本(XSS)和拒绝服务(DoS)。 WAF 可以通过多种方式绕过…...

HarmonyOS应用三之组件生命周期和参数传递
目录: 1、生命周期的执行顺序2、页面数据传递3、图片的读取4、数据的备份和恢复5、轮播图6、页面布局图 1、生命周期的执行顺序 /** Copyright (c) 2023 Huawei Device Co., Ltd.* Licensed under the Apache License, Version 2.0 (the "License");* yo…...
[Qt][Qt 网络][上]详细讲解
目录 0.概述1.UDP Socket1.核心API概览2.回显服务器3.回显客户端 0.概述 要使用Qt中有关网络编程的API,需要添加network模块 1.UDP Socket 1.核心API概览 主要的类有两个:QUdpSocket和QNetworkDatagramQUdpSocket表⽰⼀个UDP的socket⽂件 bind(const …...

读零信任网络:在不可信网络中构建安全系统21读后总结与感想兼导读
1. 基本信息 零信任网络:在不可信网络中构建安全系统 道格巴斯(Doug Barth) 著 人民邮电出版社,2019年8月出版 1.1. 读薄率 书籍总字数252千字,笔记总字数73194字。 读薄率73194252000≈29.5% 这个读薄率是最高的吧&#x…...

Java基础——注释
在开发中注释是必不可少的,帮助我们更好的标记阅读代码,下面介绍几种常用的注释方式。 一、注释种类 1. 单行注释 使用//一行代码来进行注释,只能注释一行内容 2. 多行注释 使用斜杠星号的方式 /*注释多行代码*/,注释多行代…...

Redis未授权访问漏洞利用合集
一、基本信息 靶机:IP:192.168.100.40 攻击机:IP:192.168.100.60 二、漏洞 & 过程 Redis 未授权访问漏洞利用无口令远程登录靶机 靶机 cd redis-4.0.8/src./redis-server ../redis.conf 攻击机 ./redis-cli -h 192.168.100.40 Redis 未授权访问…...

基于asp.net的在线考试系统、基于c#的在线考试管理系统
摘 要 伴随着社会以及科学技术的发展,互联网已经渗透在人们的身边,网络慢慢的变成了人们的生活必不可少的一部分,紧接着网络飞速的发展,管理系统这一名词已不陌生,越来越多的学校、公司等机构都会定制一款属于自己个…...

将 hugo 博客搬迁到服务器
1. 说明 在 Ubuntu 22.04 上使用 root 账号,创建普通账号,并赋予 root 权限。 演示站点:https://woniu336.github.io/ 魔改hugo主题: https://github.com/woniu336/hugo-magic 2. 服务器配置 建立 git 用户 adduser git安装 git sudo apt …...

【Datawhale AI夏令营第四期】 魔搭-大模型应用开发方向笔记 Task04 RAG模型 人话八股文Bakwaan_Buddy项目创空间部署
【Datawhale AI夏令营第四期】 魔搭-大模型应用开发方向笔记 Task04 RAG模型 人话八股文Bakwaan_Buddy项目创空间部署 什么是RAG: 我能把这个过程理解为Kimi.ai每次都能列出的一大堆网页参考资料吗?Kimi学了这些资料以后,根据这里面的信息综…...
CTF密码学小结
感觉没啥好总结的啊 基础的永远是RSA、流密码、哈希、对称密码、古典密码那一套(密码学上过课都会),其他的就是数论的一些技巧 似乎格密码也很流行,以及一些奇奇怪怪的性质利用也很多 1、random设置种子后随机的性质:…...
Vue快速入门(七)——Vue3 状态管理 - Pinia(二)
目录 六、核心概念——Getter 1、基本操作 定义getter 访问getter 2、访问其他 getter 3、向 getter 传递参数 4、访问其他 store 的 getter 使用 setup() 时的用法 使用选项式 API 的用法 使用 setup() 不使用 setup() 七、核心概念——Action 1、基本操作 定义a…...

ZooKeeper集群环境部署
1. ZooKeeper安装部署 1.1 系统要求 1.1.1 支持的平台 ZooKeeper 由多个组件组成。一些组件得到广泛支持,而另一些组件仅在较小的一组平台上得到支持。 客户端是 Java 客户端库,由应用程序用于连接到 ZooKeeper 集群。 服务器是在 ZooKeeper 集群节点…...

10 个 C# 关键字和功能
在 Stack Overflow 调查中,C# 语言是排名第 5 位的编程语言。它广泛用于创建各种应用程序,范围从桌面到移动设备再到云原生。由于有如此多的语言关键字和功能,对于开发人员来说,要跟上新功能发布的最新信息将是一项艰巨的任务。本…...
贪心算法之重叠区间问题
以下四个题都是重叠区间问题 452. 用最少数量的箭引爆气球 为了让气球尽可能重叠,先按照气球起始位置由大到小排序tips:sort默认就可以实现以上排序,不需要写cmp重点:当下一个气球的左边界不小于上一个气球的右边界时(即有重叠的…...

Python爬虫入门教程(非常详细)适合零基础小白
一、什么是爬虫? 1.简单介绍爬虫 爬虫的全称为网络爬虫,简称爬虫,别名有网络机器人,网络蜘蛛等等。 网络爬虫是一种自动获取网页内容的程序,为搜索引擎提供了重要的数据支撑。搜索引擎通过网络爬虫技术,将…...

ArcGIS Pro基础:软件的常用设置:中文语言、自动保存、默认底图
上图所示,在【选项】(Options)里找到【语言】设置,将语言切换为中文选项,记得在安装软件时,需要提前安装好ArcGIS语言包。 上图所示,在【选项】里找到【编辑】设置,可以更改软件默认…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...

ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...
【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?
FTP(File Transfer Protocol)本身是一个基于 TCP 的协议,理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况,主要原因包括: ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...