求大神查错误
#include <reg52.h>
#include <string.h>
typedef unsigned int uint;
typedef unsigned char uchar;
sbit K2=P1^2;//接触开关二
sbit K3=P1^3;//接触开关三
sbit K7=P1^7;//按键开关一
sbit EN=P2^0;//步进电机开关
sbit CW=P2^1;//步进电机正反转
sbit CLK=P2^2;//脉冲输入端口
unsigned int motor_value;//转速
unsigned int step; //设定的步数
unsigned int step_count; //步数计数器
uint t;
void delay(uint i)
{
while(i--);
}
void TO_INIT() //T0初始化函数
{
TMOD = 0x01;//定时器0工作在16位方式
TL0 = (65536-5500)%256;
TH0 = (65536-5500)/256;
TR0 = 1;
ET0 = 1;
EA=1;
}
void t1() interrupt 1
{
TL0 = (65536-5500+(motor_value))%256;
TH0 = (65536-5500+(motor_value))/256;
CLK=~CLK; //产生时钟信号
step_count++;
if(step_count == 2*step)
{
TR0 = 0;
step_count = 0;
step = 0;
CLK = 0;
}
}
void StepMotor(unsigned char en,unsigned char dir,unsigned int freq,unsigned int StepNum)
{
if(en)EN=1;
else EN=0;
if(dir)CW=1;
else CW=0;
motor_value=freq;
step = StepNum;
}
void key()//按键检测
{
if(K7==0)
{
delay(1000);
if(K7==0)
{
StepMotor(0,0,5400,200);
}
while(!K7==1);
}
}
void main()
{
TO_INIT();
key();
for(t=0;t<100;t++)
{
delay(5000);
}
StepMotor(0,1,5400,400);
K3=0;
StepMotor(0,0,5400,300);
K2=0;
StepMotor(0,1,5400,200);
K3=0;
StepMotor(0,0,5400,160);
K2=0;
StepMotor(0,1,5400,120);
K3=0;
StepMotor(0,0,5400,100);
K2=0;
StepMotor(0,1,5400,80);
K2=0;
StepMotor(0,0,5400,40);
while(1);
}
![](http://imgsrc.baidu.com/forum/w%3D580/sign=2b8823a48082b9013dadc33b438ca97e/1a2acf5c103853431f868fa29913b07ecb8088ec.jpg)
![](http://imgsrc.baidu.com/forum/w%3D580/sign=c4527f14d333c895a67e9873e1127397/4463ff246b600c334c32d64b104c510fd8f9a1ee.jpg)
#include <reg52.h>
#include <string.h>
typedef unsigned int uint;
typedef unsigned char uchar;
sbit K2=P1^2;//接触开关二
sbit K3=P1^3;//接触开关三
sbit K7=P1^7;//按键开关一
sbit EN=P2^0;//步进电机开关
sbit CW=P2^1;//步进电机正反转
sbit CLK=P2^2;//脉冲输入端口
unsigned int motor_value;//转速
unsigned int step; //设定的步数
unsigned int step_count; //步数计数器
uint t;
void delay(uint i)
{
while(i--);
}
void TO_INIT() //T0初始化函数
{
TMOD = 0x01;//定时器0工作在16位方式
TL0 = (65536-5500)%256;
TH0 = (65536-5500)/256;
TR0 = 1;
ET0 = 1;
EA=1;
}
void t1() interrupt 1
{
TL0 = (65536-5500+(motor_value))%256;
TH0 = (65536-5500+(motor_value))/256;
CLK=~CLK; //产生时钟信号
step_count++;
if(step_count == 2*step)
{
TR0 = 0;
step_count = 0;
step = 0;
CLK = 0;
}
}
void StepMotor(unsigned char en,unsigned char dir,unsigned int freq,unsigned int StepNum)
{
if(en)EN=1;
else EN=0;
if(dir)CW=1;
else CW=0;
motor_value=freq;
step = StepNum;
}
void key()//按键检测
{
if(K7==0)
{
delay(1000);
if(K7==0)
{
StepMotor(0,0,5400,200);
}
while(!K7==1);
}
}
void main()
{
TO_INIT();
key();
for(t=0;t<100;t++)
{
delay(5000);
}
StepMotor(0,1,5400,400);
K3=0;
StepMotor(0,0,5400,300);
K2=0;
StepMotor(0,1,5400,200);
K3=0;
StepMotor(0,0,5400,160);
K2=0;
StepMotor(0,1,5400,120);
K3=0;
StepMotor(0,0,5400,100);
K2=0;
StepMotor(0,1,5400,80);
K2=0;
StepMotor(0,0,5400,40);
while(1);
}
![](http://imgsrc.baidu.com/forum/w%3D580/sign=2b8823a48082b9013dadc33b438ca97e/1a2acf5c103853431f868fa29913b07ecb8088ec.jpg)
![](http://imgsrc.baidu.com/forum/w%3D580/sign=c4527f14d333c895a67e9873e1127397/4463ff246b600c334c32d64b104c510fd8f9a1ee.jpg)