找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1894|回复: 0
打印 上一主题 下一主题
收起左侧

偶然看到马家有热释电模块,就做了一个单片机报警器 含PCB源程序

[复制链接]
跳转到指定楼层
楼主
偶然看到TB上有热释电模块,就想自己做一个报警器,或者走廊灯,可是纯模块的话输出时间啊,玩不出花样,不能按照自己的想法做出各种改变,那就用单片机来解决吧。压缩包里有原理图,bom,PCB还有keil文件,程序里具体说明都有。

Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)


按键    6*6*高度自选   
直插按键    PCB少打孔了   
电容    22uf    5*11规格
    10uf    5*11规格
三极管    9012    9013
单片机    15W201s   
DC接口    5.5*2.1规格   
电阻    10K   
稳压    5V   
蜂鸣器    12V   
模块    热释电    微波感应

单片机源程序如下:
  1. #include<stc15.h>         //stc15单片机的头文件
  2. #include<intrins.h>
  3. unsigned char dengdai;        //定义函数集

  4. sbit hongwai=P3^1;                 //位定义
  5. sbit fengming=P1^1;                 //位定义



  6. void csh(void)                   //中断初始化函数
  7. {
  8.    P0M0 = 0x00;
  9.     P0M1 = 0x00;
  10.     P1M0 = 0x00;
  11.     P1M1 = 0x00;
  12.     P2M0 = 0x00;
  13.     P2M1 = 0x00;
  14.     P3M0 = 0x00;
  15.     P3M1 = 0x00;
  16.     P4M0 = 0x00;
  17.     P4M1 = 0x00;
  18.     P5M0 = 0x00;
  19.     P5M1 = 0x00;
  20.     P6M0 = 0x00;
  21.     P6M1 = 0x00;
  22.     P7M0 = 0x00;
  23.     P7M1 = 0x00;
  24. //       
  25.     IT1 = 1;                    //设置INT1的中断类型 (1:仅下降沿 0:上升沿和下降沿)
  26.     EX1 = 1;
  27. //                   //设置INT0的中断类型 (1:仅下降沿 0:上升沿和下降沿)
  28.     IT0=1;       
  29.         EX0=1;
  30.        
  31.         EA=1;
  32. }
  33. void delay(unsigned int amt)                //@12.000MHz 1000ms          一秒钟的延时
  34. {         unsigned int w;         
  35.         unsigned char i, j, k;
  36.            for(w=amt;w>0;w--)
  37.         {
  38.            _nop_();
  39.               _nop_();
  40.            i = 46;
  41.            j = 153;
  42.            k = 245;
  43.            do
  44.            {
  45.                    do
  46.                       {
  47.                            while (--k);
  48.                    } while (--j);
  49.             }        while (--i);       
  50.         }
  51. }
  52. void main()
  53. {   
  54. csh();                 //初始化外中断
  55.     dengdai=0; //微波的话就保留,红外就把这句去掉
  56.         delay(60);        //微波的话就保留,红外就把这句去掉          微波启动会有一分钟的三四次校准输出,那就屏蔽前一分钟的微波输出
  57.   dengdai=1;          //让外中断可以运行
  58. hongwai=1;                        //使引脚处于输入状态
  59. fengming=1;            //使引脚处于输出关闭状态
  60.         while(1)
  61.         {
  62.            if(hongwai==0&dengdai==1) //当模块发来一个低电平把电路下拉成低电平,同时处于非等待可以输出状态
  63.            {
  64.                delay(1); //防止报警误触发
  65.                    if(hongwai==0&dengdai==1)        //确认被触发
  66.                    {
  67.                          fengming=0;         //蜂鸣器输出
  68.                                  delay(10);//报警持续时间
  69.                                  fengming=1;   //蜂鸣器输出
  70.                    }
  71.            }
  72.         }
  73.          
  74. }
  75. void exint0() interrupt 0   //外中断函数
  76. {
  77.             dengdai=0;          //马上让模块触发不生效
  78.          fengming=1;  //马上关闭蜂鸣器
  79.          delay(45);          //等待45秒
  80.          dengdai=1;          //恢复模块生效
  81. }
  82. void exint1() interrupt 2   
  83. {
  84.                     ;//这个外中断功能你自己想干啥干啥,给你预留好了
  85.    
  86. }
复制代码

所有资料51hei提供下载:
红外报警.zip (2.56 MB, 下载次数: 16)




评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表