找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机计数代码问题困扰几天了

查看数: 1862 | 评论数: 8 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-9-2 21:20

正文摘要:

本人利用ad转换出两个不同电压,a电压和b电压。a是始终比b小的,现在我想,当a>b时,c加1,如果a一直大于b,c就会一直加,但是我不需要它一直加,只加了一开始a>b的一次。我现在代码是这样的。如果a>b是一瞬间 ...

回复

ID:573664 发表于 2019-9-3 12:07
感谢各位大佬的分享,已经解决了。感谢大家。
ID:573664 发表于 2019-9-3 12:05
cjm82 发表于 2019-9-2 23:13
设置一个标志变量
例如

兄弟,大哥谢谢,解决了
ID:606788 发表于 2019-9-3 12:01

加个标志位,a>b同时标志位为零条件满足时c+1,标志位置位1; 当a<=b时,标志位清零
ID:282850 发表于 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;
}
ID:373388 发表于 2019-9-3 10:03
加个标志位,a>b同时标志位为零条件满足时c+1,标志位置位1; 当a<=b时,标志位清零
ID:388197 发表于 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++
}
ID:462827 发表于 2019-9-2 22:40
加个标志变量就行了呀
ID:275826 发表于 2019-9-2 22:12
bit flag=0;
if((!flag)&&(a>b))
  {c++;
  flag=1;}
else flag=0;

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表