📄 step heixian4.c
字号:
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
sbit STK_CP1=P1^3; //电机1
sbit STK_DIR1=P1^2;
sbit STK_CP2=P1^1; //电机2
sbit STK_DIR2=P1^0;
sbit p14=P1^4; //右转
sbit p15=P1^5; //左转
sbit p16=P1^6; //变速
sbit p32=P3^2;
uchar n=0; //shijian
uint m=0;
bit youzhuan=0,zuozhuan=0;
bit zanting=0;
uchar heixian=0; // 黑线数
uint T00,T11;
void time0() interrupt 1 //电机1
{ if(zanting==1)
{ m++;
if(m==400) //5000ms*400=2s
{ TR1=1;
zanting=0;
}
}
else
{ if(youzhuan==1)
{ TR0=0;
TH0=(64536-T00)>>8; TL0=(64536-T00)%256; //-1ms
TR0=1;
n++;
if(n==180)
{ n=0;
youzhuan=0;
}
}
else
{ TR0=0;
TH0=(65536-T00)>>8; TL0=(65536-T00)%256; //ms
TR0=1;
}
STK_CP1=~STK_CP1;
}
}
void time1() interrupt 3 //电机2
{ if(zuozhuan==1)
{ TR1=0;
TH1=(64536-T11)>>8; TL1=(64536-T11)%256; //-1ms
TR1=1;
n++;
if(n==180)
{ n=0;
zuozhuan=0;
}
}
else
{ TR1=0;
TH1=(65536-T11)>>8; TL1=(65536-T11)%256; //ms
TR1=1;
}
STK_CP2=~STK_CP2;
}
void int0() interrupt 0
{ if( (P1&0x70)!=0x30 ) //不能同时左右转
{ if(p16==0)
heixian++;
if(p14==0)
{ youzhuan=1; //右转
zuozhuan=0;
n=0;
}
if(p15==0)
{ youzhuan=0;
n=0;
zuozhuan=1; //左转
}
}
}
main()
{ EA=0;
TMOD=0x11;
T00=5000;
TH0=(65536-T00)>>8; TL0=(65536-T00)%256; //5ms //中速
TR0=1; ET0=1;
T11=5000;
TH1=(65536-T11)>>8; TL1=(65536-T11)%256; //5ms
TR1=1; ET1=1;
IT0=1; EX0=1;
EA=1;
STK_DIR1=0;
STK_DIR2=1;
while(1)
{ switch(heixian)
{ case 1: T00=6000;
T11=6000; break; //慢速//6ms
case 2: T00=4000;
T11=4000; break; //加速//4ms
case 3: T00=5000;
T11=5000; break; //爬坡//5ms
case 4: //zanting=1;
//TR1=0;
//zuozhuan=0; youzhuan=0; n=0;
break; //坡上暂停2S
case 5: T00=6000;
T11=6000; break; //到顶减速//6ms
case 6: //TR0=0; TR1=0;
break; //停
default:break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -