适合各种没有休眠功能的焊台,输出用继电器控制,原理是在烙铁手柄内装滚珠开关,烙铁长时间不动关闭电源。代码如下
#include "STC15F104E.H" //单片机头文件
#define uint unsigned int //宏定义无符号整型数据
#define uchar unsigned char //宏定义无符号字符型数据
sbit jy=P3^4; //烙铁继电器
sbit zd=P3^2; //震动开关
uint xs,xms,cs; //中断计时变量
bit ZT=0,dj=0,zd_sign=0;
void Timer0Init();
void jc()//次数检测
{
static uint count=0;
if (zd==1&&zd_sign==0)
{
count++;
if(count>=10000)
{
count=0;
if(zd==1)
zd_sign=1;
}
}
if(zd==0&&zd_sign==1)
{
zd_sign=0;
cs++;xs=0;//cs是动作次数
}
if(cs>=5&&xs==60) //一分钟内动作超过5次
{ cs=0;ZT=0;xs=0;}//次数归零重新计数
if(cs<=4&&xs==60) //一分钟内动作低于4次
{ZT=1;cs=0;}
if(ZT==1&&xs==400)//400秒无动作
{jy=0;cs=0;}//关闭电源
if(jy==0&&cs>=2)//拿起手柄
jy=1;//恢复供电
}
void Timer0Init(void) //1毫秒@11.0592MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xCD; //设置定时初始值
TH0 = 0xD4; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}
/***************主程序****************/
void main()
{ Timer0Init();
//定时器初始化
EA=1; //开总中断
ET0=1;
cs=0;
xms=0;
xs=0;
jy=1;
P3M1=0x00;
P3M0=0x30;
while(1)
{
jc();
}
}
void timer0() interrupt 1
{
xms++; //中断变量Cnt50ms自+1
if(xms>=1000) //1秒
{
xms=0; //中断变量Cnt50ms清0
xs++; //计数清0
}
}
|