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单片机,采用DS18B20检测温度,通过三种LED灯代表不同状态。 采用DAC0832显示信号脉冲,通过8位数码管显示温度。 信号脉冲可以根据两个按键分别调整为正弦…...
#JAVA-常用API-爬虫
1.爬虫 我们在正则表达式的讲解中可以使用字符串的方法materchs()来匹配,并且返回一个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事件循环 ?32、纯虚函数和普通的虚函数有什么区别33、Qt 的样式表是什么?34、描述Qt的TCP通讯流程35、自定义控件流程36、什么是Qt的插件机…...
在OpenHarmony系统下开发支持Android应用的双框架系统
在 OpenHarmony 系统下开发支持 Android 应用的双框架系统,主要的目标是实现 OpenHarmony 本身作为底层操作系统,并通过兼容层或者桥接技术,允许 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(简称IDEA)启动控制台出现乱码的问题,通常是由于Tomcat的默认编码格式(UTF-8)与IDEA或操作系统的默认编码格式(如GBK)不一致所导致的。以下是一些解决此问题的步骤&…...
windows下kafka初体验简易demo
这里提供了windows下的java1.8和kafka3.9.0版本汇总,可直接免费下载 【免费】java1.8kafka2.13版本汇总资源-CSDN文库 解压后可以得到一个文件夹 资料汇总内有一个kafka文件资料包.tgz,解压后可得到下述文件夹kafka_2.13-3.9.0,资料汇总内还…...
证明直纹极小曲面是平面或者正螺旋面.
目录 证明直纹极小曲面是平面或者正螺旋面 证明直纹极小曲面是平面或者正螺旋面 证明:设极小直纹面 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 中轻松添加应用程序监控
作者:来自 Elastic Jack Shirazi•Sylvain Juge•Alexander Wert Elastic APM K8s Attacher 允许将 Elastic APM 应用程序代理(例如 Elastic APM Java 代理)自动安装到 Kubernetes 集群中运行的应用程序中。该机制使用变异 webhook࿰…...
关于Nginx前后端分离部署spring boot和vue工程以及反向代理的配置说明
最近项目中用到关于Nginx前后端分离部署spring boot和vue工程以及反向代理的配置,总结了一下说明: 1、后端是spring boot工程,端口8000,通过 jar命令启动 nohup java -jar xxx-jsonflow-biz.jar > /usr/local/nohup.out 2>…...
redis渐进式遍历
文章目录 一. 渐进式遍历介绍二. scan命令 一. 渐进式遍历介绍 keys * , 一次性把整个redis中所有的key都获取到, 这个操作比较危险, 可能会阻塞redis服务器 通过渐进式遍历, 就可以做到, 既能够获取到所有的key, 又不会卡死服务器 渐进式遍历, 不是一个命令把所有key都拿到,…...
【C++】数据类型与操作实践:详细解析与优化
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目一:三个数的倒序输出1.1 题目描述与代码实现代码实现: 1.2 代码解析与细节说明1.3 使用 int 类型的合理性分析1.4 其他数据类型的考虑1.5 代码优…...
C# 集合(Collection)
文章目录 前言一、动态数组(ArrayList)二、哈希表(Hashtable)三、排序列表(SortedList)四、堆栈(Stack)五、队列(Queue)六、点阵列(BitArray&…...
【智能控制】实验,基于MATLAB的模糊推理系统设计,模糊控制系统设计
关注作者了解更多 我的其他CSDN专栏 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处理 光电融合集成电路…...
前端跳转路由的时候,清掉缓存
清除路由缓存的方法 使用 $router.push() 方法:在跳转路由时,可以通过传递一个包含 replace: true 属性的对象来实现清除路由缓存。例如: this.$router.push({ path: "/new-route", replace: true }); 使用 $router.replace…...
基于 LlamaFactory 的 LoRA 微调模型支持 vllm 批量推理的实现
背景 LlamaFactory 的 LoRA 微调功能非常便捷,微调后的模型,没有直接支持 vllm 推理,故导致推理速度不够快。 LlamaFactory 目前支持通过 VLLM API 进行部署,调用 API 时的响应速度,仍然没有vllm批量推理的速度快。 …...
【赵渝强老师】PostgreSQL的物理存储结构
PostgreSQL在执行initdb的数据库集群初始化时会指定一个目录。该目录通过环境变量$PGDATA来表示。当数据库集群初始化完成后,会在这个目录生成相关的子目录以及一些文件。这些生成的文件就是PostgreSQL的物理存储结构中的文件。如下图所示。 如上图所示,…...
智能探针技术:实现可视、可知、可诊的主动网络运维策略
网络维护的重要性 网络运维是确保网络系统稳定、高效、安全运行的关键活动。在当今这个高度依赖信息技术的时代,网络运维的重要性不仅体现在技术层面,更关乎到企业运营的方方面面。网络运维具有保障网络的稳定性、提升网络运维性能、降低企业运营成本等…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...
快速排序算法改进:随机快排-荷兰国旗划分详解
随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...
Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解
文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一:HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二:Floyd 快慢指针法(…...
机器学习的数学基础:线性模型
线性模型 线性模型的基本形式为: f ( x ) ω T x b f\left(\boldsymbol{x}\right)\boldsymbol{\omega}^\text{T}\boldsymbol{x}b f(x)ωTxb 回归问题 利用最小二乘法,得到 ω \boldsymbol{\omega} ω和 b b b的参数估计$ \boldsymbol{\hat{\omega}}…...
2025年低延迟业务DDoS防护全攻略:高可用架构与实战方案
一、延迟敏感行业面临的DDoS攻击新挑战 2025年,金融交易、实时竞技游戏、工业物联网等低延迟业务成为DDoS攻击的首要目标。攻击呈现三大特征: AI驱动的自适应攻击:攻击流量模拟真实用户行为,差异率低至0.5%,传统规则引…...
高分辨率图像合成归一化流扩展
大家读完觉得有帮助记得关注和点赞!!! 1 摘要 我们提出了STARFlow,一种基于归一化流的可扩展生成模型,它在高分辨率图像合成方面取得了强大的性能。STARFlow的主要构建块是Transformer自回归流(TARFlow&am…...
