|
楼主 |
发表于 2019-12-31 16:14:41
|
显示全部楼层
请问这个程序哪里控制步进电机的速度,怎么改将其增加和减小
#include <reg52.h>
sbit KEY_IN_1=P1^0;
sbit KEY_IN_2=P1^1;
sbit KEY_IN_3=P1^2;
sbit KEY_IN_4=P1^3;
sbit LED3=P1^4;
sbit LED4=P1^5;
sbit LED5=P1^6;
signed long beats=0;
void delay(unsigned char i)
{
unsigned int j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void StartMotor(signed long angle)
{
EA=0;
beats=(angle*4076)/360;
EA=1;
}
void StopMotor()
{
EA=0;
beats=0;
EA=1;
}
void main()
{
int i=0;
static bit dirMotor=0;
EA=1;
TMOD=0x01;
TH0=0xFC;
TL0=0x67;
ET0=1;
TR0=1;
while(1){
if(KEY_IN_1==0){
delay(10);
if(KEY_IN_1==0){
if(i==10)
i=0;
else
i++;
if((i>=0)&&(i<=9))
{
if(dirMotor==0)
StartMotor(360*i);
else
StartMotor(-360*i);
}
}
}
if(KEY_IN_2==0){
delay(10);
if(KEY_IN_2==0){
if(i==10)
i=0;
else
i++;
if((i>=0)&&(i<=9))
{
if(dirMotor==1)
StartMotor(360*i);
else
StartMotor(-360*i);
} }}
if(KEY_IN_3==0){
delay(10);
if(KEY_IN_3==0){
StopMotor();}}
}}
void TurnMotor(){
unsigned char tmp;
static unsigned char index=0;
unsigned char code BeatCode[8]={0xE,0xC,0xD,0x9,0xB,0x3,0x7,0x6};
if(beats !=0)
{ if(beats>0)
{ index++;
index=index & 0x07;
beats--;
}
else
{
index--;
index=index & 0x07;
beats++;
}
tmp=P0;
tmp=tmp & 0xF0;
tmp=tmp |~BeatCode[index];
P0=tmp;}
else{
P0=P0 | 0x0F;}}
void IntreeuptTimer0() interrupt 1
{
static bit div=0;
TH0=0xFC;
TL0=0x67;
div=~div;
if(div==1){
TurnMotor();
}}
|
|