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

news2024/12/29 6:02:42

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

基于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;  ///初始频率为1Hz
 TH1=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;}//频率up
							fre[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温度检测,把温度的值直接给Temperature
	Delay100ms();
	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站演示视频:

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

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

百度网盘资料下载icon-default.png?t=O83Ahttps://pan.baidu.com/s/1EBYR-K9DWYQ4wROr5oqfNg?pwd=gqo9

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5G NR 切换流程简介

文章目录 切换类型分类切换步骤测量事件分类5G NR系统内切换信令流程 切换类型分类 5G NR 的切换类型分为 系统间切换和系统内切换&#xff0c;而 系统间切换又分为 5G NR 与 4G LTE 和5G NR 与3G WCDMA的切换。站内切换则分为站内切换和站间间切换。 切换步骤 主要分为三个阶…

边缘端大模型是怎么部署的?重点关注哪些?

写在前面 在设备端运行的大语言模型&#xff08;LLMs&#xff09;&#xff0c;即指在边缘设备上运行LLMs&#xff0c;因其出色的隐私保护、低延迟和节省带宽的特点而引起了广泛关注。然而&#xff0c;与功能更为强大的云中心相比&#xff0c;设备端LLMs的能力本质上受到边缘设…

高效数据处理:MapReduce与Hive的实战应用

文章目录 hive分析汇总互联网日志分析1.项目需求2.数据说明3.算法思路 用户电影推荐1.项目需求2.数据说明3.算法思路4.解题步骤 简单数据统计WordCount数据说明 疫情数据分析1.项目需求2.数据说明step1:创建ods层数据表step2&#xff1a;创建dwd层数据表step3&#xff1a;创建d…

Vue84 vue3项目结构分析

打开main.js文件&#xff0c;发现和vue2不同 //引入的不再是Vue构造函数了&#xff0c;引入的是一个名为createApp的工厂函数 import { createApp } from vue import App from ./App.vue//创建应用实例对象——app(类似于之前Vue2中的vm&#xff0c;但app比vm更“轻”) const …

D29【python 接口自动化学习】- python基础之输入输出与文件操作

day29 格式化输出 学习日期&#xff1a;20241006 学习目标&#xff1a;输入输出与文件操作&#xfe63;-41 格式化输出&#xff1a;如何将执行结果通过屏幕输出&#xff1f; 学习笔记&#xff1a; 三种常用的格式化输出方式 百分号方式 format函数方式 总结 1. 格式化输出…

win10服务器启动且未登录时自动启动程序

场景&#xff1a;公司服务器安装了几个程序&#xff0c;当服务器断电重启之后希望程序能自动打开&#xff0c;而不需要手动登录服务器打开。 因为软件是自己开发的所以安全方面这里没有考虑。 1.打开服务器管理器&#xff0c;点击工具&#xff0c;选择任务计划程序 2.在任务计…

文件处理不再难:带你轻松攻克C语言文件操作

嘿嘿,家人们,今天咱们来详细剖析C语言中的文件操作,好啦,废话不多讲,开干! 目录 1:为什么使用文件 2:文件的概念 2.1:程序文件 2.2:数据文件 2.3:文件名 3:二进制文件与文本文件 4:文件的打开与关闭 4.1:流与标准流 4.1.1:流 4.1.2:标准流 4.2:文件指针 4.3:文件的…

小米路由器ax1500+DDNS+公网IP+花生壳实现远程访问

有远程办公的需求&#xff0c;以及一些其他东西。 为什么写&#xff1f; ax1500路由器好像没搜到相关信息。以及其中有一点坑。 前置 公网ip Xiaomi路由器 AX1500 MiWiFi 稳定版 1.0.54 实现流程 花生壳申请壳域名https://console.hsk.oray.com/ 这里需要为域名实名认证 …

深度学习-----------------------注意力分数

目录 注意力分数注意力打分函数代码 掩蔽softmax操作拓展到高纬度Additive Attention(加性注意力)加性注意力代码演示一下AdditiveAttention类该部分总代码注意力权重 Scaled Dot-Product Attention&#xff08;缩放点积注意力&#xff09;缩放点积注意力代码演示一下DotProduc…

35-搜索插入位置

题目:35. 搜索插入位置 - 力扣&#xff08;LeetCode&#xff09; 思想:常规的二分&#xff0c;很简单的理解是当大于所有数时要在right的边界1插入 class Solution { public:int searchInsert(vector<int>& nums, int target) {int left 0;int right nums.size()-…

“高效解决PL/SQL Developer软件过期问题的方法“

目录 背景&#xff1a; 解决方法&#xff1a; 方法1&#xff1a;删除注册表信息 ​方法2&#xff1a;使用注册码 那种方式更好&#xff1a; 背景&#xff1a; 前段时间&#xff0c;由于项目需要&#xff0c;我下载了PL/SQL Developer这款强大集成开发环境&#xff0c;(ID…

白嫖EarMaster Pro 7简体中文破解版下载永久激活

EarMaster Pro 7 简体中文破解版功能介绍 俗话说得好&#xff0c;想要成为音乐家&#xff0c;就必须先拥有音乐家的耳朵&#xff0c;相信很多小伙伴都已经具备了一定的音乐素养&#xff0c;或者是说想要进一步得到提升。那我们就必须练好听耳的能力&#xff0c;并且把这种能力…

【新人系列】Python 入门(一):介绍及环境搭建

✍ 个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4dd; 专栏地址&#xff1a;https://blog.csdn.net/newin2020/category_12801353.html &#x1f4e3; 专栏定位&#xff1a;为 0 基础刚入门 Python 的小伙伴提供详细的讲解&#xff0c;也欢迎大佬们…

设计模式之适配器模式(通俗易懂--代码辅助理解【Java版】)

文章目录 设计模式概述1、适配器模式2、适配器模式的使用场景3、优点4、缺点5、主要角色6、代码示例1&#xff09;UML图2&#xff09;源代码&#xff08;1&#xff09;定义一部手机&#xff0c;它有个typec口。&#xff08;2&#xff09;定义一个vga接口。&#xff08;3&#x…

传奇服务端快捷助手

定位传奇各目录&#xff0c;一键打开各配置文件。<br>收纳引擎、端口配置检查&#xff08;批量&#xff09;、路径配置、文本搜索、文件同步、一键重载&#xff08;跨桌面&#xff09;、命令管理 参考资料 传奇服务端快捷助手2024-06-20 - 工具软件程序 - 51开发者联盟 -…

JVM 内存区域 堆

堆是JVM中相当核心的内容&#xff0c;因为堆是JVM中管理的最大一块内存区域&#xff0c;大部分的GC也发生在堆区&#xff0c;那接下来就让深入地探究一下JVM中的堆结构。 需要明确&#xff0c;一个JVM实例只存在一个堆内存&#xff0c;堆区在JVM启动的时候就被创建&#xff0c…

在线教育系统开发:SpringBoot技术实战

3系统分析 3.1可行性分析 通过对本微服务在线教育系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本微服务在线教育系统采用SSM框架&#xff0c;JAVA作为开…

Vue2电商平台(五)、加入购物车,购物车页面

文章目录 一、加入购物车1. 添加到购物车的接口2. 点击按钮的回调函数3. 请求成功后进行路由跳转(1)、创建路由并配置路由规则(2)、路由跳转并传参(本地存储) 二、购物车页面的业务1. uuid生成用户id2. 获取购物车数据3. 计算打勾商品总价4. 全选与商品打勾(1)、商品全部打勾&a…

Nature 正刊!树木多样性促进天然林土壤碳氮的固存

本文首发于“生态学者”微信公众号&#xff01; 2023年4月26日&#xff0c;《Nature》杂志在线发表了浙江农林大学陈信力教授、Scott X. Chang教授及湖首大学Han Y. H. Chen教授等合作的最新研究成果 “Tree diversity increases decadal forest soil carbon and nitrogen acc…

深入掌握 Golang 单元测试与性能测试:从零开始打造高质量代码!

在软件开发中&#xff0c;测试是保证代码质量、减少错误的重要环节。Golang 自带了强大的测试工具&#xff0c;不仅支持单元测试&#xff0c;还支持性能测试&#xff0c;让开发者可以轻松进行代码的测试和优化。本文将详细介绍如何在 Go 中进行单元测试和性能测试&#xff0c;帮…