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