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

article/2025/6/21 17:24:04

目录

  • 基于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:KevinVersion: //1.0Description: // 温控风扇,高于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); //精确延时 大于 480usDQ=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 importantInit_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;				  //上限加5if(shang>=100)shang=100;  //上限最大加到100}while(key2==0);//松手检测}if(key3==0)						  //减键按下{delay(30);					  //延时去抖if(key3==0)					  //减键按下{shang-=1;				  //上限减1if(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;											//档位置1for(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++)	  //先读取温度值,防止开机显示85ReadTemperature();while(1)			  //进入while循环{	ReadTemperature();	//读取温度值for(j=0;j<100;j++)zi_dong();//自动温控模式}
}

6、资源获取

在这里插入图片描述

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


http://chatgpt.dhexx.cn/article/jVILOQDD.shtml

相关文章

基于51单片机的温度监测控制系统仿真程序原理图设计

整体方案设计 3.1.1 系统概述 整个系统以STC89C52单片机为核心器件,配合电阻电容晶振等器件,构成单片机的最小系统。其它个模块围绕着单片机最小系统展开。其中包括,传感器采用DS18B20,负责采集温度数据后发给单片机。显示设备采用4位共阴数码管,显示检测到的温度值。按键…

51单片机电路原理图_51单片机AD转换电路设计实现

51单片机AD转换电路设计实现 关于AD转换的原理,大家在《数字电子技术》中已经学过,这里做过多的介绍,本文介绍一款经典的8位AD转换芯片ADC0804,基于51单片机设计AD转换电路,并完成测量值的转换。 1 芯片引脚介绍 CS:片选信号,低电平有效,即CS=0时候芯片才能正常工作,单…

51单片机电路原理图_HX711的电子秤称重系统设计详解,51单片机,含Proteus仿真、C代码、原理图、论文等...

设计要求 1.系统可实现电子秤基本的称重功能(称重范围为0~10Kg,重量误差不大于0.005Kg); 2.系统应具备键盘输入单价,显示重量,计算总价的功能; 3.单价和总价金额的单位为元,最大金额数值为999.99元,金额误差不大于0.01元; 4.系统超出最大测量范围10Kg时,具有报警指…

51单片机的简易计算器设计(仿真+程序+原理图+PCB+设计报告)

本设计&#xff1a; 基于51单片机的简易计算器设计&#xff08;仿真程序原理图PCB设计报告&#xff09; 仿真&#xff1a;proteus 7.8 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 编号S0001 芯片可以替换为STC89C52/STC89C51/AT89C52/AT89C51等51单片机芯…

51单片机计算机加原理图,MCS-51单片机最小系统的组成部分及电路图介绍

MCS-51单片机概述 MCS-51单片机是一种集成的电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到…

手把手教你看懂51单片机原理图

最近当了单片机课设的助教,又再次接触了51单片机。发现初学者还看不太原理图&#xff0c;不能理解单片机 led灯&#xff0c;蜂鸣器&#xff0c;数码管是怎么操作的。现在结合原理图讲解一下怎么操作这些外设模块&#xff01;我们就以一些初始化代码进行讲解。 注&#xff1a;这…

51单片机电路原理图_51单片机入门(第1篇):纯干货,单片机最小系统

当我们了解了什么是单片机,以及单片机有什么用之后,是否要考虑我们怎么去学习单片机呢?学习单片机其实很简单,需要的起步知识并不需要多少,接下来跟随我的步伐,一步一步的去了解单片机。本文将讲解单片机最小系统和仿真软件以及编程软件的选择。 0. 51单片机最小系统 先来…

理解51单片机最小系统的工作原理

51单片机最小应用系统 概述 要想使用单片机&#xff0c;第一个要搭建的电路就是单片机的最小系统&#xff0c;有了这个最小系统单片机就可以去正常的工作&#xff0c;即使没有其他的外围电路&#xff08;显示器啥的&#xff09;&#xff0c;也可以对单片机进行程序的编写&…

51单片机原理与设计方案(包含原理图与PCB)

一、单片机简介 单片机&#xff1a;在一片集成电路芯片上集成微处理器&#xff08;CPU&#xff09;、存储器&#xff08;ROM和RAM&#xff09;、I/O接口电路&#xff0c;从而构成了单芯片微型计算机&#xff0c;即单片机&#xff08;single chip Microcomputer&#xff09;也叫…

如何获得海量的RoboCode代码

原文地址&#xff1a;如何获得海量的RoboCode代码 作者&#xff1a;胡泊1982 很多对人工智能感兴趣的朋友受限于资金和场地的限制&#xff0c;只能转向虚拟平台发展。我们机器人天空网站也曾经做过专门的专题介绍了几种常见的虚拟机器人竞赛平台&#xff08;http://www.robotsk…

Robocode 参数大揭密

Robocode 参数大揭密 文档选项 将此页作为电子邮件发送 最新推荐 Java 应用开发源动力 &#xff0d; 下载免费软件&#xff0c;快速启动开发 级别: 初级 天翼.李Skyala.Li, 2002 年 12 月 02 日 下面天翼.李(Skyala.Li)就和大家一起来看看Robocode中重要的参数并分析分析…

在IDEA上部署Robocode

Robocode的下载和安装 下载网址&#xff1a;https://robocode.sourceforge.io/ 下载Robocode 解压&#xff0c;点击运行压缩包中的jar包完成安装&#xff0c;安装完成后得到肉搏code的文件夹 在Idea上部署robocode 打开IDEA&#xff0c;新建Java项目&#xff0c;注意项目的…

教你玩Robocode(4)——规则系统

理解Robocode的规则系统&#xff0c;你才能写出更好的坦克。许多规则在Robotcode的Roles类中进行了描述。为了便于大家理解&#xff0c;本文对各种规则参数进行详细叙述。 时间 robocode的时间单位为”轮”(turn)。因此&#xff0c;在描述移动速度时&#xff0c;单位为”像素每…

RoboCode的Intellij环境搭建

2019独角兽企业重金招聘Python工程师标准>>> RoboCode自带的源码编辑器十分不便&#xff0c;本次参考youtube上的教程搭建Intellij的roboCode开发环境&#xff0c;最终实现能够编写、编译、运行、调试机器人。 创建项目 首先&#xff0c;用Intellij IDEA新建一个pro…

利用Jython开发Robocode机器人

&#xff08;转载请注明来源于 金庆的专栏&#xff09;先用Python写个简单的机器人&#xff1a; from robocode import * class SampleBlaze(Robot): def run(self): while 1 : self.ahead( 100 ) self.back( 100 ) 编译为jar包&#xff0c;注意…

Robocode Rumble: 冠军的技巧

Robocode Rumble: 冠军的技巧 Rumble 冠军揭示胜利的机器人背后的策略 文档选项 将此页作为电子邮件发送 最新推荐 Java 应用开发源动力 &#xff0d; 下载免费软件&#xff0c;快速启动开发 级别: 初级 Dana Triplett Barrow, 自由技术撰稿人 2002 年 12 月 03 日 Roboc…

Robocode教程7——雷达锁定

在这次教程中&#xff0c;我们要写这样一个代码&#xff0c;它将让敌人逃不出我们的眼睛。雷达锁定是一个高效战斗机器人的基础&#xff0c;因为robot只有执行onScannedRobot方法&#xff0c;我们才能够获取敌人的信息&#xff0c;而onScannedRobot方法只有在我们的雷达扫描到敌…

robocode 安装 使用

记录一下 环境&#xff1a; Windows 7 64 JDK 1.8.0_131 一、安装 1、下载 https://robocode.sourceforge.io/ 当前最新版本&#xff1a;robocode-1.9.3.6-setup.jar 2、安装 双击 robocode-1.9.3.6-setup.jar 默认安装在C盘&#xff0c;并创建桌面快捷方式&#xff1b…

robocode java_IBM Robocode Java学习利器(1)Robocode 入门

编程肯定要学语言&#xff0c;相信很多人都会选java,无论什么书千篇一律都是从语法讲起&#xff0c;语法的枯燥反正我是深有体会的&#xff0c;但不先学语法还能学什么&#xff1f;编程的成就感来源于能做出什么东西&#xff0c;能实现什么&#xff0c;在没有做出实际的东西之前…