附件包含:智能路灯的源代码、AD软件原理图、proteus仿真
用按键代替人体感应模块,按键按下代表热释电模块检测到人
LM393+电位器模拟光强,向左调代表光弱,向右调代表光强
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
电路原理图如下:
单片机源程序如下:
- #include<reg51.h>
- #include<intrins.h>
- #include<absacc.h> //头文件
- #define uc unsigned char
- #define ui unsigned int//宏定义
- sbit GM=P1^0; //光敏
- sbit RT=P1^5; //人体红外
- sbit KZ=P3^5; //继电器控制灯
- uc sec=0;
- void init()//初始化函数
- {
- GM=0;//光敏置低
- RT=0;//人体红外置低
- TMOD=0x01; //定时器工作方式
- TH0=0x3c;
- TL0=0xb0; //赋初值50ms
- ET0=1; //打开中断允许开关
- TR0=1; //打开定时器定时开关
- EA=1; //打开中断总开关
- }
- void main()//主函数
- {
- init();//初始化函数
- while(1);//空循环
- }
- void T0_time() interrupt 1 //定时器执行函数,热释电模块和光线感应和控制继电器都是在定时器里完成
- {
- uc m; //定义变量m
- TH0=0x3c;
- TL0=0xb0; //重新赋初值50ms
- m++; //m加一次是50ms
- if(m>=20) //加到20次,就是一秒
- {
- m=0; //m清零
- if(RT==0||GM==0) //当热释电和光敏有一个不符合条件(符合条件就是热释电检测到人,光敏检测到环境光线弱)
- sec++; //sec变量加
- if(RT==1&&GM==1&&sec<=5)//当热释电和光敏都符合条件并且sec变量小于等于5
- {
- sec=0; //sec清零
- KZ=0; //控制继电器打开
- }
- if((RT==0||GM==0)&&sec>5)//当热释电和光敏有一个不符合条件并且sec大于5时
- {
- sec=0; //sec清零
- KZ=1; //控制继电器关闭
- }
- }
- }
复制代码
Keil代码与Proteus仿真下载:
智能路灯.7z
(170.39 KB, 下载次数: 78)
|