加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入

基于51单片机的红外报警器的设计与制作

10/15 11:20
1018
服务支持:
技术交流群

完成交易后在“购买成功”页面扫码入群,即可与技术大咖们分享疑惑和经验、收获成长和认同、领取优惠和红包等。

虚拟商品不可退

当前内容为数字版权作品,购买后不支持退换且无法转移使用。

加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
放大
实物图
相关方案
  • 方案介绍
  • 相关文件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

功能要求:

1.当检测时,数码管会倒计时60

2.当有人靠近时,会报警

3,当倒计时时,报警器会报警并且led灯会闪烁提示

原理图

ce93d091d3cb4f9aa05c66d959b2b10d.png

部分程序:

#include <STC15F2K60S2.H>

#define key1 P37

#define key2 P41

#define key3 P42

#define key4 P43

#define IR   P10

#define FMQ  P54

#define u8 unsigned char

#define u16 unsigned int

u8 table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};//数码管段码

u8 disbuf[]={0,0,0,0};//数码管显示缓冲区

u8 min=0;

void Timer0Init(void)               //1毫秒@11.0592MHz

{

AUXR |= 0x80;                 //定时器时钟1T模式

TMOD &= 0xF0;               //设置定时器模式

TL0 = 0xCD;              //设置定时初始值

TH0 = 0xD4;             //设置定时初始值

TF0 = 0;              //清除TF0标志

TR0 = 1;              //定时器0开始计时

ET0 = 1;      //定时器0打开

EA  = 1;      //定时器总开关

}

void timer0()interrupt 1

{

static u16 min_count=0,fmq_count=0,led_count=0,ir_flag=0;//静态局部变量 分计数、蜂鸣器间隔响计数、人体红外标志位

if(IR==1)ir_flag=1;//当检测到物体经过 标志位置1

if(ir_flag==1)     //当标志位为1 执行以下程序

{

if(++fmq_count==500)//每500毫秒响一次

{

fmq_count=0;

FMQ=!FMQ;

}

/*********流水灯**********/

led_count++;

if(led_count==100)P14=!P14;

if(led_count==200)P15=!P15;

if(led_count==300)P16=!P16;

if(led_count==400)P17=!P17;

if(led_count==401)led_count=0;

/*************************/

if(++min_count==100)//时间到结束报警 正常速度为1000 当前为100

{

min_count=0;

if(++min==60)

{

min=0;

ir_flag=0;

}

}

}

disbuf[2]=min/10;  //将值传入显示缓冲区

disbuf[3]=min%10;

if(ir_flag==0)

{

P14=1;

P15=1;

P16=1;

 

  • 有需要资料的可了解一下.docx

相关推荐

电子产业图谱