|
是代码有问题还是电路有问题呀!!我基础比价薄弱!改了很久了实在没办法了才拿出来问大家 希望大家帮帮忙
#include<reg51.h>//单片机 C语言的头文件
#include<intrins.h>//包含 51 单片机的几条汇编
语句的 C 语言调用接口
#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;//定时器 0工作方式 1
TH0=0x3c;
TL0=0xb0;//赋初值 50ms
ET0=1;//打开定时中断 0允许开关
TR0=1;//打开定时器 0定时开关
EA=1;//打开中断 0总开关
}
void main()//主函数
{
init();//初始化函数
while(1);//空循环
}
void T0_time()interrupt 1 //定时器执行函数,
热释电模块和光线感应和控制继电器都是在定时器
里完成
{
uc m;//定义变量 m
TH0=0x3c;
TL0=0xb0;//重新赋初值 50 ms
m++;//m 加一次是 50 ms
if(m>=20)//加到 20次,就是一秒
{
m=0;//m 清零
if(RT==0||GM==0) //当热释电和光敏
有一个不符合条件(符合条件就是热释电检测到人,
光敏检测到环境光线弱)
{
sec++;//sec变量加
if(sec>10)//从亮灯到条件不符熄灯,中间延时
10秒钟
{
sec=0;//sec清零
KZ=1;//控制继电器关闭
}
}
if(RT==1&&GM==1)//当 热 释 电 和 光
敏都符合条件,则秒计时参数归零,开灯
{
sec=0;//sec清零
KZ=0;//控制继电器打开
}
}
}
|
|