找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

  [复制链接]
跳转到指定楼层
楼主
for(i=0;i<120;i++)---i是什么含义  为什么从120改成500  LED一直是常亮了

LED proteus (1).png (46.08 KB, 下载次数: 72)

LED proteus (1).png

LED proteus (2).png (36.55 KB, 下载次数: 53)

LED proteus (2).png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:546568 发表于 2021-11-3 16:40 | 只看该作者
因为你的i最大255
回复

使用道具 举报

板凳
ID:57657 发表于 2021-11-3 16:43 | 只看该作者
unsigned char范围0~255
回复

使用道具 举报

地板
ID:587810 发表于 2021-11-3 16:53 | 只看该作者
建议,学习一下各种类型得定义,以及范围
回复

使用道具 举报

5#
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() 括号里的数字才对。
回复

使用道具 举报

6#
ID:678280 发表于 2021-11-3 20:35 | 只看该作者
既然是仿真,那么在P1.0接示波器看看一个波形的时间是多少。
回复

使用道具 举报

7#
ID:578842 发表于 2021-11-3 20:42 | 只看该作者
溢出了,改成unsigned int i 就行了。那个i意思就是让CPU在for循环里面转圈圈,i就是记了多少圈,超过了范围就出去了。依次来达到延时目的
回复

使用道具 举报

8#
ID:668004 发表于 2021-11-4 17:04 | 只看该作者
谢谢网友热线支持  对C不会
回复

使用道具 举报

9#
ID:908826 发表于 2021-11-4 19:03 | 只看该作者
你的那个定义的变量i是无符号字符型,赋给i的值超出这个这个变量的取值范围了。要在0~255之间进行选择
回复

使用道具 举报

10#
ID:977940 发表于 2021-11-4 19:59 | 只看该作者
i的值为255最大,超过之后,数值无法确定
回复

使用道具 举报

11#
ID:960619 发表于 2021-11-4 21:54 来自手机 | 只看该作者
跟我一样,一开始看不懂拿程序来改数值看效果
回复

使用道具 举报

12#
ID:977357 发表于 2021-11-5 02:30 来自手机 | 只看该作者
unsigned char最大数值255,改成500后会一直循环,将unsigned char改为unsigned int,就可以了,这是C语言里数据类型,建议看一下
回复

使用道具 举报

13#
ID:668004 发表于 2021-11-6 17:22 | 只看该作者
这个变量i用的<120,为什么是120这个数字?
回复

使用道具 举报

14#
ID:668004 发表于 2021-11-6 17:22 | 只看该作者
这个变量i用的<120,为什么是120这个数字?
回复

使用道具 举报

15#
ID:883242 发表于 2021-11-6 18:57 | 只看该作者
QWE4562012 发表于 2021-11-6 17:22
这个变量i用的<120,为什么是120这个数字?

你改成60跑一下就知道了。
回复

使用道具 举报

16#
ID:624769 发表于 2021-11-6 22:34 | 只看该作者
QWE4562012 发表于 2021-11-6 17:22
这个变量i用的<120,为什么是120这个数字?

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

在5楼已经跟你说过为什么是120这个数字了,你居然还问……
回复

使用道具 举报

17#
ID:88256 发表于 2021-11-6 22:43 | 只看该作者
188610329 发表于 2021-11-6 22:34
说明你虽然上论坛求助, 也只是问问而以。 连答复都懒得看……

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

论坛很多提问的都是这样,有时候真的懒得回复。这个帖子很早就看到了,一直没有回复的兴趣。
回复

使用道具 举报

18#
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函数,按楼主的改法,到处都得改了,费时费力了,仅仅是测试的话,无所谓
回复

使用道具 举报

19#
ID:517951 发表于 2021-11-7 17:17 | 只看该作者
i 被定义为unchar, 变化范围在0-255, i<150 ,i增加到151后就退出循环了. i<500, i增加到255后就不能再增加了条件式一直满足,所以就是死循环. i 定义改为unsigned int ,就又能愉快的玩耍了.
回复

使用道具 举报

20#
ID:965189 发表于 2021-11-7 21:56 | 只看该作者
我也曾经遇到过同样的问题,不能大于255。
回复

使用道具 举报

21#
ID:979200 发表于 2021-11-8 17:39 | 只看该作者
unchar最大值255,要改为int类型,这是一个延时函数,参数要选对!
回复

使用道具 举报

22#
ID:313854 发表于 2021-11-8 18:53 | 只看该作者
i定义的uchar型,程序执行LED=~LED后,就一直在delay中,调不出来了
回复

使用道具 举报

23#
ID:883242 发表于 2021-11-8 20:00 | 只看该作者
楼主不光是不懂不同类型都有多大范围,函数调用也完全理解错误。想把延迟增加3倍,把Delay里面的参数增加3倍就可以了,而不要去瞎改已经写好的Delay函数。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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