基于51单片机的红外遥控电风扇

前述:
QQ:961209458
V X:F9986858
承接毕业设计。

设计内容

本设计将要实现一个以单片机为核心的红外遥控电风扇系统的设计。该控制系统具有红外遥控发射与接收,温度采集,定时工作,手动、自动控制转速的功能。采用红外遥控器远程控制风扇的开启和停止,也可以通过遥控控制控制风扇的工作时间,也可以根据温度自动控制风扇转速或是手动控制转速。

硬件方案

红外遥控电风扇系统硬件如下图1所示,其主要包括红外遥控发射器,遥控信号接收,温度采集,风扇控制以及单片机最小系统。单片机最小系统是整个系统的控制核心,负责各个模块之间的数据计算和传输。红外遥控器发射编码信号,接收头接收编码信息,由单片机进行解码,然后单片机根据解码指令进行风扇控制和定时,在屏幕部分可以显示当前室温和风扇转速档位。
在这里插入图片描述

软件方案

红外遥控电风扇系统软件流程图如图2所示,红外遥控电风扇系统设计采用单片机开发软件和应用软件来实现系统的设计。通过DS18B20来时实现温度采集,通过LCD1602屏幕显示风扇定时时长和转速档位,通过红外遥控器控制风扇的启动、停止以及工作时长。
在这里插入图片描述

硬件电路

在这里插入图片描述

在这里插入图片描述

部分核心代码

#include "reg52.h"
#include "lcd1602.h"
#include "delay.h"
#include "Ds18b20.h"
#include "infrared.h"

sbit LED1  = P2^5;
sbit LED2  = P2^6;
sbit LED3  = P2^7;

sbit AIN1 = P3^5;
sbit AIN2 = P3^4;
sbit PWMA = P3^3;

void Timer0_Init();
void LED_Select(u8 num);
void Motor();//电机


void main()
{
	LCD_Init();//LCD1602初始化
	Timer0_Init();//定时器0初始化
	IrInit();//外部中断初始化
	AIN1=0;AIN2=1;PWMA=0;//初始化TB6612  关闭电机
	
	while(1)
	{
		if(Temp_ok) {Temp_ok=0;Tem_display(Ds18b20ReadTemp());}//获取温度
		Display();//显示
		Ir_work();//红外解码
		Motor();//电机
	}
}
void Motor()
{
	u8 temp_wendu;
	if(time_set_ok)
	{
		if(motor_dangwei==0)LED_Select(0);
		if(motor_dangwei==1)LED_Select(1);
		if(motor_dangwei==2)LED_Select(2);
		if(motor_dangwei==3)LED_Select(3);
	}
	else
		LED_Select(0);
	
	//自动计算电机转速
	if(!hand_or_auto)
	{
		temp_wendu=shi*10+ge;
		if(temp_wendu>24) {PWM_Duty=temp_wendu-24;if(PWM_Duty>=10) PWM_Duty=10;}
		else PWM_Duty=0;
	}
	else {PWM_Duty=0;}
}

void LED_Select(u8 num)
{
	if(num==0)
	{LED1=0;LED2=0;LED3=0;}
	if(num==1)
	{LED1=1;LED2=0;LED3=0;}
	if(num==2)
	{LED1=1;LED2=1;LED3=0;}
	if(num==3)
	{LED1=1;LED2=1;LED3=1;}
}

void Timer0_Init()
{
	TMOD = 0x01;
	TH0 = (65536-1000)/256;//定时1ms
	TL0 = (65536-1000)%256;
	ET0 = 1;
	TR0 = 1;
	EA = 1;
}
void Service_Timer0() interrupt 1
{
	static u8 count;
	static u16 set_time_count;
	static u16 count_temp;
	TH0 = (65536-1000)/256;
	TL0 = (65536-1000)%256;
	count++;count_temp++;
	if(motor_run==1)
	{
		if(hand_or_auto==1&&run_time_1>0) PWM_Duty=motor_dangwei*3;//手动模式下,档位受控  0  3  6  9
		
		if(count<PWM_Duty)
		{PWMA=1;}//电机工作
		else
		{PWMA=0;}//电机不工作
		if(count==10)
		{count=0;}
	}
	
	if(++count_temp>=1000) {Temp_ok=1;count_temp=0;}//一秒获取一次温度
	
	if(time_set_ok){
		if(++set_time_count>=60000) {set_time_count=0;
			if(run_time_1>0){
				if(run_time_1==0){time_set_ok=0;motor_run=0;PWMA=0;}//时间为0
			run_time_1--;//一分钟减一
			run_time[0]=run_time_1/100;run_time[1]=run_time_1%100/10;run_time[2]=run_time_1%10;}//更新显示运行时间
		}
	}
}

Protues仿真

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值