找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1209|回复: 15
打印 上一主题 下一主题
收起左侧

请教C语言if语句执行逻辑问题

  [复制链接]
跳转到指定楼层
楼主
ID:61140 发表于 2022-10-24 15:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机源程序如下:
void SpeakerDiDi2(void)
{                                             //以程序每循环一次的时间为延时,蜂鸣器鸣的时间长短可改变i变量的值来调整。
   u8 i;                                     //定义一个8位变量(这里如果单片机运行速度过快或晶振用的较大,可改为16位变量定义)
   Speaker=0;                           //这里蜂鸣器响(一定执行)
   if (i<200)     {i++;}               //如果i小于200,i++。                                                            else if (i=200)  {Speaker=1; i=0;}   //不然如果i=200,蜂鸣器关闭,变量清零。
}


想明白 if(i<200)  {i++;}这里的i++,是程序每扫完一遍加1,还是停在这里一直加到200才转去执行下一句。
我想实现的意思是,程序运行一遍i才加1,i=200就相当于程序运行了200次,使用程序循环变量次的时间做延时,又不太影响系统其它程序运行。
本人初学菜鸟,多谢各位大神。








分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:25310 发表于 2022-10-24 17:18 | 只看该作者
加一次就出去了,直到满足条件i>=200就不循环了。
回复

使用道具 举报

板凳
ID:624769 发表于 2022-10-24 17:32 | 只看该作者
你需要了解:
for(i=0;i<200;i++){;}  的另一种写法:  for(;i<200;){i++;}

已经了解:
if(i<200)  {i++;}

for(;i<200;){i++;}
的区别。
回复

使用道具 举报

地板
ID:61140 发表于 2022-10-24 18:55 | 只看该作者
pcbboy 发表于 2022-10-24 17:18
加一次就出去了,直到满足条件i>=200就不循环了。

感谢您的回复,意思就是说程序扫到这里只加1,然后顺序往下执行,下次程序再扫到这里再加1,一直加到200这里就不再循环了么(简单说就是程序跑了200次,这里才加够是么)
回复

使用道具 举报

5#
ID:1007932 发表于 2022-10-24 22:58 | 只看该作者
一步步来
void SpeakerDiDi2(void)
{
u16 i;  //整点报时延时
{
          Speaker=0;//一定执行
    if(i<200)  {i++;}//如果i<200则执行i++;
    Speaker=1;//一定执行
          if(i>0)    {i--;}//如果i>0则执行i--;
}
}
这个函数应该是有问题的,少了循环吧,不然中间的{}没必要,进一次函数就定义一次i,而且只要i在0<i<200,那i++又i--,执行完了i值不变,而且每次重复定义i,自动赋值为0的话,那每次只有i--不执行,是不是漏了代码?
回复

使用道具 举报

6#
ID:592807 发表于 2022-10-25 08:42 | 只看该作者
xiaoyuxinke 发表于 2022-10-24 18:55
感谢您的回复,意思就是说程序扫到这里只加1,然后顺序往下执行,下次程序再扫到这里再加1,一直加到200 ...

你的i是局部变量,每次进来都会被初始化一次。你可以百度关键字static或者全局变量和局部变量的区别
回复

使用道具 举报

7#
ID:592807 发表于 2022-10-25 08:43 | 只看该作者
188610329 发表于 2022-10-24 17:32
你需要了解:
for(i=0;i

他需要全局变量或者静态变量  
回复

使用道具 举报

8#
ID:64888 发表于 2022-10-25 09:17 来自手机 | 只看该作者
一事无成 发表于 2022-10-24 22:58
一步步来
void SpeakerDiDi2(void)
{

感觉函数实现意思应该和你想得到结果有出入吧。
回复

使用道具 举报

9#
ID:1034262 发表于 2022-10-25 11:28 | 只看该作者
每运行一次这条语句就+1.for或while循环才是循环加到满。
回复

使用道具 举报

10#
ID:25310 发表于 2022-10-25 13:47 | 只看该作者
xiaoyuxinke 发表于 2022-10-24 18:55
感谢您的回复,意思就是说程序扫到这里只加1,然后顺序往下执行,下次程序再扫到这里再加1,一直加到200 ...

真的看错了,你的源程序是一直加到200才退出, 以为你这个是for(;i<200;){i++;} ,其实你这个if(i<200)  {i++;} 就是简单的条件,小于200就一直加到200才退出。如果这是你的原意,因该要加个延时才有效果:if(i<200)  {i++;  delay();} .
回复

使用道具 举报

11#
ID:989145 发表于 2022-10-25 16:16 | 只看该作者
for语句是循环语句,if是条件选择语句,在这里只会执行一次就顺延往下执行了(也就是i加一次1之后),不会循环扫描。
回复

使用道具 举报

12#
ID:915005 发表于 2022-10-26 18:17 | 只看该作者
单步调试 用起来 你就能知道 程序是否按照你的意愿在走。。。

另外 提问题时 先把需求说清楚 然后再展示 自己的解决方案 这样人家才知道你的解决方案正确与否 说实在的 你的问题 我看起来 就是一头雾水 无法明白
回复

使用道具 举报

13#
ID:1049317 发表于 2022-10-26 18:42 | 只看该作者
加1后继续往下执行,不过由于大循环再次到if时会继续加1直到不满足小于200的条件
回复

使用道具 举报

14#
ID:875095 发表于 2022-10-26 21:58 | 只看该作者
i++ =( i = i + 1);
回复

使用道具 举报

15#
ID:61140 发表于 2022-10-27 08:39 | 只看该作者
2tafvw 发表于 2022-10-26 18:42
加1后继续往下执行,不过由于大循环再次到if时会继续加1直到不满足小于200的条件

感谢您的回复,我可不可以认为,其实这样的延时并不占用单片机多少时间,
回复

使用道具 举报

16#
ID:61140 发表于 2023-3-11 14:36 | 只看该作者
一事无成 发表于 2022-10-24 22:58
一步步来
void SpeakerDiDi2(void)
{

我是新手,不是漏了,是没写好,是这样的,您说的没错,感谢您的支持!代码重新写过。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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