找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 929|回复: 15
收起左侧

这单片机程序如果第二个for里面b>0改为>=0就无法正常实现LED的闪烁?

[复制链接]
ID:1052650 发表于 2022-11-18 15:37 来自手机 | 显示全部楼层 |阅读模式
新手菜鸟,大佬勿喷。
请问下面这串代码如果第二个for里面b>0改为>=0就无法正常实现LED的闪烁是什么原因?麻烦各位大佬给个提示。谢谢了
51hei.png
回复

使用道具 举报

ID:883242 发表于 2022-11-18 19:42 | 显示全部楼层
b是unsigned char,永远大于等于0,这似乎是小学数学问题。
回复

使用道具 举报

ID:1051394 发表于 2022-11-18 19:59 | 显示全部楼层
修改a和b的类型为整数就可以了
回复

使用道具 举报

ID:1052694 发表于 2022-11-18 20:07 | 显示全部楼层
unsigned char表示0~255,永远大于等于0
回复

使用道具 举报

ID:1044091 发表于 2022-11-18 20:22 | 显示全部楼层
unsigned char b,当最后一步b=0时,0=0,for条件一直为真,但b-1又不存在,所以进入死循环跳不出来了。
回复

使用道具 举报

ID:883242 发表于 2022-11-18 20:52 | 显示全部楼层
ningsy 发表于 2022-11-18 20:22
unsigned char b,当最后一步b=0时,0=0,for条件一直为真,但b-1又不存在,所以进入死循环跳不出来了。

谁告诉你b-1不存在?b-1=255这么简单的问题都不知道吗?
回复

使用道具 举报

ID:1052650 发表于 2022-11-18 20:56 | 显示全部楼层
好了,迷糊了我
回复

使用道具 举报

ID:824490 发表于 2022-11-19 14:07 | 显示全部楼层

别迷糊~~6楼道 出真相了:

不就是要数组逆向吗?
for(b=0;b<8;b++)
{
P2=~S[7-b];
delay();
}
这就逆向了。就这么简单的。
回复

使用道具 举报

ID:1052650 发表于 2022-11-20 00:51 来自手机 | 显示全部楼层
名字不是重点 发表于 2022-11-19 14:07
别迷糊~~6楼道 出真相了:

不就是要数组逆向吗?

感谢你
回复

使用道具 举报

ID:624769 发表于 2022-11-20 01:17 | 显示全部楼层
名字不是重点 发表于 2022-11-19 14:07
别迷糊~~6楼道 出真相了:

不就是要数组逆向吗?

晕啊…… 有必要绕路走么?

  1. for(b=8;b>0;)
  2. {
  3. b--;
  4. P2=~S[b];
  5. delay();
  6. }
复制代码

不就好了? 何必一头 做加法 一头还要 再去减?
回复

使用道具 举报

ID:227393 发表于 2022-11-20 01:43 来自手机 | 显示全部楼层
因为unsignrd char 包括0-255,所以等于0是肯定成立的,所以永远不会结束for循环,也就是变成死循环了!
回复

使用道具 举报

ID:883242 发表于 2022-11-20 03:04 | 显示全部楼层
本帖最后由 Hephaestus 于 2022-11-20 18:19 编辑
188610329 发表于 2022-11-20 01:17
晕啊…… 有必要绕路走么?

for(b=8;b>0;)

这个论坛真奇怪,10楼偷偷改了自己的帖子居然没有显示编辑时间。
回复

使用道具 举报

ID:624769 发表于 2022-11-20 16:19 | 显示全部楼层
Hephaestus 发表于 2022-11-20 03:04
敲黑板!
你的代码缺[]

这东西你敲黑板没用, 要去敲管理员,

为什么  你[]  里缺个 b 可以发出来.
为什么人家  [7-b]  也可以发出来.
唯独 []  里面只放一个字母 不管是 i 或者 b 都发不出来?

你要是真的在用心逛论坛,就会见怪不怪,或者,就算要敲也不是敲黑板了。
回复

使用道具 举报

ID:77589 发表于 2022-11-21 10:03 | 显示全部楼层
你b的类型是unsigned char,如果结束条件是b>=0,在b==0时条件成立,当b再减1时,告诉你此时b就变成了255了,b>=0这个条件还是成立,但是此时再继续操作,数组就已经越界了,这是一个致命的错误!!!!
回复

使用道具 举报

ID:77589 发表于 2022-11-21 10:06 | 显示全部楼层
sgq657785 发表于 2022-11-20 01:43
因为unsignrd char 包括0-255,所以等于0是肯定成立的,所以永远不会结束for循环,也就是变成死循环了!

如果是死循环,LED还是要闪烁啊!
所以不是死循环,是出现了数组越界的致使错误!
回复

使用道具 举报

ID:77589 发表于 2022-11-21 10:09 | 显示全部楼层
ningsy 发表于 2022-11-18 20:22
unsigned char b,当最后一步b=0时,0=0,for条件一直为真,但b-1又不存在,所以进入死循环跳不出来了。

b的类型是unsigned char,如果结束条件是b>=0,在b==0时条件成立,当b再减1时,告诉你此时b就变成了255了,b>=0这个条件还是成立,但是此时再继续操作,数组就已经越界了,这是一个致命的错误!!!!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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