void main(void) { uchar k_value; ...... ...... for(;;) { k_value = key_scan(); switch(k_value) { ...... ...... case 6: //选择QJ键 motor_qj(); break; ...... ...... } ...... ...... } ...... ...... } ...... ......
void motor_qj(void) { uint CONT=0; //CONT---记录光遮挡器的低脉冲个数 while(CONT<10) //10个脉冲为一组 { cz1=0; //光遮挡器输入,低有效 m2z=1; //电机控制,高有效 while(cont1); //cont1为0时,出现一个低脉冲 CONT++; } m2z=0; cz1=1; } 在调试中,我用一个红色LED和一个按钮开关代替光遮挡器,一个绿色LED串一个10K电阻代替电机,发现: 触发QJ键后,绿色LED比红色LED要晚亮3S左右;按下按钮开关,给一个低脉冲。按照本来的思路,应该是触发了QJ键后,记录10个低脉冲(即按钮开关按下10次),但实际上,只按下按钮开关一次就推出了循环。 各位大虾,能帮忙看看,分析分析么? 谢谢了! |