一、功能简介
本项目使用Proteus8仿真51单片机控制器,使用红外传感器、PCF8591 ADC模块、加热风扇、继电器模块等。
主要功能:
系统运行后,默认选择为冷风,冷风指示灯亮,
当手靠近时,继电器吸合,风扇开启。
当手离开时,延迟3S关闭。
可通过按键K1选择冷风和热风,且对应指示灯亮。
当选择为热风,当手靠近,风扇开启,加热开启。
主要功能如下:
1、红外感应
2、冷暖风选择
3、冷热风指示
二、软件设计
/*
作者:嗨小易(QQ:3443792007)
*/
//系统参数初始化
void sys_parm_init(void)
{
sys_ctrl.mode=0;
LLED_PIN=0;RLED_PIN=1;
}
//系统数据获取
void sys_data_get(void)
{
while(1)
{
//读取红外感应值
sys_ctrl.ir=pcf8591_read_adcvalue(0);
//将范围0-255映射到0-100
sys_ctrl.ir=cal_map(sys_ctrl.ir,0,255,0,100);
break;
}
}
//系统数据调节
void sys_data_set(void)
{
u8 key=0;
key=key_scan(0);
//设置
if(key==KEY1_PRESS)
{
sys_ctrl.mode=!sys_ctrl.mode;
if(sys_ctrl.mode==0){LLED_PIN=0;RLED_PIN=1;}
else {LLED_PIN=1;RLED_PIN=0;}
}
}
//系统功能控制
void sys_fun_ctrl(void)
{
static u8 man_flag=0;
while(1)
{
//如果感应到有人
if(sys_ctrl.ir>=IR_VALUE && man_flag==0)
{
//模式为冷风,加热关闭,风扇开启
if(sys_ctrl.mode==0)
{
JR_PIN=1;
FS_PIN=0;
}
//模式为热风,加热开启,风扇开启
else
{
JR_PIN=0;
FS_PIN=0;
}
man_flag=1;
}
//当检测到人离开,3秒后关闭
if(sys_ctrl.ir<IR_VALUE && man_flag==1)
{
delay_ms(3000);
JR_PIN=1;
FS_PIN=1;
man_flag=0;
}
break;
}
}
//应用控制系统
void appdemo_show(void)
{
sys_parm_init();//系统参数初始化
while(1)
{
sys_data_get();//系统数据采集
sys_data_set();//系统数据调节
sys_fun_ctrl();//系统功能控制
}
}
//定时器1中断函数
void time1(void) interrupt 3
{
static u8 i=0;
TH1=0XDC; //给定时器赋初值,定时10ms
TL1=0X00;
i++;
if(i>=100) //定时1S
{
i=0;
}
}
三、实验现象
B站演示视频:https://space.bilibili.com/444388619
联系作者
B站演示视频:https://space.bilibili.com/444388619
专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。