|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区
您需要 登录 才可以下载或查看,没有账号?立即注册
×
#include<reg51.h>
#define YC 10 //闭合延迟时间
#define QDTIME 60 //工作时间
#define u8 unsigned char
#define u16 unsigned int
sbit K1a=P1^0; //开关引脚a
sbit K1b=P1^1; //开关引脚b
sbit OUT=P2^0; //输出引脚
u8 Tm=0; //状态检测,0位初始状态,1为延迟状态,2为输出状态,3为待复位状态
u16 i=0,j=0; //计时变量
void Tim_init() //定时器0初始化函数
{
TMOD = 0x01; //定时器0设置16位计时器
TH0 = 0x0FC; //高值1ms
TL0 = 0x18; //低值1ms
EA = 1; //开总中断
ET0 = 1; //开定时器中断
}
void Tim() interrupt 1//计时器中断
{
TH0 = 0x0FC; //重装初始值
TL0 = 0x18;
i++; //ms计时累加
}
void S1()
{
if(K1b==0&&Tm==0)//启动状态判断,必须是复位状态,且开关闭合。
{
TR0=1; //定时器开始工作
Tm=1; //进入状态1开始延迟
}
if(K1b==1&&Tm==3)//复位状态判断,条件必须打开开关,且一次任务完成。
{
Tm=0; //复位状态值
}
}
void main()
{
K1a=0; //开关一端低电平
OUT=0; //输出低电平,电机停止
Tim_init(); //定时器初始化
while(1) //主循环
{
S1(); //按键检测
if(i==1000)//1S计时
{
j++; //秒计时累加
i=0;
}
if(j>YC&&Tm==1) //如果检测到j大于10则进入输出状态
{
OUT=1; //进入输出状态
Tm=2; //设置输出状态为2,即输出状态
j=0; //秒计时清零
}
if(j>QDTIME&&Tm==2)//如果检测到j大于60则且在输出状态,则停止输出进入待复位状态
{
OUT=0; //停止输出
Tm=3; //进入待复位状态
j=0; //秒计时清零
i=0; //ms计时清零
TR0=0; //关闭计时器
}
}
}
|
|