红外报警c语言,基于51单片机的人体红外报警器程序设计
时间: 2023-08-21 16:05:08 浏览: 104
以下是基于51单片机的人体红外报警器程序设计:
```c
#include <reg51.h>
#include <intrins.h>
sbit IR = P3^2; // 定义红外接收器输入引脚
sbit BEEP = P1^5; // 定义蜂鸣器输出引脚
unsigned char count = 0;
void delay(unsigned int t) // 延时函数
{
unsigned int i, j;
for(i=0; i<t; i++)
{
for(j=0; j<110; j++);
}
}
void main()
{
IT0 = 1; // INT0 下降沿触发
EX0 = 1; // 允许 INT0 中断
EA = 1; // 允许总中断
while(1)
{
if(count >= 5) // 如果连续接收到5次红外信号则触发报警
{
BEEP = 1; // 开启蜂鸣器
delay(500); // 延时 500ms
BEEP = 0; // 关闭蜂鸣器
count = 0; // 计数器清零
}
}
}
void int0_isr() interrupt 0 // INT0 中断服务函数
{
unsigned int i;
delay(10); // 延时 10us
if(IR == 0) // 如果接收到红外信号
{
TR0 = 1; // 启动定时器0
while(!IR) // 等待红外信号结束
{
i++;
if(i > 1000) // 如果等待超时则退出
{
TR0 = 0; // 关闭定时器0
TF0 = 0; // 清除定时器0溢出标志
count = 0; // 计数器清零
return;
}
}
TR0 = 0; // 关闭定时器0
TF0 = 0; // 清除定时器0溢出标志
count++; // 计数器加一
}
}
```
该程序通过外部中断 INT0 接收红外信号,当接收到红外信号时启动定时器0计时,等待红外信号结束后关闭定时器0,并将计数器加一,如果连续接收到5次红外信号则触发报警。需要注意的是,程序中的延时函数需要根据实际情况进行调整。
阅读全文