281433001 发表于 2019-7-26 17:01 这个没加break啊 |
| 建议直接去掉break, |
C51oo 发表于 2019-7-26 11:34 #include <reg52.h> #include <intrins.h> sbit KEY_UP=P1^3; sbit KEY_DW=P1^4; sbit DIR_UP=P3^2; sbit DIR_DW=P3^3; sbit CON_ECU=P3^4; void DelayUs2x(unsigned char t); void DelayMs(unsigned char t); void Delay_ms(unsigned char t); void main() { KEY_UP=1; KEY_DW=1; DIR_UP=0; DIR_DW=0; CON_ECU=1; while(1) { if(KEY_UP==0) { Delay_ms(5); if(KEY_UP==0) { CON_ECU=0; Delay_ms(10); DIR_UP=1; DelayMs(10); CON_ECU=1; Delay_ms(10); DIR_UP=0; DelayMs(190); DIR_DW=1; Delay_ms(10); DIR_DW=0; } } if(KEY_DW==0) { DelayMs(10); if(KEY_DW==0) { DIR_DW=1; Delay_ms(10); DIR_DW=0; DelayMs(190); DelayMs(190); DelayMs(190); DIR_UP=1; Delay_ms(10); DIR_UP=0; } } } } void DelayUs2x(unsigned char t) { while(--t); } void DelayMs(unsigned char t) { while(t--) { DelayUs2x(245); DelayUs2x(245); } } void Delay_ms(unsigned char t) { unsigned char i,j,k; for(k=0;k<t;k++) { _nop_(); i = 2; j = 199; do { while (--j); } while (--i); } } 看这个 我想改成触发一次电机就只转一次 如果这个信号一直维持也只转设定的那几十毫秒,再次触发同样,怎么搞啊 |
| 你这程序只列了一小部分吧。 都没看到循环体系啊。 if语句不是while语句,不会自己循环,执行完了继续往下走。 你得把整体一点的程序列出来,才好分析。 |
| break;是跳出循环,如果你的就一个大循环那么就直接跳出循环,把所有的程序都执行完了,自然就不会循环了啊,我猜你复位一下应该又可以按一下,然后遇到break;就又停下来了,返回语句不懂了,你可能把break;改成continue;建议程序不要这样写,用switch语句写会更好 |
yong761228 发表于 2019-7-25 19:53 那有什么办法解决没有 感觉自己对编程比较小白 |
| 我认为2的里面jiang=1; 可能调用到了别的程序了,别的程序继续满足了if(num==4)又循环了,这样就没有直接运行下面的break. |