大家好,我是华维,专注10年单片机实战/教学/辅导
一、红外探测器需要实现的主要功能:
- 红外报警检测
- 电池低压检测
- 防拆开关检测
- OOK无线发射
- 设备低功耗设计
二、搭建软件开发环境
本产品的主控芯片是STC15W204S。
1. Keil软件的安装
关于Keil C51的安装我在这里就不给大家介绍了,这块视频教程大家直接在小破站搜华维单片机编程,看单片机c语言编程视频教程第4节即可。
2.安装STC的库文件到Keil软件里
①打开STC-ISP软件
②选择Keil仿真设置-> 增加型号和头文件到Keil中,如下图。
③选择Keil C51的安装目录,点击确定
④安装完成
3. 项目工程新建:
双击Keil 软件图标,打开软件
选择Project ->new uvision Project…
选择工程文件夹,给工程命名,然后点击确定。
选择单片机对应的型号,如下图,点击OK
新建main.c 文件,并添加到工程中,在这里就给大家不介绍了。
三、软件设计
这里会对每个模块的代码进行详细讲解,整体源代码可以在公号华维单片机编程拿到。
1.红外报警检测
我们先看一下硬件接口:
- 逻辑分析:
1. 无线红外报警触发的逻辑,我们在硬件设计中,已经有讲过, 如果红外报警PIR_ALARM 脚会有一个下降沿信号。
2. PIR_ALARM 连接到单片机的P3.6,也是单片机的外部中断2功能脚。
3. 单片机平时需要进入休眠状态,所有红外报警需要使用外部中断唤醒功能。
- 我们先了解一下单片机的IO寄存器和外部中断2寄存器配置:
IO的寄存器介绍:
STC单片机的IO有3个寄存器。例如P3.6 包括P3, P3M0、P3M1。
其中P3M0、P3M1是用来配置单片机IO的模式的具体如下:
无线红外报警器的P3.6口,我们配置为准双向口即可。
P3 口和传统51单片机的功能是一样的,P3的输入输出端口。
外部中断2的寄存器介绍:
STC15W系列单片机的INT2只支持下降沿中断。详细的信息大家可以查阅STC15系列单片机的规格书。
外部中断2相关的寄存器INT_CLK0如下:
EX2= 1 打开外部中断2功能。
- 软件程序开发:
程序初始化:
sbit PIR_ALARM P3^6 ///定义红外报警的端口为P3.6
unsigned char alarm_state; ///初始化为2 =0表示防拆报警 =1 表达红外报警
///P3.6 配置成准双向IO口
P3M0 &= b10111111; //P3M0.6 = 0;
P3M1 &= b10111111; //P3M1.6 =0;
PIR_ALARM = 1; //准双向IO口是输入状态是,需要先把该端口置1
///初始化外部中断2
INT_CLKO |= 0x10; //(EX2 = 1)使能INT2中断
EA = 1; //打开总中断开关
报警状态变量初始化
alarm_state = 2;
外部中断2的中断服务函数
void exint2() interrupt 10 //INT2中断入口
{ //无线红外报警
alarm_state = 1;//
}
报警信号处理程序
if(ala