📄 main.c
字号:
#include <reg51.h>
#define STEP_COU 133
sbit CON_DIR = P1^5;
sbit CON_PUL = P1^6;
#define DIR_FOR 0
#define DIR_BACK 1
sbit B_F = P3^3;
sbit B_B = P3^4;
sbit B_STEP = P3^5;
sbit PLC_FOR = P1^4;
sbit PLC_BACK = P1^3;
sbit PLC_STEP = P1^2;
sbit WDI = P3^0;
unsigned char workMod;
#define MSG_NONE 0
#define MSG_FOR 1
#define MSG_BACK 2
#define MSG_STEP 3
#define WORK_NONE 0
#define WORK_FOR 1
#define WORK_BACK 2
#define WORK_STEP 3
void StepOne();
bit testFor()
{
unsigned char i;
for(i=0;i<2;i++)
{
if (PLC_FOR==0) return 0;
}
return 1;
}
bit testBack()
{
unsigned char i;
for(i=0;i<2;i++)
{
if (PLC_BACK==0) return 0;
}
return 1;
}
bit testStep()
{
unsigned char i;
for(i=0;i<100;i++)
{
if (PLC_STEP==0) return 0;
}
return 1;
}
void delay(unsigned long l)
{
while(l!=0)
{
WDI=!WDI;
l--;
}
}
unsigned char getMessage()
{
WDI=!WDI;
B_F=1;
B_B=1;
B_STEP=1;
if (B_F==0)
{
return MSG_FOR;
}
if (B_B==0)
{
return MSG_BACK;
}
if (B_STEP==0)
{
return MSG_STEP;
}
return MSG_NONE;
}
void main()
{
bit b_for,b_back,b_step;
workMod=WORK_NONE;
CON_DIR=DIR_BACK;
while(1)
{
b_for=testFor();
b_back=testBack();
b_step=testStep();
switch(getMessage())
{
case MSG_NONE:
break;
case MSG_FOR:
if(workMod!=WORK_FOR)
{
workMod=WORK_FOR;
CON_DIR=DIR_FOR;
}
else
{
workMod=WORK_NONE;
}
delay(10000);
break;
case MSG_BACK:
if(workMod!=WORK_BACK)
{
workMod=WORK_BACK;
CON_DIR=DIR_BACK;
}
else
{
workMod=WORK_NONE;
}
delay(10000);
break;
case MSG_STEP:
if(workMod==WORK_NONE)
{
workMod=WORK_STEP;
StepOne();
workMod=WORK_NONE;
}
break;
}
if (b_step==1)
{
StepOne();
}
if( (workMod==WORK_NONE) && (b_for==0) && (b_back==0) )
{
CON_PUL=1;
}
else
{
if(b_for==1)
{
CON_DIR=DIR_FOR;
}
else if(b_back==1)
{
CON_DIR=DIR_BACK;
}
CON_PUL=0;
delay(5);
CON_PUL=1;
delay(20);
}
}
}
void StepOne()
{
unsigned char i;
CON_DIR=DIR_FOR;
for(i=0;i<STEP_COU;i++)
{
WDI=!WDI;
CON_PUL=0;
delay(5);
CON_PUL=1;
delay(20);
}
delay(10000);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -