偶然看到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
模块 热释电 微波感应
单片机源程序如下:
- #include<stc15.h> //stc15单片机的头文件
- #include<intrins.h>
- unsigned char dengdai; //定义函数集
- sbit hongwai=P3^1; //位定义
- sbit fengming=P1^1; //位定义
- void csh(void) //中断初始化函数
- {
- P0M0 = 0x00;
- P0M1 = 0x00;
- P1M0 = 0x00;
- P1M1 = 0x00;
- P2M0 = 0x00;
- P2M1 = 0x00;
- P3M0 = 0x00;
- P3M1 = 0x00;
- P4M0 = 0x00;
- P4M1 = 0x00;
- P5M0 = 0x00;
- P5M1 = 0x00;
- P6M0 = 0x00;
- P6M1 = 0x00;
- P7M0 = 0x00;
- P7M1 = 0x00;
- //
- IT1 = 1; //设置INT1的中断类型 (1:仅下降沿 0:上升沿和下降沿)
- EX1 = 1;
- // //设置INT0的中断类型 (1:仅下降沿 0:上升沿和下降沿)
- IT0=1;
- EX0=1;
-
- EA=1;
- }
- void delay(unsigned int amt) //@12.000MHz 1000ms 一秒钟的延时
- { unsigned int w;
- unsigned char i, j, k;
- for(w=amt;w>0;w--)
- {
- _nop_();
- _nop_();
- i = 46;
- j = 153;
- k = 245;
- do
- {
- do
- {
- while (--k);
- } while (--j);
- } while (--i);
- }
- }
- void main()
- {
- csh(); //初始化外中断
- dengdai=0; //微波的话就保留,红外就把这句去掉
- delay(60); //微波的话就保留,红外就把这句去掉 微波启动会有一分钟的三四次校准输出,那就屏蔽前一分钟的微波输出
- dengdai=1; //让外中断可以运行
- hongwai=1; //使引脚处于输入状态
- fengming=1; //使引脚处于输出关闭状态
- while(1)
- {
- if(hongwai==0&dengdai==1) //当模块发来一个低电平把电路下拉成低电平,同时处于非等待可以输出状态
- {
- delay(1); //防止报警误触发
- if(hongwai==0&dengdai==1) //确认被触发
- {
- fengming=0; //蜂鸣器输出
- delay(10);//报警持续时间
- fengming=1; //蜂鸣器输出
- }
- }
- }
-
- }
- void exint0() interrupt 0 //外中断函数
- {
- dengdai=0; //马上让模块触发不生效
- fengming=1; //马上关闭蜂鸣器
- delay(45); //等待45秒
- dengdai=1; //恢复模块生效
- }
- void exint1() interrupt 2
- {
- ;//这个外中断功能你自己想干啥干啥,给你预留好了
-
- }
复制代码
所有资料51hei提供下载:
红外报警.zip
(2.56 MB, 下载次数: 16)
|