找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6678|回复: 13
收起左侧

这个程序的 for(y=z;y>0;y--) 怎么理解

  [复制链接]
ID:51587 发表于 2013-7-8 10:41 | 显示全部楼层 |阅读模式
(1):
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp;  
void delay(uint);   
void main()
{
temp=0xfe;
    P2=temp;
while(1)
{
   temp=_cror_(temp,1);
   delay(600);  
   P2=temp;
}      
void delay(uint z)
{
uint x,y;
for(x=100;x>0;x--)
   for(y=z;y>0;y--) ;
}         
这个程序的最后一句 for(y=z;y>0;y--) 怎么理解?感觉去掉也行啊。


(2)求大神帮我编一个扫描单独按键的程序。万分火急,请务必帮我解答,在下感激不尽。。。


回复

使用道具 举报

ID:51627 发表于 2013-7-9 12:49 | 显示全部楼层
不懂,sorry
回复

使用道具 举报

ID:7485 发表于 2013-7-9 16:54 | 显示全部楼层
本帖最后由 ahshmj 于 2013-7-9 17:22 编辑

这是一个延时程序,“Z”是个大于“0”的量,将z的值赋给Y。每循环一次,y-1,直到 Y=0,结束。例如:如果调用这个延时程序时,Z=10,就循环10次。你说的那一行如果去掉,程序也不会出错,但延时时间不对。

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:52115 发表于 2013-7-24 23:57 | 显示全部楼层
有了这个for语句就可以随意更改这个延迟的时间的大小了十分方便

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:52228 发表于 2013-7-25 16:08 | 显示全部楼层
这是一个廷时子程序呀,那个Z的数字越大,廷时的时间越长呀,如果Z超过65535,就用两个FOR,这样廷时的时间更长呀,此处主要是方便调节呀。

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:52066 发表于 2013-7-27 00:20 | 显示全部楼层
这是延迟问题,慢慢就会理解了

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:52334 发表于 2013-7-27 17:40 | 显示全部楼层
不能去掉,这是一个for循环的嵌套,这样说吧假设上半句for(x=100;x>0;x--)运行需要一秒,那么这里在delay(3)中的3就代表Z=3,也就是延时3秒,总之括弧中取几就是延时几秒了。

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:52901 发表于 2013-8-15 08:23 | 显示全部楼层
不能去掉的,,,这是个延时程序
回复

使用道具 举报

ID:76287 发表于 2015-4-10 09:12 | 显示全部楼层
虽然不懂,但还是要顶,毕竟每一位老手都是从新手蜕变而来的,赞一个。。。。。。
回复

使用道具 举报

ID:76471 发表于 2015-4-10 12:28 | 显示全部楼层
for(y=z;y>0;y--) ;在for(x=100;x>0;x--)后面,即for(y=z;y>0;y--) ;在x=100时,循环执行100次,Z为16位无符号变量,可以给600,可以给65535,延时时间=100*Y*(Y--所用时间),去掉后面的for语句,延时时间变短

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:76471 发表于 2015-4-10 12:32 | 显示全部楼层
上面说的时间也不是很准,还漏了判断语句Y>0占用的时间和第一个for语句所占用的时间,C语言算时间没有用汇编的方便

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:73156 发表于 2015-4-12 10:25 | 显示全部楼层
加多一个延长时间而已,可以删除,但是很多人还是留着

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:76800 发表于 2015-4-13 11:08 | 显示全部楼层
多加一个循环,增加延时,参数传递,方便修改延时。

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:76825 发表于 2015-4-13 17:09 | 显示全部楼层
void main()
{
temp=0xfe;
    P2=temp;
while(1)
{
   temp=_cror_(temp,1);
   delay(600);  //这个括号里是600,是你定义的数值,如果你想delay可以变化,可以改变600这个值,600=z   ,y=z,把这个代入到void delay(uint z) 这里就明白了
   P2=temp;
}      
void delay(uint z)
{
uint x,y;
for(x=100;x>0;x--)
   for(y=z;y>0;y--) ;
}         

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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