当前位置: 首页 > news >正文

45 基于单片机的信号选择与温度变化

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

基于51单片机,采用DS18B20检测温度,通过三种LED灯代表不同状态。

采用DAC0832显示信号脉冲,通过8位数码管显示温度。

信号脉冲可以根据两个按键分别调整为正弦或者方波。

频率与温度成正比。

二、硬件资源

基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。

编辑

三、程序编程

#include <reg51.h>  //定义头文件#include "DS18B20.h"#include "stdio.h"#include "Seg.h"#include <data.h>#define dataout P3  #define uchar unsigned char   #define uint unsigned int   unsigned char pos = 0;//用于数码管显示第几位unsigned char Seg\_Buf\[8\] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};数码管段码显示unsigned char Seg\_String\[8\];/数码管位码显示unsigned int  ms\_Tick;unsigned int Temperature;//设置温度变量unsigned int  led1\_Tick = 0;//led1计数unsigned int  led2\_Tick = 0;//led2计数unsigned int  led3\_Tick = 0;//led3计数unsigned int  beep_Tick = 0;//beep计数uchar fre\[5\] ="001Hz";
uint data THHL=65536-3906;
uchar data keyword,n=0;   
uchar data Signal_chose = 0; 
uchar data div = 1;
sbit led1=P1^0;   //led1灯定义引脚sbit led2=P1^1;   //led2灯定义引脚sbit led3=P1^2;   //led3灯定义引脚sbit beep = P1^6;	 //定义蜂鸣器的引脚sbit key1 = P1^3;
sbit key2 = P1^4;extern low\_temperature=30;///全局变量设置低温度extern hight\_temperature=50;/全局变量设置高温度static int flag=0;void Timer0Init(void)		//5微秒@12.000MHz{TMOD &= 0xF0;		//设置定时器模式TMOD |= 0x01;		//设置定时器模式TL0 = 0x88;		//设置定时初值TH0 = 0xFF;		//设置定时初值TF0 = 0;		//清除TF0标志TR0 = 1;		//定时器0开始计时ET0 =1;EA = 1;
}void init()	//初始化 {   dataout=0x00;THHL=65536-3906;  ///初始频率为1HzTH1=THHL/256;TL1=THHL%256;   TMOD=0x11;ET1=1;TR1=1;EA=1;   
}   void beep\_Proc(void) /蜂鸣器报警函数{		if(beep\_Tick==100){beep=1;}		if(beep_Tick==220){beep=0;beep_Tick=0;}}void led1\_Proc(void) /led1灯闪烁函数{    if(led1\_Tick==250)	{led1=1;}		if(led1_Tick==500){led1=0;led1_Tick=0;}
}void led2\_Proc(void) /led2灯闪烁函数{    if(led2\_Tick==80)	{led2=1;}		if(led2_Tick==200){led2=0;led2_Tick=0;}
}void led3\_Proc(void) /led3灯闪烁函数{    if(led3\_Tick==160)	{led3=1;}		if(led3_Tick==400){led3=0;led3_Tick=0;}
}void keyscan()   {    if(!key1){flag = 1;		while(!key1);}	if(!key2){flag = 2;		while(!key2);}div = Temperature/2.0;	if(div<=0){div = 1;}THHL=65536-3906/div;	switch(flag){		case 62: {							if(div>=100) THHL=65536-39; else {div++;THHL=65536-3906/div;}//频率upfre\[0\]=div/100 + '0';fre\[1\]=div/10%10 + '0';fre\[2\]=div%10 + '0';TR1=1; break;}   case 61: {							if(div<=1) THHL=65536-3906; else {div--;THHL=65536-3906/div;}//频率down}   			case 1: {Signal_chose=0;TR1=0;TR1=1; break;}  	//正弦波case 2: {Signal_chose=1;TR1=0;TR1=1; break;}		//方波}}   void Key\_Proc(void)   {	sprintf(Seg\_String,"%2d      ",(unsigned int)Temperature);//通过printf把温度的打印到数码管显示的数组里Seg\_Tran(Seg\_String,Seg_Buf);数码管显示函数}void main(void){	Timer0Init();Temperature = (unsigned int)ReadTemperature();/DS18B20温度检测,把温度的值直接给TemperatureDelay100ms();beep =0;  init();	while(1){		keyscan(); switch(Signal_chose)   {   case 0: {dataout=sin_tab\[n\]; break;}  //正弦波case 1: {dataout=squ_tab\[n\]; break;}  //方波default:{break;}   }   		if(Temperature < low_temperature)///将Temperature和设置的温度来进行比较{led1\_Tick++;				led1\_Proc();led2 = 0;///led2灯灭led3 = 0;///led3灯灭beep=0;}	    if(Temperature<hight\_temperature&&Temperature>low\_temperature){led3\_Tick++;				led3\_Proc();led2 = 0;///led2灯灭led1 = 0;///led3灯灭beep=0;}				if(Temperature>hight_temperature){led2\_Tick++;				led2\_Proc();led1 = 0;///led1灯灭led3 = 0;///led3灯灭beep\_Tick++;				beep\_Proc();}		Key_Proc();//ms_Tick++;	if(((ms_Tick % 50) == 0)){EA = 0;Temperature = (unsigned int)ReadTemperature();EA = 1;}}
}void time_intt1(void) interrupt 3   
{   TL1=THHL%256;TH1=THHL/256;   n++;
}   
void Timer0(void) interrupt 1				
{TL0 = 0x20;		//设置定时初值TH0 = 0xf1;		//设置定时初值if(++pos == 8)pos = 0;从第一位数码管来进行显示Seg\_Disp(Seg\_Buf,pos);}

四、实现现象

具体动态效果看B站演示视频:

B站演示视频

基于单片机的信号选择与温度变化

全部资料(源程序、仿真文件、安装包、演示视频):

百度网盘资料下载3A&pos_id=img-5prTl0IU-1733102967688)https://pan.baidu.com/s/1EBYR-K9DWYQ4wROr5oqfNg?pwd=gqo9

相关文章:

45 基于单片机的信号选择与温度变化

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;采用DS18B20检测温度&#xff0c;通过三种LED灯代表不同状态。 采用DAC0832显示信号脉冲&#xff0c;通过8位数码管显示温度。 信号脉冲可以根据两个按键分别调整为正弦…...

#JAVA-常用API-爬虫

1.爬虫 我们在正则表达式的讲解中可以使用字符串的方法materchs()来匹配&#xff0c;并且返回一个boolean值 String name "lshhhljh"; System.out.println(name.matches("lsh{3}\\s{3}")); //true现在我们将利用正则表达式来爬取本地或者网站上的文本内…...

Qt 面试题复习10~12_2024-12-2

Qt 面试题 28、Qt 如果一个信号的处理方法一直未被执行有哪些可能性29、Qt 三大核心机制30、虚函数表31、什么是Qt事件循环 &#xff1f;32、纯虚函数和普通的虚函数有什么区别33、Qt 的样式表是什么&#xff1f;34、描述Qt的TCP通讯流程35、自定义控件流程36、什么是Qt的插件机…...

在OpenHarmony系统下开发支持Android应用的双框架系统

在 OpenHarmony 系统下开发支持 Android 应用的双框架系统&#xff0c;主要的目标是实现 OpenHarmony 本身作为底层操作系统&#xff0c;并通过兼容层或者桥接技术&#xff0c;允许 Android 应用在其上运行。双框架系统的架构设计会涉及到 OpenHarmony 和 Android 的结合&#…...

对力扣77组合优化的剪枝操作的理解

77. 组合 代码随想录放出了这一张图 我乍一看觉得想当然,但是仔细想想,又不知道以下剪枝代码作何解释,因此我想通过这篇文章简要解释一下 class Solution { private:vector<vector<int>> result;vector<int> path;void backtracking(int n, int k, int sta…...

SpringMVC中的Handler、HandlerMapping、HandlerAdapter

SpringMVC中的Handler、HandlerMapping、HandlerAdapter到底是啥 这东西,虽然说和我们的开发没啥关系,尤其是当你用SpringBoot进行开发时,这些接口离你越来越远了。讲实话,要不是这学期扫一眼学校的课件,我都不知道有这东西,这东西本来就是对使用框架进行开发的开发者隐藏…...

tomcat 8在idea启动控制台乱码

Tomcat 8在IntelliJ IDEA&#xff08;简称IDEA&#xff09;启动控制台出现乱码的问题&#xff0c;通常是由于Tomcat的默认编码格式&#xff08;UTF-8&#xff09;与IDEA或操作系统的默认编码格式&#xff08;如GBK&#xff09;不一致所导致的。以下是一些解决此问题的步骤&…...

windows下kafka初体验简易demo

这里提供了windows下的java1.8和kafka3.9.0版本汇总&#xff0c;可直接免费下载 【免费】java1.8kafka2.13版本汇总资源-CSDN文库 解压后可以得到一个文件夹 资料汇总内有一个kafka文件资料包.tgz&#xff0c;解压后可得到下述文件夹kafka_2.13-3.9.0&#xff0c;资料汇总内还…...

证明直纹极小曲面是平面或者正螺旋面.

目录 证明直纹极小曲面是平面或者正螺旋面 证明直纹极小曲面是平面或者正螺旋面 证明&#xff1a;设极小直纹面 S S S的参数表示为 r ( u , v ) a ( u ) v c ( u ) . (u,v)\mathbf{a}(u)v\mathbf{c}(u). (u,v)a(u)vc(u).则 r u a ′ v c ′ , r v c , r u ∧ r v a ′ ∧…...

matlab2024a安装

1.开始安装 2.点击安装 3.选择安装密钥 4.接受条款 5.安装密钥 21471-07182-41807-00726-32378-34241-61866-60308-44209-03650-51035-48216-24734-36781-57695-35731-64525-44540-57877-31100-06573-50736-60034-42697-39512-63953 6 7.选择许可证文件 8.找许可证文件 9.选…...

Observability:如何在 Kubernetes pod 中轻松添加应用程序监控

作者&#xff1a;来自 Elastic Jack Shirazi•Sylvain Juge•Alexander Wert Elastic APM K8s Attacher 允许将 Elastic APM 应用程序代理&#xff08;例如 Elastic APM Java 代理&#xff09;自动安装到 Kubernetes 集群中运行的应用程序中。该机制使用变异 webhook&#xff0…...

关于Nginx前后端分离部署spring boot和vue工程以及反向代理的配置说明

最近项目中用到关于Nginx前后端分离部署spring boot和vue工程以及反向代理的配置&#xff0c;总结了一下说明&#xff1a; 1、后端是spring boot工程&#xff0c;端口8000&#xff0c;通过 jar命令启动 nohup java -jar xxx-jsonflow-biz.jar > /usr/local/nohup.out 2>…...

redis渐进式遍历

文章目录 一. 渐进式遍历介绍二. scan命令 一. 渐进式遍历介绍 keys * , 一次性把整个redis中所有的key都获取到, 这个操作比较危险, 可能会阻塞redis服务器 通过渐进式遍历, 就可以做到, 既能够获取到所有的key, 又不会卡死服务器 渐进式遍历, 不是一个命令把所有key都拿到,…...

【C++】数据类型与操作实践:详细解析与优化

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目一&#xff1a;三个数的倒序输出1.1 题目描述与代码实现代码实现&#xff1a; 1.2 代码解析与细节说明1.3 使用 int 类型的合理性分析1.4 其他数据类型的考虑1.5 代码优…...

C# 集合(Collection)

文章目录 前言一、动态数组&#xff08;ArrayList&#xff09;二、哈希表&#xff08;Hashtable&#xff09;三、排序列表&#xff08;SortedList&#xff09;四、堆栈&#xff08;Stack&#xff09;五、队列&#xff08;Queue&#xff09;六、点阵列&#xff08;BitArray&…...

【智能控制】实验,基于MATLAB的模糊推理系统设计,模糊控制系统设计

关注作者了解更多 我的其他CSDN专栏 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处理 光电融合集成电路…...

前端跳转路由的时候,清掉缓存

清除路由缓存的方法 ‌使用 $router.push() 方法‌&#xff1a;在跳转路由时&#xff0c;可以通过传递一个包含 replace: true 属性的对象来实现清除路由缓存。例如&#xff1a; this.$router.push({ path: "/new-route", replace: true }); ‌使用 $router.replace…...

基于 LlamaFactory 的 LoRA 微调模型支持 vllm 批量推理的实现

背景 LlamaFactory 的 LoRA 微调功能非常便捷&#xff0c;微调后的模型&#xff0c;没有直接支持 vllm 推理&#xff0c;故导致推理速度不够快。 LlamaFactory 目前支持通过 VLLM API 进行部署&#xff0c;调用 API 时的响应速度&#xff0c;仍然没有vllm批量推理的速度快。 …...

【赵渝强老师】PostgreSQL的物理存储结构

PostgreSQL在执行initdb的数据库集群初始化时会指定一个目录。该目录通过环境变量$PGDATA来表示。当数据库集群初始化完成后&#xff0c;会在这个目录生成相关的子目录以及一些文件。这些生成的文件就是PostgreSQL的物理存储结构中的文件。如下图所示。 如上图所示&#xff0c…...

智能探针技术:实现可视、可知、可诊的主动网络运维策略

网络维护的重要性 网络运维是确保网络系统稳定、高效、安全运行的关键活动。在当今这个高度依赖信息技术的时代&#xff0c;网络运维的重要性不仅体现在技术层面&#xff0c;更关乎到企业运营的方方面面。网络运维具有保障网络的稳定性、提升网络运维性能、降低企业运营成本等…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...