还剩2页未读,继续阅读
文本内容:
#includereg
51.h#defineucharunsignedchar#defineuintunsignedintucharidatatable1[]={0xf30xf90xfC0xf60xff};//正转ucharidatatable2[]={0xf30xf60xfc0xf90xff};//反转__itkey1=P0^7;//方向控制以direct为标志__itkey2=P0^6;//速度控制以mode为标志加速__itkey3=P0^5;//速度控制以mode为标志减速__itkey4=P0^4;//停止以stop为标志staticucharmode=1;//速度控制bitdirect=0;//方向控制bitstop=0;//停止标志bitflag=0;//中断标志ucharsn=200;//步数ucharidata*control_mode;//控制速度指针/**************************************************************//****************延时部分**************************************/voiddelay1ms{ucharij=8;whilej--{fori=0;i125;i++{;}}}/**************************************************************//****************__控制**************************************/voidmove{uchari;ifdirect{control_mode=table1;}else{control_mode=table2;}do{P1=control_mode[i];ifcontrol_mode[++i]==0xff{i=0;}whileflag;flag=1;}whilesn--;ifstop{TR1=0;}else{TR1=1;}}/**************************************************************//****************转速控制**************************************/voiddelayvoidinterrupt3using1{TH1=65536-mode*1000/256;TL1=65536-mode*1000%256;flag=0;}/**************************************************************//****************按键控制**************************************/voidscan_keyvoidinterrupt0using2{ifkey1==0{delay1ms;ifkey1==0{whilekey1==0;direct=~direct;}}ifkey2==0{delay1ms;ifkey2==0{whilekey2==0;mode=mode+1;ifmode==20{mode=0;}}}ifkey3==0{delay1ms;ifkey3==0{whilekey3==0;mode=mode-1;ifmode0{mode=20;}}}ifkey4==0{delay1ms;ifkey4==0{whilekey4==0;stop=~stop;}}}/**************************************************************//****************主函数****************************************/void__invoid{TMOD=0x10;TH1=65536-mode*100/256;TL1=65536-mode*100%256;TR1=1;PX0=1;EX0=1;ET1=1;EA=1;P1=0xff;while1{move;}}/**************************************************************/。