• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

自己DIY的红外报警系统 蜂鸣器不响还有红灯不亮。。。 求大神指导

陌路绝途 2014-06-24 浏览量:4087

哪位大神帮我看下代码啊  我是想做一个红外报警系统  蜂鸣器不响还有红灯不亮。。。


采用了一个人体热释传感器     连接在P1^0

 功能描述:无人时:正常工作灯绿灯亮  连接的是P1^2 

          有人时:红灯闪烁   蜂鸣器报警   时间均为10s   10s报警结束后 关闭红灯 蜂鸣器 正常工作红灯亮

          红灯连接的是P3^0   蜂鸣器是P3^1


自己DIY的红外报警系统 蜂鸣器不响还有红灯不亮。。。 求大神指导                 

#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;           //报警结束 开启外部中断
                           } 
                     }

               }
}

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 这种程序很简单啊,关键是你先把红外热释电传感器信号调试出来,这个网上有卖现成的模块,采用了信号调理,可以输出稳定的信号,你单买个传感器,需要自己搭建调制电路才行,不知道你图上画的电路工作正常么?

    这种传感器用好像是台湾一家芯片调制的,名称我忘记了,你可以看看,电路信号输出不正常的话,后面的就不好保证。

    这个是一个模块图:

    • 发布于 2014-06-24
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:7
  • 先一个个调试 然后看看那个有问题  
    • 发布于2014-06-24
    • 举报
    • 评论 0
    • 0
    • 0

  • 没有仔细读代码,给点个人建议


    蜂鸣器不响:

    1、撸主蜂鸣器类型对了吗?

    有源蜂鸣器高电平就能响,无源蜂鸣器要脉冲才能响哈

    2、三极管基极4.7K的电阻换个小点的试试,be结压降似乎不够


    LED_red不亮:

    硬件上有问题吗?建议仔细排查一下。



    另:

    中断函数10ms的延时,很少见啊

    一般中断只做简单处理,长时间的延时一般不会出现

    要不然很容易跑飞或者出现其他不可控的问题


    • 发布于2014-06-24
    • 举报
    • 评论 0
    • 0
    • 0

  • 蜂鸣器肯定没有问题 开始是一直响  后面改程序。。就不响了
    • 发布于2014-06-24
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个模块我也买了。。。只是一直进不了外部中断。。。。
    • 发布于2014-06-25
    • 举报
    • 评论 0
    • 0
    • 0

  • 不错,不知道楼主的问题解决了吗?
    • 发布于2014-06-26
    • 举报
    • 评论 0
    • 0
    • 0

  • 首先你硬件确认了有没有什么问题?确认硬件没问题后再查程序……

    • 发布于2014-06-26
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

自己DIY的红外报警系统 蜂鸣器不响还有红灯不亮。。。 求大神指导