标题:
单片机控制步进电机转动设置的圈数
[打印本页]
作者:
wy1996
时间:
2018-6-19 11:04
标题:
单片机控制步进电机转动设置的圈数
单片机代码
#include<reg51.h>
#include<intrins.h>
#include<stepmotrolcd1602.c>
#define uchar unsigned char
#define uint unsigned int
#define delayNOP();{_nop_();_nop_();_nop_();};
unsigned char last_val[4]={1,1,1,1},cur_val[4]={1,1,1,1};
unsigned char code FFW[8]={0x02,0x06,0x04,0x0c,0x08,0x09,0x01,0x03}; //正转
unsigned char code REV[8]={0x01,0x09,0x08,0x0c,0x04,0x06,0x02,0x03}; //反转
sbit K1=P3^0; //运行与停止
sbit K2=P3^1; //设定圈数
sbit K3=P3^2; //方向转换
sbit K4=P3^3; //速率调整
sbit L1=P3^5; //正转指示
sbit L2=P3^6; //反转指示
sbit L3=P3^7; //停转指示
sbit LCD_RS=P2^0;
sbit LCD_RW=P2^1;
sbit LCD_EN=P2^2;
bit on_off=0; //运行与停止标志
bit direction=1; //方向标志
bit rate_dr=1; //速率标志
bit snum_dr=1; //圈数标志
uchar number=0,number1=1;
uchar snum=1,snum1=1; //预设定标志
uchar rate=1; //预设定速率
uchar data_temp,data_temp0,rate1,rate1,rateh;
uchar data_temp2[2]={'0','0'};
void keyscan();
void delay1();
/************主程序************
void main(void)
{
TMOD=0X01;
rate1=0xb1;
rateh=0xe0;
EA=1;
ET0=1;
P1=0X03;
L1=1;
L2=1;
L3=1;
LcdRw=0;
welcome();
GotoXY(12,0);
Print(">>");
while(1)
{GotoXY(0,1);
Print("num: ");
GotoXY(5,1);
Print(data_conv(snum));
GotoXY(8,1);
Print("rate: ");
GotoXY(14,1);
Print(data_conv(rate));
keyscan();
if(number1==snum1)
{ number1=0;
on_off=0;
TR0=0;
TL0=rate1;
TH0=rateh;
snum=snum1;
P1=0X00;
GotoXY(0,0);
Print("Stop! ");
L1=1;
L2=1;
L3=1;
}
}
}
/**********延时10ms程序***************/
void delay1()
{
unsigned char i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
/**********键盘扫描程序**************/
void keyscan() //独立按键扫描
{
last_val[0]=cur_val[0];
cur_val[0]=K1;
if((last_val[0]!=cur_val[0])&&cur_val[0]==0)
{delay1();
if((last_val[0]!=cur_val[0])&&cur_val[0]==0)
{on_off=~on_off;
{if(on_off)
{ GotoXY(0,0) ;
Print("Running! ");
TR0=0;
TL0=rate1;
TH0=rateh;
if(direction)
{ L1=0;
L2=1;
L3=1;}
}
else
{ GotoXY(0,0);
Print("Stop! ");
TR0=0;
TL0=rate1;
TH0=rateh;
L1=1;
L2=1;
L3=0;
}
}
}
}
last_val[1]=cur_val[1];
cur_val[1]=K2;
if((last_val[1]!=cur_val[1])&&cur_val[1]==0)
{delay1();
if((last_val[1]!=cur_val[1])&&cur_val[1]==0)
{if(snum_dr==1)
{snum++;
snum1=snum;
if(snum==0x14)
{snum_dr=~snum_dr;}
}else{
snum--;
snum1=snum;
if(snum==0x01)
{snum_dr=~snum_dr;}
}
}
}
last_val[2]=cur_val[2];
cur_val[2]=K3;
if((last_val[2]!=cur_val[2])&&cur_val[2]==0)
{delay1();
if((last_val[2]!=cur_val[2])&&cur_val[2]==0)
{direction=~direction;
if(direction)
{GotoXY(12,0);
Print(">>");
L1=0;
L2=1;
L3=1;}
else{GotoXY(12,0);
Print("<<");
L1=1;
L2=0;
L3=1;}
}
}
last_val[3]=cur_val[3];
cur_val[3]=K4;
if((last_val[3]!=cur_val[3])&&cur_val[3]==0)
delay1();
{if((last_val[3]!=cur_val[3])&&cur_val[3]==0)
{if(rate_dr==1)
{rate++;
if(snum==0x10)
{rate_dr=~rate_dr;}
}
else
{
rate--;
if(rate==0x01)
{rate_dr=~rate_dr;}
}
switch(rate)
{
case 1: rate1=0xb1;rateh=0xe0;break; //100hz
case 2: rate1=0xec;rateh=0x78;break; //200hz
case 3: rate1=0xf2;rateh=0xb2;break; //300hz
case 4: rate1=0xf6;rateh=0x3c;break; //400hz
case 5: rate1=0xf7;rateh=0xb6;break; //450hz
case 6: rate1=0xf8;rateh=0x30;break; //500hz
case 7: rate1=0xf8;rateh=0xe6;break; //550hz
case 8: rate1=0xf9;rateh=0x7d;break; //600hz
case 9: rate1=0xf9;rateh=0xfe;break; //650hz
case 10: rate1=0xfa;rateh=0x6d;break; //700hz
case 11: rate1=0xfa;rateh=0xcd;break; //750hz
case 12: rate1=0xfb;rateh=0x1e;break; //800hz
case 13: rate1=0xfb;rateh=0x68;break; //850hz
case 14: rate1=0xfb;rateh=0xa9;break; //900hz
case 15: rate1=0xfc;rateh=0x18;break; //1000hz
case 16: rate1=0xfc;rateh=0x73;break; //1100hz
}
}
}
}
/************定时器中断**************/
void motor_onoff() interrupt 1
{
number++;
TL0=rate1;
TH0=rateh;
if(number==64)
{snum--;
number=0;
number1++;
}
else {
if(direction==1)
{if(v<8)
{P1=FFW[v];
v++;}
if(v==8)
v=0;
}
else
{if(v<8)
{P1=REV[v];v++;}
if(v==8)
v=0;
}
}
}
复制代码
单片机代码.docx
2018-6-19 11:01 上传
点击文件名下载附件
下载积分: 黑币 -5
14.14 KB, 下载次数: 16, 下载积分: 黑币 -5
作者:
qiuge
时间:
2018-10-20 11:52
有接线图吗
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1