速度为0时路程还在跳,我一时看不出什么原因,也可能是干扰吧 .但我看你的程序存在问题,主程序循环一次可不是1S,但计算路程时要求1S内必须执行且只能执行一次S=S+V,估计你的程序会执行5次以上建议中断程序里只装初值并且变量加1void timer1()interrupt 3{ a++; TH1=0x4c;//11.0592MhzTL1=0;//11.0592Mhz }主程序里循环执行 while(1) {TR0=1;while(a<10);//等待500msTR0=0;a=0; 处理并显示(只要不大于500ms即可); while(a<10);//又一个500msa=0;}刚好一个循环是1S前半秒和后半秒脉冲个数可能会不一样,但总的来说,不会突变,按*2算速度和路程误差不大象TR0=1 a=0等语句执行时间很短,可以忽略不计数据处理并且送LCD显示不加延时的话就花几十ms,500ms 足够 1S更新一次,稍有点慢,也可让其1S内更新2-3次,原理是一样的