基于51单片机的智能温控风扇(程序+仿真+原理图)

2023-05-16

目录

  • 基于51单片机的智能温控风扇
    • 1、主要功能
    • 2、实验结果
    • 3、仿真工程
    • 4、原理图
    • 5、程序源码
    • 6、资源获取

基于51单片机的智能温控风扇

1、主要功能

基于51单片机的智能温控风扇,通过DS180温度传感器采集温度,并通过数码管显示温度,当温度高于20°时,开启风扇降温,当温度低于20°时风扇关闭。

2、实验结果

基于51单片机的智能温控风扇

3、仿真工程

方案验证仿真软件使用的是Proteus仿真文件,Proteus软件版本为8.8;如需下载软件,可以在公众号后台回复:Proteus
在这里插入图片描述

4、原理图

在这里插入图片描述在这里插入图片描述

5、程序源码

在这里插入图片描述

/**
  ************************************* Copyright ****************************** 
  File name: // 文件名
  Author:Kevin
  Version: //1.0
  Description: // 温控风扇,高于20度风扇开启,低于20度风扇关闭。
  Others: // 其它内容的说明
  Log: // 公众号:Kevin的学习站
  ******************************************************************************
 */

#include<reg51.h>
#include<intrins.h>			 //包含头文件
#define uchar unsigned char
#define uint unsigned int		 //宏定义

sbit dj=P1^0;//电机控制端接口
sbit DQ=P1^6;//温度传感器接口
//按键接口/
sbit key1=P3^5;//设置温度
sbit key2=P3^6;//温度加
sbit key3=P3^7;//温度减
//
sbit w1=P2^4;
sbit w2=P2^5;
sbit w3=P2^6;
sbit w4=P2^7;			  //数码管的四个位
/共阴数码管段选//
uchar table[22]=
{0x3F,0x06,0x5B,0x4F,0x66,
0x6D,0x7D,0x07,0x7F,0x6F,
0x77,0x7C,0x39,0x5E,0x79,0x71,
0x40,0x38,0x76,0x00,0xff,0x37};//'-',L,H,灭,全亮,n	 16-21
uint wen_du;						//温度变量  
uint shang,xia; //对比温度暂存变量
uchar dang;//档位显示
uchar flag;
uchar d1,d2,d3;//显示数据暂存变量
void delay(uint ms)		//延时函数,大约延时25us
{
	uchar x;
	for(ms;ms>0;ms--)
		for(x=10;x>0;x--);
}
/***********ds18b20延迟子函数(晶振12MHz )*******/ 
void delay_18B20(uint i)
{
	while(i--);
}
/**********ds18b20初始化函数**********************/
void Init_DS18B20() 
{
	 uchar x=0;
	 DQ=1;          //DQ复位
	 delay_18B20(8);  //稍做延时
	 DQ=0;          //单片机将DQ拉低
	 delay_18B20(80); //精确延时 大于 480us
	 DQ=1;          //拉高总线
	 delay_18B20(14);
	 x=DQ;            //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
	 delay_18B20(20);
}
/***********ds18b20读一个字节**************/  
uchar ReadOneChar()
{
	uchar i=0;
	uchar dat=0;
	for (i=8;i>0;i--)
	 {
		  DQ=0; // 给脉冲信号
		  dat>>=1;
		  DQ=1; // 给脉冲信号
		  if(DQ)
		  dat|=0x80;
		  delay_18B20(4);
	 }
 	return(dat);
}
/*************ds18b20写一个字节****************/  
void WriteOneChar(uchar dat)
{
 	uchar i=0;
 	for (i=8;i>0;i--)
 	{
  		DQ=0;
 		DQ=dat&0x01;
    	delay_18B20(5);
 		DQ=1;
    	dat>>=1;
	}
}
/**************读取ds18b20当前温度************/
void ReadTemperature()
{
	uchar a=0;
	uchar b=0;
	uchar t=0;
	Init_DS18B20();
	WriteOneChar(0xCC);    	// 跳过读序号列号的操作
	WriteOneChar(0x44); 	// 启动温度转换
	delay_18B20(100);       // this message is wery important
	Init_DS18B20();
	WriteOneChar(0xCC); 	//跳过读序号列号的操作
	WriteOneChar(0xBE); 	//读取温度寄存器等(共可读9个寄存器) 前两个就是温度
	delay_18B20(100);
	a=ReadOneChar();    	//读取温度值低位
	b=ReadOneChar();   		//读取温度值高位
	wen_du=((b*256+a)>>4);    //当前采集温度值除16得实际温度值
}
void display()//显示温度
{
	w1=0;P0=table[d1];delay(10); //第1位
	P0=0x00;w1=1;delay(1);
	 
	w2=0;P0=table[16];delay(10);//第2位
	P0=0x00;w2=1;delay(1);

	w3=0;P0=table[d2]; delay(10);//第3位
	P0=0x00;w3=1;delay(1);

	w4=0;P0=table[d3];delay(10);//第4位
	P0=0x00;w4=1;delay(1);
}
void zi_keyscan()//自动模式按键扫描函数
{
	if(key1==0)							  //设置键按下
	{
		delay(30);						  //延时去抖
		if(key1==0)flag=1;				  //再次判断按键,按下的话进入设置状态
		while(key1==0);//松手检测		  //按键释放
	}
	while(flag==1)						  //进入设置上限状态
	{
		d1=18;d2=shang/10;d3=shang%10;	  //显示字母H 和上限温度值
		display();						  //调用显示函数
		if(key1==0)						  //判断设置键是否按下
		{
			delay(30);					  //延时去抖
			if(key1==0)flag=2;			  //按键按下,进入设置下限模式
			while(key1==0);//松手检测
		}
		if(key2==0)						  //加键按下
		{
			delay(30);					  //延时去抖
			if(key2==0)					  //加键按下
			{
				shang+=5;				  //上限加5
				if(shang>=100)shang=100;  //上限最大加到100
			}while(key2==0);//松手检测
		}
		if(key3==0)						  //减键按下
		{
			delay(30);					  //延时去抖
			if(key3==0)					  //减键按下
			{
				shang-=1;				  //上限减1
				if(shang<=10)shang=10;	  //上限最小减到10
			}while(key3==0);//松手检测
		}		
	}
	while(flag==2)						  //设置下限
	{
		d1=17;d2=xia/10;d3=xia%10;		  //显示字母L 显示下限温度值
		display();						  //以下注释同上
		if(key1==0)
		{
			delay(30);
			if(key1==0)flag=0;
			while(key1==0);//松手检测
		}
		if(key2==0)
		{
			delay(30);
			if(key2==0)
			{
				xia+=5;
				if(xia>=95)xia=95;	
			}while(key2==0);//松手检测
		}
		if(key3==0)
		{
			delay(30);
			if(key3==0)
			{
				xia-=1;
				if(xia<=0)xia=0;	
			}while(key3==0);//松手检测
		}		
	}
}
void zi_dong()//自动温控模式
{
	uchar i;
	d1=dang;d2=wen_du/10;d3=wen_du%10;		//显示档位,显示当前温度值
	zi_keyscan();//按键扫描函数
	display();	 //调用显示函数
	if(wen_du<xia){dj=0;dang=0;}//低于下限  档位为0 电机停止
	if((wen_du>=xia)&&(wen_du<=shang))//温度大于下限,小于上限  1挡
	{
		dang=1;											//档位置1
		for(i=0;i<3;i++){dj=0;display();zi_keyscan();}	//PWM通过延时得到
		for(i=0;i<6;i++){dj=1;display();zi_keyscan();}		
	}
	if(wen_du>shang){dj=1;dang=2;}//高温全速
}
void main()		  //主函数
{
	uchar j;
	dj=0;		  //电机开
	shang=30;
	xia=20;		  //初始上下限值
	for(j=0;j<80;j++)	  //先读取温度值,防止开机显示85
	ReadTemperature();
	while(1)			  //进入while循环
	{	
		ReadTemperature();	//读取温度值
		for(j=0;j<100;j++)zi_dong();//自动温控模式
	}
}

6、资源获取

在这里插入图片描述

项目的仿真和程序工程已经放在下面公众号里面,可以关注公众号:Kevin的学习站,输入关键字:“温控风扇”,就可以获取啦!创作不易,但您的点赞、关注、收藏就是对我最大的鼓励!
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于51单片机的智能温控风扇(程序+仿真+原理图) 的相关文章

  • 虚拟机分配的硬盘太大怎么办?

    虚拟机分配的硬盘太大怎么办 xff1f 虚拟机分配的硬盘太大怎么办 xff1f 文章来源说明 xff1a 开始1 首先需要将虚拟机中多余的硬盘空间删除 xff0c 在此电脑中右键管理 xff0c 然后在磁盘管理中右键有多余空间的磁盘进行压缩
  • QT界面窗口的显示和隐藏,关闭

    这里写目录标题 QT窗口的显示和隐藏 xff1a 1 隐藏窗口1 1 介绍 xff1a 2 显示窗口2 1 介绍 xff1a 3 关闭窗口常用函数有 xff1a QT窗口的显示和隐藏 xff1a 1 隐藏窗口 span class toke
  • QT的中文显示乱码问题解决

    QT的中文显示乱码问题解决 QT的中文显示乱码问题解决 xff1a 1 查看源文件的编码格式 xff0c 有必要的话转换源文件的编码格式再重新编译运行尝试汉字能否正常显示 2 在代码里面解决 xff1a 3 用法 xff1a QT的中文显示
  • 0.9 - GPIO寄存器的C语言映射与STM32库函数雏形构建思路

    首先 xff0c 从参考手册可知 xff0c 程序存储器 xff08 flash xff09 数据存储器 SRAM 寄存器 外设控制 和输入输出端口被组织在同一个4GB的线性地址空间内 数据字节以小端格式存放在存储器中 一个字里的最低地址字
  • Linux文件/文件夹建立软硬链接

    建立软连接 xff1a sudo ln s home spike Downloads redis src redis server usr local bin redis server 源文件 链接到 目标文件 xff0c 这两个文件目录都
  • Linux中记录终端(Terminal)输出到文本文件四种方法

    Linux中记录终端 xff08 Terminal xff09 输出到文本文件 Linux中记录终端 xff08 Terminal xff09 输出到文本文件 一 xff0c 如何把命令运行的结果保存到文件当中 二 command gt f
  • C++ 标准库头文件汇集:

    C 43 43 标准库头文件汇集 xff1a C 43 43 标准库的接口由下列头文件的汇集定义 C 43 43 标准库头文件汇集 xff1a 概念库协程库工具库动态内存管理数值极限错误处理字符串库容器库迭代器库范围库算法库数值库本地化库输
  • C++开源库列表总结记录

    开源 C 43 43 库列表 前言包管理器库音频 音频指纹格式标签CD 性能测试 通信 并发 配置 XMLJSONYAMLTOMLHOCONCSS容器 密码学 数据库 嵌入语言绑定 嵌入式 实时 文件元数据 金融计算 游戏引擎架构 通用多媒
  • C++转义序列和操作符优先级

    C 43 43 转义序列和操作符优先级 1 转义序列 xff1a 2 C 43 43 运算符优先级注解 1 转义序列 xff1a 转义序列 描述 表示 简单转义序列 39 单引号 ASCII 编码中为字节 0x27 34 双引号 ASCII
  • PX4:Policy “CMP0097“ is not known to this version of CMake.

    make px4 fmu v3 时报的错 CMake版本的问题 由https blog csdn net zhizhengguan article details 118380965推测 xff0c 删除cmake policy也没事 ma
  • 安装Anaconda3后再安装ROS(用于PX4)

    记录一下安装anaconda后再安装ROS xff0c 方便未来找错误 出现no module wstool 仔细观察报错信息发现调用的库都在anaconda3 lib python3 7里面了 随后按照https www cnblogs
  • Offboard仿真时出现CMD: Unexpected command 176, result 0

    在用PX4 43 gazebo 43 ROS仿真offboard例程时 xff0c 如果出现以下问题 xff1a 运行以下命令 xff1a roslaunch mavros px4 launch fcu url span class tok
  • Offboard例程的python版本

    因为python的库很丰富 xff0c 有现成的解方程库 xff0c 比如sympy 自己写了一份python版本的自动起飞2m的程序 假设自定义的包名为offb xff0c 在offb下新建scripts文件夹 xff0c 将py文件放在
  • 子类与父类构造函数调用顺序

    子类与父类构造函数调用顺序 构造函数 当创建子类对象时 构造函数的调用顺序 xff1a 静态数据成员的构造函数 gt 父类的构造函数 gt 非静态的数据成员的构造函数 gt 自己的构造函数 注意 无论创建几个对象 该类的静态成员只构建一次
  • 0.1- 机械加工工艺-----切削加工基础

    1 钳工 xff1a 通过工人手持工具进行切削加工 机械加工 xff1a 采用不同的机床 xff08 如车床 铣 床 刨床 磨床 钻床等 xff09 对工 件进行切削加工 2 零件几何参数 xff1a 1 宏观几何参数 xff1a 包括 x
  • 判断当前机器的字节序是大端还是小端?

    字节序 字节序是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序 大端字节序 xff08 Big endian xff09 大端存储模式是指数据的高字节保存在内存的低地址中 xff0c 而数据的低字节保存在内存的高地址中 小端字
  • Qt简易计算器实现复数运算绘图等等

    太久没更新博客了前段时间弄了个计算器 实现了加减乘除复数 带记忆 绘图计算二维图形等功能 先简单讲解下我代码的分块 用图片描述虽然画的丑 实现效果图片 代码放心使用转载请通知 1 Ui 2 在Maindow 类实现计算 maindow h
  • 【tensorboard】可视化events.out.tfevents文件

    介绍 笔者训练Mask RCNN模型时 xff0c 在生成权重 xff08 h5 xff09 文件的同时会实时更新events out tfevents szfj文件 xff0c 通过tensorboard可视化events out tfe
  • 【tensorflow】缺少libcudart.so.11.0和libcudnn.so.8解决方法

    问题 xff1a 安装tensorflow gpu xff0c 在测试是否调用GPU时出现如下问题 xff1a Could not load dynamic library libcudart so 11 0 dlerror libcuda
  • 【Lane】 Ultra-Fast-Lane-Detection 复现

    引言 笔者Ultra Fast Lane Detection专栏链接 x1f517 导航 xff1a Lane Ultra Fast Lane Detection 复现 Lane Ultra Fast Lane Detection xff0

随机推荐