STC单片机设计的磁保持继电器控制电路可以控制点动和自锁两种工作方式 也可控制电机
【声明】此程序仅用于学习与参考!
*********************************************************************/
#include<reg52.h> //库文件
#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int//宏定义无符号整型
#define ys 10//延时时间 20=1秒100=5秒 200=10秒
#define jt 10//接通时间
/********************************************************************
初始定义
*********************************************************************/
uchar sec; //定义计数值,每过1/10 秒,sec 加一
uchar keycnt=0;//按下次数值
uint tcnt; //键值判断 //键值判断
bit bz2=0;
/********************************************************************
I/O定义
*********************************************************************/
sbitOUT1=P3^2;//定义输出口为P3.2口 用以控制继电器
sbitOUT2=P3^3;//定义输出口为P3.3口 用以控制继电器
sbitIN1=P3^4; //定义输入口为P3.4口 用以输入信号
sbitIN2=P3^5; //定义输入口为P3.5口 拨码开关
ucharbz=0;
bit bz1=0;
bit fxkz=0;
uchar sj1=0;
uchar sj2=0;
/********************************************************************
延时函数
*********************************************************************/
void delay(uchar t)
{
uchar i,j;
for(i=0;i<t;i++)
{
for(j=13;j>0;j--);
{ ;
}
}
}
/********************************************************************
定时函数
*********************************************************************/
void initTimer(void)
{
TMOD=0x2;
TH0=0x1b;
TL0=0x1b;
}
/********************************************************************
定时中断服务函数
*********************************************************************/
void t0(void) interrupt 1 using 0 //定时中断服务函数
{
tcnt++; //每过250ust tcnt 加一
if(tcnt==390) //计满400 次(1秒)时
{
tcnt=0; //重新再计
if(bz==1){sj1++;if(sj1==10){OUT1=0;OUT2=0;bz=0;sj1=0;}}
// if(bz==2){sj2++;if(sj2==10){OUT1=1;OUT2=1;bz=0;sj1=0;}}
}
}
/********************************************************************
主函数
*********************************************************************/
void main()
{
initTimer();
TR0=1;
ET0=1;
EA=1;
OUT1=0;
OUT2=0;
while(1)
{
if(IN2==0)
{
if((IN1==0)&&(bz1==0)) {delay(20);if(IN1==0) {bz1=1;bz=1;tcnt=0;OUT1=0;OUT2=1;sj1=0; }}
if((IN1==1)&&(bz1==1)) {delay(20);if(IN1==1) {bz1=0;bz=1;tcnt=0;OUT1=1;OUT2=0;sj1=0; }}
}
else
{
if((IN1==0)&&(bz1==0)) {delay(20);if(IN1==0) {bz1=1;bz=1;tcnt=0;fxkz=!fxkz;;OUT2=fxkz;OUT1=!OUT2;sj1=0; }}
if((IN1==1)&&(bz1==1)) {delay(20);if(IN1==1) {bz1=0;}}
}
}
}
/********************************************************************
结束
*********************************************************************/
页:
[1]