说 明:
-
433M的D3连接到P10口,D1连接到P13口
-
继电器的IN口连接到P11口,将振动检测模块的DO连接到P12口。
-
当按下A时,振动检测模块开始工作,当按下C时,振动检测模块关闭
-
当振动检测模块开启的时候,检测到振动后,关闭继电器一秒钟(低电平时关闭)
main.c
#include <STC89C5xRC.H>
#include "intrins.h"
sbit A=P1^0;//433M的A按键
sbit C=P1^3;//433M的C按键
sbit switcher=P1^1;//继电器
sbit vibration=P1^2;//振动模块
sbit ledOne=P3^7;//led1
int workState=0;//工作模式标志位
int switcherTemp=0;//继电器标志位
int count_1;//中断0中定时器内技术标志
/**
*函数名称:workStateChoose
*函数功能:当按下A时,振动检测模块开始工作,当按下C时,振动检测模块关闭
*备 注:
*/
void workStateChoose()
{
if(A==1)
{
workState=1;
}
if(C==1)
{
workState=0;
}
if(workState==1)
{
ledOne=0;
}
else
{
ledOne=1;
}
}
/**
*函数名称:switcherWork
*函数功能:在振动检测模块工作时,当检测到振动时,打开继电器否则关闭继电器
*备 注:
*/
void switcherWork()
{
if(workState==1)
{
if(vibration==0)
{
switcherTemp=1;
}
}
if(workState==0)
{
switcherTemp=0;
}
}
/**
*函数名称:Timer0Init
*函数功能:中断函数,每5毫秒中断一次
*备 注:
*/
void Timer0Init(void) //5毫秒@11.0592MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x00; //设置定时初始值
TH0 = 0x28; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0=1;
EA=1;
}
/**
*函数名称:timer0Service
*函数功能:中断函数服务函数,当继电器打开后开始工作,当继电器开启一秒后自动关闭
*备 注:
*/
void timer0Service() interrupt 1
{
TL0 = 0x00; //设置定时初始值
TH0 = 0x28; //设置定时初始值
if(switcherTemp==1)
{
switcher=0;
count_1++;
if(count_1>=200)
{
count_1=0;
switcherTemp=0;
switcher=1;
}
}
else
{
switcher=1;
count_1=0;
}
}
/**
*函数名称:main
*函数功能:主函数
*备 注:
*/
void main()
{
Timer0Init();
while(1)
{
workStateChoose();
switcherWork();
}
}