本设计由STC89C52单片机电路+红外避障传感器模块电路+DS18B20温度传感器电路+继电器控制电路+风扇控制电路+电源电路组成。
1、当温度低于40℃时,继电器1闭合,否则继电器1断开。
2、如果红外避障传感器检测到障碍物,则继电器2闭合5秒后断开,同时风扇启动,10秒后风扇停转。
3、在此期间一旦没有红外,洗手器立马停止。
资料下载地址
https://pan.baidu.com/s/175sqJJjcBRURj5kNQnf4Cw?pwd=8888
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<stdio.h>
#include "18b20.h"
#include "1602.h"
#include "delay.h"
sbit key1=P2^0; //引脚定义
sbit key2=P2^1;
sbit key3=P2^2;
sbit fan =P1^1;
sbit relay1 =P1^2;
sbit relay2 =P1^3;
sbit hot =P3^2;
unsigned long time20ms=0; //定时计数
unsigned char ReadTempFlag=0;//定义读时间标志
int temp1; //温度读取值
float temperature; //实际温度
char dis0[16];//定义显示区域临时存储数组
char dis1[16]; //温度显示
unsigned int yunTime = 0; //运行时间
unsigned char runStep = 1; //运行步骤
void Init_Timer0(void);//定时器初始化
void CheckKey(void);
void main (void)
{
Init_Timer0();
DelayMs(20); //延时有助于稳定
relay2 = 1;
fan = 1;
while (1) //主循环
{
if(hot == 0)
{
if(runStep == 1) //运行步骤
{
relay2 = 0; //打开继电器5s
fan = 1;
}
else if(runStep == 2) //运行步骤
{
relay2 = 1; //风扇运行10s
fan = 0;
}
}
else
{
runStep = 1;
yunTime = 50;//运行时间 5s
relay2 = 1; //停止
fan = 1;
}
}
}
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
//TH0=0x00; //给定初值
//TL0=0x00;
EA=1; //总中断打开
ET0=1; //定时器中断打开
TR0=1; //定时器开关打开
}
void Timer0_isr(void) interrupt 1
{
TH0=(65536-20000)/256; //重新赋值 20ms
TL0=(65536-20000)%256;
time20ms++;
if(time20ms%5==0) //更新显示
{
if(yunTime > 0) yunTime-- ; //运行时间--
if(time20ms%45==0) //读取温度
{
ReadTempFlag=1; //读标志位置1
}
}
}
资料下载地址