毕业设计(论文)-基于AT89C51单片机的步进电机控制系统 下载本文

void stepdec(void) { }

/*******************停止判断函数,判断步数是否为0*******************/

56

if(dispbuf[0]==0) { } else

dispbuf[0]=dispbuf[0]-1; display();

if((dispbuf[1]!=0)|(dispbuf[2]!=0)|(dispbuf[3]!=0))

{ }

dispbuf[0]=9; if(dispbuf[1]==0)

{ } else

dispbuf[1]=dispbuf[1]-1;

if((dispbuf[2]!=0)|(dispbuf[3]!=0))

{ }

dispbuf[1]=9; if(dispbuf[2]==0) { } else

dispbuf[2]=dispbuf[2]-1; if(dispbuf[3]!=0)

dispbuf[2]=9; if(dispbuf[3]!=0)

dispbuf[3]=dispbuf[3]-1;

void stop(void) { }

if(dispbuf[3]==0)

//判断千位是否为0 //判断百位是否为0 //判断十位是否为0 //判断个位是否为0 //定时器T0停止计数

if(dispbuf[2]==0)

if(dispbuf[1]==0)

{

TR0=0; state=0;

if(dispbuf[0]==0)

//停止标志位

//停止后允许输入步数

keycount=0;

}

/****************************主函数********************************/ void main(void) {

init(); while(1) {

if(state==1) {

TR0=1; led4=1; led3=0;

//启动定时器T0 //亮启动指示灯 //灭停止指示灯

57

//调用初始化函数

keyscan();

if(rest==1)

init();

//判断是否启动

//判断是否复位

//调用键盘扫描函数

}

}

} else {

TR0=0; led3=1; led4=0;

//定时器T0停止计数 //亮停止指示灯 //灭启动指示灯

}

/***********************定时器T0启动中断函数**********************/ void t0(void) interrupt 1 { }

58

speedtemp=speedflag-25; TH0=speed[speedtemp]/ 256; TL0=speed[speedtemp]% 256; count1++; clk=~clk; count++; if(count==2)

{ }

count=0; stepdec(); stop();

//调用步数减一函数 //调用停止判断函数 //调用调速函数

//一个周期走一步

changespeed();

附录B 20BY步进电机转速与定时器定时常数关系表

59