文章目录
- 一、功能简介
- 二、软件设计
- 三、实验现象
- 联系作者
一、功能简介
本项目使用STM32F103C8T6单片机控制器,使用按键、动态数码管、蜂鸣器、指示灯、热释电人体红外传感器等。
主要功能:
系统运行后,默认处于布防状态,D1指示灯亮,数码管显示初始时间6点0分,
报警次数0,格式:06-00 00,其中间隔1S中数码管上‘-'闪烁一次,代替秒钟运行,当人体红外传感器感应到有人时,蜂鸣器报警,当人离开时,且蜂鸣器报警关闭,同时数码管上报警次数显示数增加。若处于报警时,人还未离开,可通过K1或K2任意键关闭声光报警,若按下K1键依然处于布防状态,若按下K2键则处于撤防状态。处于撤防状态时,D1指示灯灭。传感器即使感应到有人也不会发生声光报警。
二、软件设计
/*
作者:嗨小易(QQ:3443792007)
*/
//布防/撤防控制
void defence_control(void)
{
u8 key=0;
static u8 cancel_alarm_flag=0;
key=KEY_Scan(0);
//无人时布防,且标志可用于屏蔽掉布防后,检测有人报警时,任意键取消报警
if(sys_ctrl.man_flag==0)
{
if(key==KEY1_PRESS)//布防
sys_ctrl.mode=0;
else if(key==KEY2_PRESS)//撤防
sys_ctrl.mode=1;
}
//布防监控
if(sys_ctrl.mode==0)
{
LED0=0;//布防指示灯亮
//有人接近,感应器感应到信号
if(sys_ctrl.man_flag==0)
{
if(IRDOUT_PIN==1)
{
delay_ms(100);//滤波,防止干扰物影响
if(IRDOUT_PIN==1)
{
sys_ctrl.man_flag=1;
}
}
}
else//检测到有人,LED闪烁,报警
{
if(cancel_alarm_flag==0)
{
BEEP_Alarm(100,100);
}
if(IRDOUT_PIN==0)//人离开
{
delay_ms(5);
if(IRDOUT_PIN==0)
{
sys_ctrl.man_flag=0;
sys_ctrl.alarm_cnt++;
if(sys_ctrl.alarm_cnt==100)sys_ctrl.alarm_cnt=0;
cancel_alarm_flag=0;
}
}
else//人未离开,可按任意键取消声光报警
{
if(key!=0)
{
cancel_alarm_flag=1;
if(key==KEY1_PRESS)//布防
sys_ctrl.mode=0;
else if(key==KEY2_PRESS)//撤防
{
sys_ctrl.mode=1;
sys_ctrl.alarm_cnt++;
if(sys_ctrl.alarm_cnt==100)sys_ctrl.alarm_cnt=0;
}
}
}
}
}
else//布防监控关闭
{
LED0=1;//布防指示灯灭
sys_ctrl.man_flag=0;
cancel_alarm_flag=0;
}
}
//应用控制系统
void app_sys_ctrl_demo(void)
{
LED_Init();
USART1_Init(115200);
KEY_Init();
BEEP_Init();
SMG_Init();
ctrl_pin_init();
TIM3_Init(20,36000-1); //定时10ms
TIM_Cmd(TIM3,ENABLE); //打开定时器
sys_ctrl.hour=6;
sys_ctrl.min=0;
while(1)
{
defence_control();//布防/撤防控制
show_time_alarm_cnt();//显示时间和报警次数
}
}
三、实验现象
B站演示视频:https://space.bilibili.com/444388619
联系作者
专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。