思享国logo
  • 点赞

    2

  • 宝推

    0

  • 10

  • 回复

  • 下载附件

    1

返回顶部

点赞数

2

回复数

2

被浏览

575

基于STC11F04的可按键调整灯亮延时的智能小夜灯设计(附原理图、PCB、数据手册)

2018-01-04 17:32更新
  • 干货下载
  • STC11F04智能小夜灯
  • 可按键调整灯亮延时

本次分享的是基于STC11F04的可按键调整灯亮延时的智能小夜灯设计,可用于过道、走廊等各种不好关灯或者懒得关灯的场合。


实现功能?

1.晚上感应到声音,灯亮延时一段时间后熄灭;如果一直检测到声音便常亮直到检测不到为止。白天,不论是否感应到什么灯都不亮。

2.主控面板三颗LED,按键一直按下时显示灯亮延时时长,按键不按下时显示各个感应模块状态。检测到时晚上时最左边一颗灯,当感应到有动的物体时中间一颗灯亮,当检测到声音时最右边一颗灯亮。

3.可通过按键调整灯亮延时时长。


原理实现?

原理图

通过光敏电阻和人体红外感应,感知外界声音的变化传送给主控单片机,做出相应的反应。检测到时晚上时最左边一颗灯,当感应到有动的物体时中间一颗灯亮,当检测到声音时最右边一颗灯亮。


关于STC11F04?

u=4278887166,3494766480&fm=27&gp=0

STC11系列单片机是STC生产的单时钟/机器周期的单片机,高速、低功耗、超强抗干扰。内部集成高可靠复位电路,针对高速通信、智能控制、强干扰场合。增加了独立波特率发生器,省去了定时器2。工作电压范围:3.7V/4.1V~5.5V,工作频率范围0~35MHz,片上集成1280字节或者256字节RAM,工作温度-40~+85℃(工业级)/0~75℃(商业级)。


实现过程?

1.刻板焊接

微信图片_20180104171846

2.组装测试

微信图片_20180104171750

3.实物展示

微信图片_20180104171811

困难:在灯延时亮的过程中,接收到信号,要让它从接受到信号这个时刻为起点 重新延时下去灯不灭,例:在一个小时里它一直检测到有人,那么它会亮一个小时,中途一直不灭。


软件部分?

声控:高电平有信号,低电平无信号 ,红外:高电平有信号,低电平无信号,光控:高电平白天,低电平夜晚,LED低电平亮,高电平灭。


/**************************************/
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char

sbit GPIO_Day_Night = P1^3;        //光感接口
sbit GPIO_Sound = P1^4;//声控接口
sbit GPIO_Infra = P1^5;        //红外接口
sbit GPIO_jdq = P3^5;        //电灯接口 低电平点亮
sbit GPIO_KDelaytime = P3^7;        //改变光亮时长
sbit GPIO_LED1=P1^2;                    //延时显示LED1
sbit GPIO_LED2=P1^1;                    //延时显示LED2
sbit GPIO_LED3=P1^0;                        //延时显示LED3

uchar Key_time;       //按键次数
uint Delay_LED_time;//中断里为延时服务的自增亮
uint Temp_DelayLed;//灯亮延时时长计数函数
bit flag_day_night;//日、夜标志位

void Timer_Init();//初始化函数
void Delay12_Ms(uint ms);//12MHZ晶振精确延时1ms
void Light_delay_time();    //按键设置延时
void LED_Display();//感应LED亮

void main()
{
Timer_Init();//中断定时器初始化
while(1){ 
Light_delay_time();  //按键设置
if(GPIO_Day_Night==0){//if光敏-无光-晚-传感器检测,
flag_day_night = 1;       //1:晚上   0:白天
GPIO_LED1=0;
}
else{
flag_day_night = 0;
GPIO_LED1=1;
}
if(Delay_LED_time!=Temp_DelayLed&&flag_day_night==0)  //
 flag_day_night = 1;
  if(flag_day_night==1){ 
if(GPIO_Infra==1||GPIO_Sound==0){//光、人体红外-有信号     
     switch(Key_time)
{
case 1: if(GPIO_Infra==1) Temp_DelayLed=65;  //延时时长   //延时时长LED显示 10s
elseTemp_DelayLed=92;
break;      
case 2:if(GPIO_Infra==1) Temp_DelayLed=249;   // 30s
else    Temp_DelayLed=276;
break;
case 3:if(GPIO_Infra==1)  Temp_DelayLed=525;  //1min
else Temp_DelayLed=552;
break;
default: Temp_DelayLed=92;
break; 
}
Delay_LED_time=0;
}
}
else{//光敏-有光-白天
Delay_LED_time=Temp_DelayLed;
}

LED_Display();   
}
}
/*********************************************/
void TimerT0()interrupt 1{ //定时器T0-------灯亮时长延时
if(Delay_LED_time!=Temp_DelayLed){
Delay_LED_time++;
GPIO_jdq=0;
}
else
GPIO_jdq=1;//灯不亮
TH0= (65536-50000)/256;
TL0= (65536-50000)%256;
}
/*********************************************/
void Timer_Init(){//中断初始化
 
GPIO_jdq = 1;//初始化继电器关闭
GPIO_KDelaytime=1;//初始化按键延时灯亮时长
Key_time=1;
Temp_DelayLed=92 ;//灯亮延时时长计数函数   92=10s  红外要减27---5秒
Delay_LED_time=Temp_DelayLed;

GPIO_LED1=GPIO_LED2=GPIO_LED3=0;
Delay12_Ms(2000);
GPIO_LED1=GPIO_LED2=GPIO_LED3=1;

EA=1;
TMOD = 0x01;
TH0= (65536-50000)/256;
TL0= (65536-50000)%256;
   ET0=1;
TR0=1;
}
/*********************************************/
void Light_delay_time(){ //按键设置
if(GPIO_KDelaytime==0) {
Delay12_Ms(10);   
if(GPIO_KDelaytime==0)Key_time++;
if(Key_time>3) Key_time = 1;
while(GPIO_KDelaytime==0)
{
   switch(Key_time)
  {
case 1: GPIO_LED3=1;GPIO_LED2=1;GPIO_LED1=0;  //延时时长LED显示 10s
break;
case 2:GPIO_LED3=1;GPIO_LED2=0;GPIO_LED1=0;// 30s
break;
case 3:GPIO_LED3=0;GPIO_LED2=0;GPIO_LED1=0;//1min
break;
default: GPIO_LED3=1;GPIO_LED2=1;GPIO_LED1=0;
break;
}
}
GPIO_LED3=1;GPIO_LED2=1;GPIO_LED1=1;
}
}
void LED_Display(){//感应LED亮
if(GPIO_Infra==1||GPIO_Sound==0){
if(GPIO_Infra==1)
GPIO_LED2=0;
if(GPIO_Sound==0)
GPIO_LED3=0;
Delay12_Ms(10);
GPIO_LED2=1;
GPIO_LED3=1;

}
}
/***************************************/
//12晶振延时1ms
/***************************************/
void Delay12_Ms(uint ms){ //12M晶振精确1ms
uint i;
uchar j;
for(i=0;i<ms;i++)
for(j=0;j<247;j++)
{
_nop_();
}
}


其他资料?

基于STC11F04的可按键调整灯亮延时的智能小夜灯设计资料可在附件中下载,包括原理图、PCB、数据手册。


您尚未登录, 登入  或  注册  后可查看全部