找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

C语言for(i=0;i<120;i++)---i是什么含义 为什么从120改成500 LED一直是常亮了

查看数: 3556 | 评论数: 22 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-11-3 14:58

正文摘要:

for(i=0;i<120;i++)---i是什么含义  为什么从120改成500  LED一直是常亮了

回复

ID:883242 发表于 2021-11-8 20:00
楼主不光是不懂不同类型都有多大范围,函数调用也完全理解错误。想把延迟增加3倍,把Delay里面的参数增加3倍就可以了,而不要去瞎改已经写好的Delay函数。
ID:313854 发表于 2021-11-8 18:53
i定义的uchar型,程序执行LED=~LED后,就一直在delay中,调不出来了
ID:979200 发表于 2021-11-8 17:39
unchar最大值255,要改为int类型,这是一个延时函数,参数要选对!
ID:965189 发表于 2021-11-7 21:56
我也曾经遇到过同样的问题,不能大于255。
ID:517951 发表于 2021-11-7 17:17
i 被定义为unchar, 变化范围在0-255, i<150 ,i增加到151后就退出循环了. i<500, i增加到255后就不能再增加了条件式一直满足,所以就是死循环. i 定义改为unsigned int ,就又能愉快的玩耍了.
ID:166475 发表于 2021-11-6 22:45
188610329 发表于 2021-11-3 16:54
因为,i++ 到255之后又变回0,所以, 你的  i 永远小于500,因此,for(i=0;i

写法属实有问题,如果这个delayms是一个延时固定毫秒级函数的话,调用处应该是改写传入参数(括号里的数值),而不是改这个for循环,如果多处调用delayms函数,按楼主的改法,到处都得改了,费时费力了,仅仅是测试的话,无所谓
ID:88256 发表于 2021-11-6 22:43
188610329 发表于 2021-11-6 22:34
说明你虽然上论坛求助, 也只是问问而以。 连答复都懒得看……

在5楼已经跟你说过为什么是120这个数字 ...

论坛很多提问的都是这样,有时候真的懒得回复。这个帖子很早就看到了,一直没有回复的兴趣。
ID:624769 发表于 2021-11-6 22:34
QWE4562012 发表于 2021-11-6 17:22
这个变量i用的<120,为什么是120这个数字?

说明你虽然上论坛求助, 也只是问问而以。 连答复都懒得看……

在5楼已经跟你说过为什么是120这个数字了,你居然还问……
ID:883242 发表于 2021-11-6 18:57
QWE4562012 发表于 2021-11-6 17:22
这个变量i用的<120,为什么是120这个数字?

你改成60跑一下就知道了。
ID:668004 发表于 2021-11-6 17:22
这个变量i用的<120,为什么是120这个数字?
ID:668004 发表于 2021-11-6 17:22
这个变量i用的<120,为什么是120这个数字?
ID:977357 发表于 2021-11-5 02:30
unsigned char最大数值255,改成500后会一直循环,将unsigned char改为unsigned int,就可以了,这是C语言里数据类型,建议看一下
ID:960619 发表于 2021-11-4 21:54
跟我一样,一开始看不懂拿程序来改数值看效果
ID:977940 发表于 2021-11-4 19:59
i的值为255最大,超过之后,数值无法确定
ID:908826 发表于 2021-11-4 19:03
你的那个定义的变量i是无符号字符型,赋给i的值超出这个这个变量的取值范围了。要在0~255之间进行选择
ID:668004 发表于 2021-11-4 17:04
谢谢网友热线支持  对C不会
ID:578842 发表于 2021-11-3 20:42
溢出了,改成unsigned int i 就行了。那个i意思就是让CPU在for循环里面转圈圈,i就是记了多少圈,超过了范围就出去了。依次来达到延时目的
ID:678280 发表于 2021-11-3 20:35
既然是仿真,那么在P1.0接示波器看看一个波形的时间是多少。
ID:624769 发表于 2021-11-3 16:54
因为,i++ 到255之后又变回0,所以, 你的  i 永远小于500,因此,for(i=0;i<500;i++) 可以近似的看成 while(1); 进了循环之后不会出来。程序就卡死在那里了。

最后,这个带参delayms 应该是计算过的,看上去是12T的单片机 配合前面的while 延时1ms 就需要 for 120 次。所以就算你要改也不应该改 i 这里,而应该改 Delayms() 括号里的数字才对。
ID:587810 发表于 2021-11-3 16:53
建议,学习一下各种类型得定义,以及范围
ID:57657 发表于 2021-11-3 16:43
unsigned char范围0~255
ID:546568 发表于 2021-11-3 16:40
因为你的i最大255

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

Powered by 单片机教程网

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