首页 > 其他分享 >课设毕设分享:基于单片机的风扇控制器设计 (AT89C52、Proteus、Keil)二、DHT11温湿度传感器 手把手教学如何做一份高分课设

课设毕设分享:基于单片机的风扇控制器设计 (AT89C52、Proteus、Keil)二、DHT11温湿度传感器 手把手教学如何做一份高分课设

时间:2025-01-16 16:30:02浏览次数:3  
标签:毕设 temp 课设 温湿度 delay 单片机 10us dht11 DHT11

往期内容

课设毕设分享:基于单片机的风扇控制器设计 (AT89C52、Proteus、Keil)一、初期准备+单片机最小系统(时钟电路、复位电路)手把手教学如何做一份高分课设

文章目录


前言

本文记录了通过使用Proteus8.17、KeilC51、AT89C52单片机进行课程设计:基于单片机的风扇控制器设计


声明:本文章在编写过程中,我始终致力于尊重并保护所有原创内容及其知识产权。然而,由于信息来源的多样性和复杂性,可能存在个别内容未明确标注出处、存在事实性错误或无意中侵犯了他人的知识产权的情况。对于任何可能存在的上述问题,我深感歉意,并在此提前向受影响的作者表示最诚挚的歉意。我始终秉持着尊重原创、维护知识产权的原则,绝无意侵犯任何人的合法权益。一旦收到您的反馈,我将立即核实并在第一时间内对文章进行修改。这包括但不限于补充相关引用信息、更正错误内容或删除涉嫌侵权的内容。再次感谢您的关注与支持,期待与您共同营造一个更加美好的知识共享空间。新手文章诸多不足,还望海涵

一、课设要求

1.基本要求

一、设计基础目标
我们的目标是设计一个能够根据环境温度自动调节风扇开关的控制器,同时提供手动控制选项。以下是各模块的具体需求:

二、硬件组成
基本硬件:

8051单片机。
时钟电路和复位电路。
温度传感器(推荐使用LM35)。
继电器驱动电路。
风扇电机。
按键输入模块。
显示模块(采用LED或LCD)。

三、软件设计

请编写控制程序,确保能够至少完成温度读取、风扇控制和显示功能。并且绘制软件流程图。

四、仿真与调试
请使用Proteus软件构建整个电路并进行仿真。

五、可选扩展功能
如果时间允许,自行定义扩展功能:

2.方案设定

首先进行前期准备工作

配置环境

Proteus8.17(该版本的优势在于其中含有更多ST的单片机,在日后的记录分享里将进行展示)
Keil5 C51版本(使用MDK版本无法驱动51内核的单片机)
Visio(该软件是为绘制程序流程图的)

绘制思维导图

初期准备

功能要求分析

本课设项目旨在设计一种基于 AT89C52 单片机的智能风扇控制器,此项目的主要功能需求体现在多方面,不仅涵盖环境监测、设备控制,还考虑了用户互动与安全防护。为了有效满足功能需求,系统将由多个模块协同工作,具体功能要求如下:
(1)环境监测反馈功能
(2)风扇自动调节功能
(3)功能模式选择功能
(4)风扇摇头控制功能
(5)加热模块控制功能
(6)全局紧急停止功能
(7)高温上限设置功能
(8)声光报警提示功能
综上所述,本课设项目的功能设计将热舒适性与用户体验放在首位,通过多种功能的灵活组合,为用户提供一个高效、智能、贴心的环境调节方案。确保了功能的全面性与操作的简便性,更进一步提升了现代智能家居的实际应用价值。

大致方案设计

本课设项目的目标是设计一个基于 AT89C52 单片机的智能风扇控制器,以实现对环境温湿度的高效管理和控制。
为此,系统整体方案设计分为三种主要的运行模式:自动监测控制模式、手动控制模式以及高温报警设置模式。

二、DHT11温湿度传感器

最小系统已经在前面的文章中绘制完成,本文紧跟之前的文章
课设毕设分享:基于单片机的风扇控制器设计 (AT89C52、Proteus、Keil)一、初期准备+单片机最小系统(时钟电路、复位电路)手把手教学如何做一份高分课设

1.DHT11

DHT11温湿度传感器是一款低成本且高效的环境监测设备,具备简单的电路结构及易于使用的特性。它通常有三个引脚:VCC供电引脚、GND接地引脚,以及用于数据传输的SDA引脚。DHT11采用单总线通信协议,这意味着所有数据通过这一根SDA线传送,并且在这一过程中使用的是半双工模式,即在数据传输的同一时刻只能单向传输。其通信方式与IIC(Inter-Integrated Circuit)协议类似,二者都依赖时钟信号确保数据的同步传输。

在电路设计中,SDA线通过上拉电阻连接到电源VCC,确保在空闲状态下保持高电平,这对于数据传输至关重要,如图3-3所示。当DHT11需要发送数据时,它会通过改变SDA线的电平状态向主控制器发出信号,从而开始数据传输。这种简单而有效的设计不仅提高了温湿度测量的准确性,还确保了信号的稳定性与可靠性,使得DHT11在家居自动化、气象监测等应用场合中得到广泛使用。

在这里插入图片描述

驱动程序

DHT11 温湿度传感器采用单总线协议进行数据传输,每次通信传输总计 40 位数据。这 40 位数据可以分为三个部分:前 16 位用于表示湿度,中间 16 位表示温度,最后 8 位为校验位。在读取数据时,单片机必须一次性接收这 40 位信息

在这里插入图片描述

在接收到数据后,首先会对校验位进行验证。只有在校验成功的情况下,才可以确定这次读取的温度和湿度值是准确的并可供使用。若校验失败,可能是由于时序错误,或者传感器本身存在问题,此时应丢弃这次读取的结果,无需进行数据处理。这样确保了获取的温湿度数据的可靠性,提高了系统的稳定性和精准性。

三、程序代码

#include "main.h"       
#include "reg52.h"      
#include "typedef.h"    
#include "drvdht11.h"   
#include "oled.h"       
#include "intrins.h"   
#include "delay.h"      
#include "key.h"        
#include "relay.h"      


u8 temp_val, humi_val; // 定义温度和湿度值的全局变量
u8 temp_up = 40;
u8 temp_down = 30;
u8 temp_turn = 40;
// 函数:delay_10us
// 功能:实现10微秒的延时
void delay_10us(void)  
{
    _nop_(); // 执行NOP指令,延时
    _nop_(); // 重复NOP指令以增加延时
    _nop_(); 
    _nop_(); 
    _nop_();
    _nop_(); 
}

// 函数:dht11_start
// 功能:启动与DHT11传感器的通信,发送起始信号
void dht11_start(void)
{
    DHT11_IO = 1;            // 先将DHT11_IO设置为高电平
    delay_10us();            // 延时10微秒
    DHT11_IO = 0;            // 拉低DHT11_IO线,开始通信
    delay_ms(20);            // 保持低电平至少20毫秒
    DHT11_IO = 1;            // 然后拉高DHT11_IO线
    delay_10us();            // 延时10微秒
    delay_10us();            // 再延时10微秒
    delay_10us();            // 再延时10微秒
    delay_10us();            // 再延时10微秒
}

// 函数:dht11_stop
// 功能:结束与DHT11传感器的通信
void dht11_stop(void)
{   
    delay_10us();            // 延时10微秒
    delay_10us();            // 再延时10微秒
    delay_10us();            // 再延时10微秒
    delay_10us();            // 再延时10微秒
    delay_10us();            // 再延时10微秒
    DHT11_IO = 1;            // 拉高DHT11_IO线,结束通信
}  	   

// 函数:dht11_data_get
// 功能:从DHT11传感器读取一个字节的数据
// 返回值:返回读取到的字节数据
uint8_t dht11_data_get(void)
{
    uint8_t i, dat = 0; // 定义循环计数器i和数据变量dat

    for (i = 0; i < 8; i++) // 循环8次以读取一个字节
    {
        while (!DHT11_IO); // 等待DHT11_IO变为高电平
        dat <<= 1;         // 数据左移一位,为新读入的位腾出空间
        delay_10us();      // 延时10微秒,准备读取数据
        
        // 延时50us,若DHT11_IO还为高则说明数据为1, 否则为0
        delay_10us();      
        delay_10us();      
        delay_10us();      
        delay_10us();      

        if (DHT11_IO)       // 判断DHT11_IO是高还是低
            dat++;          // 数据为1时,将dat加1,接收数据1
        
        while (DHT11_IO);  // 等待DHT11_IO变为低电平
    }

    return dat; // 返回读取到的数据
}

// 函数:TEM_CON
// 功能:根据温度值控制风扇的运行模式
void TEM_CON()
{
	if(temp_turn<temp_down)
	{
		temp_turn=temp_down;
	}
	// 根据读取到的温度值控制风扇的运行状态
	if(temp_val > temp_turn) {
			BUZZER_CON(10); // 温度大于40°C,触发蜂鸣器
			FAN_control(4);        // 启动风扇4
	} else if(temp_val > temp_down) {
			FAN_control(3);        // 温度大于30°C,启动风扇3
	} else if(temp_val > 25) {
			FAN_control(2);        // 温度大于25°C,启动风扇2
	} else if(temp_val > 20) {
			FAN_control(1);        // 温度大于20°C,启动风扇1
	} else if(temp_val > 15){
			FAN_control(0);        // 温度低于20°C,关闭所有风扇
	}
	else{
			FAN_control(2);        // 温度低于15°C,启动风扇2
			HOT = 1;      // 启动加热状态,吹暖风
		  LEDPINK = 0;  // 粉灯亮
	}
	OLED_ShowString(48, 4, "AUTO "); // 在OLED显示"自动"
}

// 函数:dht11_data_read
// 功能:读取DHT11传感器的数据,并显示在OLED上
void dht11_data_read(void)
{
    uint8_t buf[5]; // 数据缓冲区,用于存储读取到的5个字节数据
    
    dht11_start(); // 启动DHT11传感器通信
    
    if(!DHT11_IO) { // 检查DHT11_IO是否为低电平,表示传感器准备好发送数据
        
        while(!DHT11_IO); // 等待DHT11_IO变为高电平,表示传感器发送数据
        
        // 延时80微秒,准备读取数据
        delay_10us();    
        delay_10us();    
        delay_10us();    
        delay_10us();    
        delay_10us();    
        delay_10us();    
        delay_10us();    
        delay_10us();    
        
        // 读取温湿度数据
        buf[0] = dht11_data_get(); // 湿度值低字节
        buf[1] = dht11_data_get(); // 湿度值高字节
        buf[2] = dht11_data_get(); // 温度值低字节
        buf[3] = dht11_data_get(); // 温度值高字节
        buf[4] = dht11_data_get(); // 校验和
        
        dht11_stop(); // 结束通信
        
        // 数据校验
        // 如果数据校验和正确,将获取的温湿度值赋给全局变量
        if ((buf[0] + buf[1] + buf[2] + buf[3]) == buf[4]) 
				{
					temp_val = buf[2];   // 提取温度值
					humi_val = buf[0];    // 提取湿度值
        }
				// 在OLED上显示温度和湿度值
				OLED_ShowNum(48, 0, temp_val, 2, 16); // 显示温度
				OLED_ShowNum(48, 2, humi_val, 2, 16);  // 显示湿度
    }
}




程序流程图如下

在这里插入图片描述

四、总体演示效果

提前将基础的原理图展示出来作为分享。作为提前预告督促自己尽快爆肝。
请添加图片描述

总结

经过一个充实而忙碌的夜晚,我满怀热情地撰写了一篇关于单片机课设的文章,虽然已尽力详尽,但深知文章中仍不免有诸多省略和未及细讲之处。对于那些在阅读过程中仍感意犹未尽、存有疑问的同学,建议大家不妨拓宽视野,多阅读几篇来自不同作者、风格各异的优秀文章。相信通过多角度、多层次的学习,你们定能集百家之长从而对单片机有更加深入和全面的理解。

在此,我的初衷不仅是为初学者提供一份学习路上的指引,也是对自己学习历程的一次回顾与总结。通过分享,我希望能激发更多人对单片机技术的兴趣,共同探索这片充满挑战与机遇的领域。

为了保持内容的连贯性和避免不必要的重复,我计划在未来的博客中,对于本文中已提及但未深入展开的话题,将通过链接的方式引导大家回到本文进行查阅。同时,我也将不断优化和完善文章内容,力求为大家提供更加准确、全面、易于理解的学习资源。

下期预告——关于OLED显示屏驱动的学习分享。

感谢大家的关注与支持


参考文献引用

DHT11温湿度传感器编程思路以及代码的实现

标签:毕设,temp,课设,温湿度,delay,单片机,10us,dht11,DHT11
From: https://blog.csdn.net/m0_72614426/article/details/145185827

相关文章

  • 东软云医院HIS系统-药房管理系统【Swing窗口+MySQL】(Java课设)
         客官进来看一眼呗,有惊喜!【帮你解决烦恼】:Java课设和计Java毕设太难不会做怎么办?系统类型Swing窗口类型+Mysql数据库存储数据使用范围适合作为Java课设!!!部署环境jdk1.8+Mysql8.0+Idea或eclipse+jdbc运行效果本系统源码地址:东软云医院HIS系统-药房管理系统【Sw......
  • 基于大数据+协同过滤推荐算法+数据可视化大屏+SpringBoot的校园食堂订餐系统设计和实
    博主介绍:CSDN毕设辅导第一人、靠谱第一人、全网粉丝50W+,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术......
  • springboot流浪动物领养系统源码毕设+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当今社会,流浪动物问题日益凸显,成为城市管理和动物保护领域的一大挑战。随着城市化进程的加速,流浪动物的数量不断增加,它们面临着食物短缺、疾病困扰......
  • 【springboot农产品托管系统源码毕设+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着现代农业的快速发展,农产品的生产、管理与销售环节日益复杂,传统的农业管理模式已难以满足当前高效、精准的农业管理需求。特别是在农产品从生产到......
  • springbootApex英雄游戏展示网站源码毕设+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着电子竞技与游戏文化的蓬勃发展,英雄类游戏在全球范围内赢得了广泛的关注与热爱。这类游戏以其丰富的角色设定、精彩的游戏剧情以及高度互动的游戏......
  • springboot毕设 公司日常考勤系统 程序+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当今快节奏的商业环境中,企业管理的高效性和准确性成为了影响企业竞争力的关键因素之一。公司日常考勤系统作为企业管理体系中的重要组成部分,其重要......
  • springboot毕设 个性化电影推荐系统的设计与实现 程序+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当今信息化高速发展的时代,企业管理的效率与准确性直接关系到其市场竞争力。合意门业作为一家专注于门类产品销售与服务的企业,面临着日益增长的订单......
  • springboot毕设 合意门业销售订单处理管理信息系统 程序+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当今信息化高速发展的时代,企业管理的效率与准确性直接关系到其市场竞争力。合意门业作为一家专注于门类产品销售与服务的企业,面临着日益增长的订单......
  • springboot毕设 固定资产管理系统 程序+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着企业规模的不断扩大和业务范围的日益复杂,固定资产的管理成为企业管理中的重要环节。固定资产作为企业长期使用的有形资产,其种类繁多、数量庞大,涉......
  • springboot毕设 广告设计与投放系统 程序+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当今信息爆炸的时代,广告已成为企业推广产品、服务,提升品牌影响力的关键手段。随着互联网的迅猛发展,广告设计与投放的方式也经历了翻天覆地的变化。......