陌路绝途坚持自己的梦想,总有一天会成功!
获得 1 次赞
帮助过54人
哪位大神帮我看下代码啊 我是想做一个红外报警系统 蜂鸣器不响还有红灯不亮。。。 采用了一个人体热释传感器 连接在P1^0 功能描述:无人时:正常工作灯绿灯亮 连接的是P1^2 有人时:红灯闪烁 蜂鸣器报警 时间均为10s 10s报警结束后 关闭红灯 蜂鸣器 正常工作红灯亮 红灯连接的是P3^0 蜂鸣器是P3^1 #include #define uint unsigned int #define uchar unsigned char sbit hw = P1^0; //定义红外模块端 sbit LED_green = P1^2; //定义正常工作LED端 sbit LED_red = P3^0; //定义报警LED端 sbit beep = P3^1; //定义蜂鸣器端 sbit e = P3^2; //定义外部中断 void delay(uint zms) //延时函数 { uint i,j; for(i=zms;i>0;i--) for(j=110;j>0;j--); } void init() { //初始化函数 EA = 1; //打开总中断 EX0 = 0; //开外部中断0 IT0 = 1; //外部外部中断为边沿触发方式 LED_red = 1; //关闭报警红灯 beep = 0; //关闭蜂鸣器 } void alarm() //报警函数 { LED_green = 1; //开始报警使运行正常绿指示灯熄灭 while(1) { LED_red = 0; //红灯和声报警启动 delay(500ms); LED_red = 1; delay(500ms); beep = 1; } } void main() { init(); //初始化 P1 = 0xff; //P1口全部置1 P2 = 0x00; //P2口清零 TMOD = 0x01; //设置定时器0工作模式1 TH0 = (65536-50000)/256; //定时器装初值 TL0 = (65536-50000)%256; // 定时50ms EA = 1; //打开总中断 ET0 = 1; // 开定时器0中断 TR0 = 1; //启动定时器0 while(1) { LED_green = 0; //打开正常工作灯 } } void T0_time() interrupt 1 { uchar num = 0; TH0 = (65536-50000)/256; //定时器重装初值 TL0 = (65536-50000)%256; num++; //num每加1次判断一次是否到200次 if(200 == num) //如果到了200次,说明10S时间到 { num = 0; //把num清0 重新再计200次 } } void INT_0() interrupt 0 { EX0=0; //外部中断0服务程序开始,屏蔽外部中断 if(0 == hw) //监测输入信号,是否有输入信号 { delay(10ms); //延时消抖 if(0 == hw) //再次监测输入信号,若有输入信号转入报警子程序 { alarm(); //报警程序 if(1 == TF0) { TF0 = 0; //清除定时器0溢出中断 LED_red = 1; //关闭报警红灯显示 beep = 0; //关闭报警蜂鸣器 LED_green = 0; //使报警结束,正常工作指示绿灯亮 EX0 = 1; //报警结束 开启外部中断 } } } }