找回密码
 立即注册

QQ登录

只需一步,快速开始

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

怎么理解delay定义2个变量,用单片机LED闪烁程序举例来说

[复制链接]
跳转到指定楼层
楼主
ID:544869 发表于 2019-6-23 07:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚学习LED闪烁程序写法之一是:
单片机源程序如下:
#include<reg52.h>

sbit LED=P2^0 ;
void delay( unsigned int i)
{
while(i--);
}
void main()
{
  while(1)
  {
   delay(50000);
   LED=~LED;  
  }
}
~~~~~~~~~~~~~
无意中,看到一种写法是:
#include<reg52.h>

sbit LED=P2^0 ;
void delay( unsigned int t)
{
   unsigned int i;
   for(i=0;i<t;i++);
}
void main()
{
  while(1)
  {
   delay(50000);
   LED=~LED;  
  }
}
~~~~~~~~~~~~
对于后一种写法中
void delay( unsigned int t)
{
   unsigned int i;
   for(i=0;i<t;i++);
}
为啥用了2个变量,一直搞不懂。
希望网友指点一下,谢谢啦!!!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:552614 发表于 2019-6-23 09:51 | 只看该作者
应该是一样的,有的人习惯用while语句,有的人用for语句。
回复

使用道具 举报

板凳
ID:332444 发表于 2019-6-23 10:14 | 只看该作者
2个变量可以从语句看出是用于参与比较的,一个变量用于直接参与计算的。
回复

使用道具 举报

地板
ID:410942 发表于 2019-6-23 11:34 | 只看该作者
这个可以这样理解:后面的延时函数是一个带参数的函数..可以动态的调用,delay(10),delay(100)这样就会实现不同时间的延时,函数内面的t就是运算过程中的一个变量,用来对比运算,只要t<i就为真,就累加一次,这样就可以实现延时。
回复

使用道具 举报

5#
ID:207421 发表于 2019-6-23 15:50 | 只看该作者
虽然都是带参数的函数,但是while 和 for 的语法是不一样的,使用方法肯定不一样而已
void delay( unsigned int i)
{
    while(i--);
}
void delay( unsigned int t)
{
   unsigned int i;   
   for(i=0;i<t;i++);
}  //你要1个变量也行,你看下面
void delay()
{
   unsigned int i;   
   for(i=0;i<5000;i++);
}  // 修改后
回复

使用道具 举报

6#
ID:570488 发表于 2019-6-24 09:22 | 只看该作者
延时函数本身的作用就是通过循环的运算消耗时间,达到制造间隔的目的。
至于你提到的为什么用两个变量,那是for语句的一种格式~
while和for都是按需使用
但是for语句利用嵌套,可以达到倍数效果。也就是函数传入参数比较小,也可以取得多倍延时的效果~
回复

使用道具 举报

7#
ID:544869 发表于 2019-7-3 20:18 来自手机 | 只看该作者
非常感谢楼上各位师傅的指导,不一一回复了,谢谢热心的你们! 按你们的说法,我琢磨了好多天,已经基本弄懂了。 在看程序时,发现还有延时用3个变量,常用的如下: void delay(unsigned char i) {  unsigned char j,k; for(j=i; j>0; j- -) for(k=125; k=0; k- -) } 这个delay用了i, j, k三个变量,但是在main里,一个也没提到,这又怎么理解呢?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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