打印

^_^ 程序......

[复制链接]
1519|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

粉丝