往期内容
课设毕设分享:基于单片机的风扇控制器设计 (AT89C52、Proteus、Keil)一、初期准备+单片机最小系统(时钟电路、复位电路)手把手教学如何做一份高分课设
课设毕设分享:基于单片机的风扇控制器设计 (AT89C52、Proteus、Keil)二、DHT11温湿度传感器 手把手教学如何做一份高分课设
课设毕设分享:基于单片机的风扇控制器设计 (AT89C52、Proteus、Keil C51)三、OLED12864液晶显示屏 IIC驱动 手把手教学如何做一份高分课设
文章目录
前言
本文记录了通过使用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 单片机的智能风扇控制器,以实现对环境温湿度的高效管理和控制。
为此,系统整体方案设计分为三种主要的运行模式:自动监测控制模式、手动控制模式以及高温报警设置模式。
二、继电器模块
最小系统已经在前面的文章中绘制完成,本文紧跟之前的文章
课设毕设分享:基于单片机的风扇控制器设计 (AT89C52、Proteus、Keil)一、初期准备+单片机最小系统(时钟电路、复位电路)手把手教学如何做一份高分课设
继电器模块
继电器模块在系统中负责开关控制风扇与加热模块的工作,通过控制继电器的通断,智能风扇系统能够灵活应对不同的气候条件,实现节能与舒适的平衡。
该电路利用NPN三极管作为开关来控制风扇或者加热模块的开关状态。
当控制IO口输出高电平时,电流通过电阻流向三极管的基极,使其导通,从而允许电流流过继电器的线圈,导致继电器触点闭合,风扇或者加热模块开始工作。此外,电路中并联的二极管用于续流保护电路,在继电器断电时提供反向电流路径,避免反向电动势对三极管和其他元件造成损害。还有一个限流电阻,确保基极电流处于安全范围,从而保护三极管不被烧毁。
声光报警
峰鸣器使用了NPN三极管Q1放大器进行驱动控制,当AT89C52单片机的控制引脚输出高电平时,三极管导通,蜂鸣响;当控制器的控制引脚输出低电平时,三极管截止,蜂鸣器不响。基极的高电平会使三极管饱和导通,蜂鸣器蜂鸣;基极低电平会使三极管阻塞,蜂鸣器关闭。
蜂鸣器是一种发声装置,通常分为有源蜂鸣器和无源蜂鸣器。我们在本课程设计中使用无源蜂鸣器,即通过调制频率的高低电平来产生声音。在这种情况下,可以通过改变引脚的输出频率和周期来控制音调的高低。
核心在于控制无源蜂鸣器的发声状态。通过单片机的引脚输出高低电平信号,利用NPN三极管作为开关元件,有效地调节电流流向蜂鸣器。具体来说,当引脚输出高电平时,三极管导通,蜂鸣器获得电流并发声;而当引脚输出低电平时,三极管截止,蜂鸣器停止工作。
发光二极管电路由功能设计需求设置了“红、黄、蓝、绿、粉”五个颜色的灯,为保护LED,每个二极管加上了220Ω的限流电阻
发光二极管是常见的指示器件,其工作原理同样是基于控制引脚的高低电平。当单片机的输出引脚为高电平时,LED 发光;而当引脚为低电平时,LED 则熄灭。
控制LED发光的亮度也可以通过PWM(脉宽调制)技术来实现,改变引脚输出高电平的时间比例,从而调节LED的亮度。
驱动程序
继电器是一种电气开关,用于控制较大电流或高电压负载的设备。其工作原理是通过单片机的输出引脚输出高电平信号,使继电器线圈通电,从而驱动内部触点闭合或断开。
当单片机输出高电平时,让NPN三极管导通,从而驱动继电器线圈通电。具体来说,当单片机的引脚输出高电平时,NPN三极管的基极通过一个限流电阻接收到电流,导致三极管导通,继电器的线圈产生磁场,吸引触点,使电路闭合;
而当引脚输出低电平时,线圈失去电流,触点恢复到原来的状态,电路断开。为了保护单片机引脚并确保继电器正常工作,通常在继电器和单片机之间会加入驱动电路,例如使用晶体管作为开关。
三、程序代码
继电器驱动程序
#include "main.h"
#include "relay.h"
#include "key.h"
u8 STOP_ALL; // 风扇模式,初始值为1
// 函数:BUZZER_CON
// 功能:控制蜂鸣器发声,执行一定次数的开关操作
// 参数:t - 每次开关的延时时间
void BUZZER_CON(u16 t)
{
u8 i; // 定义局部变量i用于循环计数
for(i = 0; i < 100; i++)
{ // 循环100次
BUZZER = ~BUZZER; // 反转蜂鸣器状态(发声/静音)
delay(t); // 延时t毫秒
}
}
void FAN_control(u8 Fan_num)//打开0个风扇 灯全灭
{
if(Fan_num == 0)
{
STOP_ALL=1;
HOT = 0;
RELAY1=0;
RELAY2=0;
RELAY3=0;
RELAY4=0;
LEDRED=1;
LEDYELLOW =1;
LEDBLUE=1;
LEDGREEN =1;
}
if(Fan_num == 1)
{
STOP_ALL=0;
RELAY1=1;
RELAY2=0;
RELAY3=0;
RELAY4=0;
LEDRED=1;
LEDYELLOW =1;
LEDBLUE=1;
LEDGREEN =0;
}
if(Fan_num == 2)
{
STOP_ALL=0;
RELAY1=1;
RELAY2=1;
RELAY3=0;
RELAY4=0;
LEDRED=1;
LEDYELLOW =1;
LEDBLUE=0;
LEDGREEN =1;
}
if(Fan_num == 3)
{
STOP_ALL=0;
RELAY1=1;
RELAY2=1;
RELAY3=1;
RELAY4=0;
LEDRED=1;
LEDYELLOW =0;
LEDBLUE=1;
LEDGREEN =1;
}
if(Fan_num == 4)
{
STOP_ALL=0;
RELAY1=1;
RELAY2=1;
RELAY3=1;
RELAY4=1;
LEDRED=0;
LEDYELLOW =1;
LEDBLUE=1;
LEDGREEN =1;
}
}
relay.h
#ifndef __RELAT_H__
#define __RELAY_H__
sbit HOT = P1^5;
sbit RELAY1 = P1^6;
sbit RELAY2 = P1^7;
sbit RELAY3 = P2^6;
sbit RELAY4 = P2^7;
sbit LEDYELLOW = P0^0;
sbit LEDBLUE = P0^1;
sbit LEDGREEN = P0^2;
sbit LEDRED = P0^3;
sbit LEDPINK = P0^4;
extern u8 STOP_ALL; // 全部停止
extern void FAN_control(u8 Fan_num);
#endif //__RELAY_H__
程序流程图如下
蜂鸣器程序流程图
继电器控制风扇与LED
四、总体演示效果
提前将基础的原理图展示出来作为分享。作为提前预告督促自己尽快爆肝。
总结
经过一个充实而忙碌的夜晚,我满怀热情地撰写了一篇关于单片机课设的文章,虽然已尽力详尽,但深知文章中仍不免有诸多省略和未及细讲之处。对于那些在阅读过程中仍感意犹未尽、存有疑问的同学,建议大家不妨拓宽视野,多阅读几篇来自不同作者、风格各异的优秀文章。相信通过多角度、多层次的学习,你们定能集百家之长从而对单片机有更加深入和全面的理解。
在此,我的初衷不仅是为初学者提供一份学习路上的指引,也是对自己学习历程的一次回顾与总结。通过分享,我希望能激发更多人对单片机技术的兴趣,共同探索这片充满挑战与机遇的领域。
为了保持内容的连贯性和避免不必要的重复,我计划在未来的博客中,对于本文中已提及但未深入展开的话题,将通过链接的方式引导大家回到本文进行查阅。同时,我也将不断优化和完善文章内容,力求为大家提供更加准确、全面、易于理解的学习资源。
下期预告——关于按键的学习分享。
感谢大家的关注与支持