运行状态实时显示步进机速度。
------------------------------------------------*/ voidtestcar() { if(flag1==0) { if(d == 0) { flag = 1; //测试状态下,保证方向按键无效 if(a==0) reverse(); else forward(); } else { display(7,0); flag = 0; } } }
/*------------------------------------------------
键盘扫描程序。功能:f为设置键,g为加键,h为减键, 按下g键次数: 1:速度设置 2:步数设置 3:确认
按下g键对应数+1 按下h键对应数-1
------------------------------------------------*/ voidkeyscan() { if(f==0) { delay(5); if(f==0) { while(!f); snum++; flag1 = 1; if(snum==1) { write_com(0xc6); write_com(0x0f); }
}
}
if(snum==2) { write_com(0xc0+15); }
if(snum==3) { write_com(0x0c); snum=0; flag1 = 0; time = setnum+40; display(7,time); write_com(0x0c); if(stepnum!=0) steprun(); if(setnum!=0) setrun(); }
if(snum!=0) { if(g==0) { delay(5); if(g==0) { while(!g); if(snum==1) { setnum = setnum+10; if(setnum==99) setnum=0; display(0x40+4,setnum+40); write_com(0xc0+6); } if(snum==2) { stepnum++; if(stepnum==99) stepnum=0; display(0x40+13,stepnum); write_com(0xc0+15); }
} } if(h==0) { delay(5); if(h==0) { while(!h); if(snum==1) { setnum = setnum-10; if(setnum<0) setnum=99; display(0x40+4,setnum+40); write_com(0xc0+6); } if(snum==2) { stepnum--; if(stepnum<0) stepnum=99; display(0x40+13,stepnum); write_com(0xc0+15); } } } } }
/*------------------------------------------------ 初始化程序
------------------------------------------------*/ voidinit() { step = 0; time = 100; flag = 0; lcden = 0; snum=0; p=0; e=1; j=1; k=1;
m=1; write_com(0x38); //初始化1602液晶 write_com(0x0c); //开显示,光标不闪烁 write_com(0x06); //指针加一,整屏不移 write_com(0x01); //清屏 write_com(0x80); //初始化显示位置 TH0=(65536-100)/256; TL0=(65536-100)%6; TMOD=0x01; ET0=1; EX1=1; IT1=1; //外部中断触发方式设置为下降沿触发 EA=1; TR0=1; count1=5; }
/*------------------------------------------------ LCD1602初始显示程序
------------------------------------------------*/ void lcd1602() { for(num=0;num<14;num++) { write_dat(table5[num]); delay(5); } write_com(0xc0); for(num=0;num<16;num++) { write_dat(table6[num]); delay(5); } }
void main() { init(); lcd1602(); while(1) { run(); if(p==0)
{ keyscan(); testcar(); } receive(); } }
void timer0() interrupt 1 //定时器0 { TH0=(65536-100)/256; TL0=(65536-100)%6; t++; }
void rupt() interrupt 2 //外部中断1 { n=1; }