^_^ 程序......

[复制链接]
2392|3
 楼主| yanzi_z 发表于 2007-12-12 16:24 | 显示全部楼层 |阅读模式

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次),但实际上,只按下按钮开关一次就推出了循环。
各位大虾,能帮忙看看,分析分析么?
谢谢了!
 
 
hyh0lh 发表于 2007-12-12 18:00 | 显示全部楼层

RE

你的红灯在程序的哪个部分点亮?你的绿灯在程序的哪个部分点亮?注解清楚

你只所以按一次就出来是因为你没加判松开按键的程序,你按一次的时间里CONT1实际计数了10次。只要在“while(cont1);”加一个“while(!cont1);”就可以了。
mxinfa 发表于 2007-12-12 23:17 | 显示全部楼层
fsaok 发表于 2007-12-13 08:07 | 显示全部楼层

3楼正解

您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

6

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部