功能介绍:
0.本系统采用STC89C52作为单片机
1.模拟汽车灯光控制系统,支持双闪,转向灯光控制
2.上锁后,非法进入,灯光双闪,喇叭报警
3.采用HC-SR501模块为检测人体传感器,该模块使用非常简单,只需判断输出的高低电平即可
4.采用DC002作为电源接口可直接输入5V给整个系统供电
原理图:
PCB:
主程序:
#include "main.h"
bit refreshFlag = 1;
bit doubleFlashFlag = 0; //双闪标志
bit leftFlag = 0; //左转标志
bit rightFlag = 0; //右转标志
bit alarmSwitch = OFF; //报警开关
bit alarmFlag = 0; //报警标志
void main(void)
{
Timer0_Init();
while (1) //主循环
{
if (refreshFlag == 1) //100ms获取数据
{
refreshFlag = 0;
if (alarmSwitch == ON)
{
if (ALARM_PIN == 0) //非法进入检测
{
if (alarmFlag == 0)
{
alarmFlag = 1;
doubleFlashFlag = 1;
LED_LEFT = OFF;
LED_RIGHT = OFF;
}
}
else
{
if (alarmFlag == 1)
{
alarmFlag = 0;
doubleFlashFlag = 0;
LED_LEFT = OFF;
LED_RIGHT = OFF;
}
}
}
if (alarmFlag == 1)
{
BUZZER = ~BUZZER;
}
else
{
BUZZER = OFF;
}
if (LOCK_PIN == CLOSE) //车辆上锁
{
if (alarmSwitch == OFF)
{
alarmSwitch = ON;
}
}
else
{
if (alarmSwitch == ON)
{
alarmSwitch = OFF;
alarmFlag = 0;
doubleFlashFlag = 0;
LED_LEFT = OFF;
LED_RIGHT = OFF;
}
}
}
KeyProcess();
}
}
/*------------------------------------------------
定时器初始化子程序
------------------------------------------------*/
void Timer0_Init(void)
{
TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
TL0 = 0x00; //设置定时初值
TH0 = 0x4C; //设置定时初值 50ms
EA = 1; //总中断打开
ET0 = 1; //定时器中断打开
TR0 = 1; //定时器开关打开
}
/*------------------------------------------------
定时器中断子程序
------------------------------------------------*/
void Timer0_Interrupt(void) interrupt 1
{
static unsigned int time50ms = 0;
TL0 = 0x00; //设置定时初值
TH0 = 0x4C; //设置定时初值 50ms
time50ms++;
if (time50ms >= 10) // 0.5s
{
time50ms = 0;
refreshFlag = 1;
if (doubleFlashFlag == 1) //双闪
{
LED_LEFT = ~LED_LEFT;
LED_RIGHT = ~LED_RIGHT;
}
else if (leftFlag == 1) //左转灯
{
LED_LEFT = ~LED_LEFT;
LED_RIGHT = OFF;
}
else if (rightFlag == 1) //右转灯
{
LED_RIGHT = ~LED_RIGHT;
LED_LEFT = OFF;
}
else
{
LED_LEFT = OFF;
LED_RIGHT = OFF;
}
}
}