标题: 单片机计数代码问题困扰几天了 [打印本页]

作者: 勿忘我c    时间: 2019-9-2 21:20
标题: 单片机计数代码问题困扰几天了
本人利用ad转换出两个不同电压,a电压和b电压。a是始终比b小的,现在我想,当a>b时,c加1,如果a一直大于b,c就会一直加,但是我不需要它一直加,只加了一开始a>b的一次。我现在代码是这样的。如果a>b是一瞬间的话,他就能实现加1功能,如果a>b时间比较久,我该怎么让它不会一直加。不知道代码该怎么写,这个问题困扰我几天了,求大家解答解答,谢谢了

1567430199(1).jpg (18.56 KB, 下载次数: 59)

1567430199(1).jpg

作者: tyrl800    时间: 2019-9-2 22:12
bit flag=0;
if((!flag)&&(a>b))
  {c++;
  flag=1;}
else flag=0;
作者: hantu    时间: 2019-9-2 22:40
加个标志变量就行了呀
作者: cjm82    时间: 2019-9-2 23:13
设置一个标志变量
例如

u8 flag = 0;              //0表示如果下次检测到a>b则c++, 1表示上一次检测到a>b,
if(a>b)
{
    if(flag = 0)
    {
        c++;
        flag = 1;      //c++后,将flag置1,用以防止下一次检测到a>b时 再次执行c++
    }
}else                 //如果a>b不成立,即a<=b
{
     flag = 0;       //将flag清0,以便下一次检测到a>b时执行c++
}
作者: xhaity    时间: 2019-9-3 10:03
加个标志位,a>b同时标志位为零条件满足时c+1,标志位置位1; 当a<=b时,标志位清零
作者: f556    时间: 2019-9-3 10:19
较简单的问题。楼上加flag的方法可行,如果不加标志,也可行。按楼主意思,发生a>b时,c加1,且只加一次,那就是C=1。
c=0;

//AD转换.....

if(a>b)
{
  c=1;
  LED2=!LED2;
  delayms(50);
}
else
{
  c=0;
}

作者: yupengwei    时间: 2019-9-3 12:01

加个标志位,a>b同时标志位为零条件满足时c+1,标志位置位1; 当a<=b时,标志位清零
作者: 勿忘我c    时间: 2019-9-3 12:05
cjm82 发表于 2019-9-2 23:13
设置一个标志变量
例如

兄弟,大哥谢谢,解决了
作者: 勿忘我c    时间: 2019-9-3 12:07
感谢各位大佬的分享,已经解决了。感谢大家。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1