|
| 12楼说得好,在第23行的for开始中已经重新给i赋值为0了,所以第29行的i=0是多余的,且n应该重新赋值才能让for循环中语句正常工作,所以把第29行改为n=1就可以实现流水灯了。 |
| 你还是弄个豆包AI编程吧,要快很多 |
keemee 发表于 2025-3-27 02:01 默认就是data,加不加效果一样,并不是错的。 |
| 为何是乱亮? |
keemee 发表于 2025-3-27 01:56 为何是乱亮? |
keemee 发表于 2025-3-27 01:49 有没有可能*2就是被编译为左移了,事实上8次后就永远都是0了。就是全都灭的状态了。楼主并没有说这个流水灯只流一次还是一直流。 |
sunwind001 发表于 2025-3-26 20:20 还是要看看书的,当然也可以自己试试看,全局的变量和参数是不是一个,以及各自的作用范围 |
| data是错的 |
sgq657785 发表于 2025-3-24 11:58 溢出并不影响亮灯,乱亮而已,关键问题不对 |
188610329 发表于 2025-3-24 09:46 他前面定义时n=1呀 |
| 普中的板子,不太懂,不知有没有LED流水灯的总开关,或者控制芯片 |
paladina 发表于 2025-3-24 08:59 溢出了影响流水灯依次亮,也能乱亮 |
| 延时函数内部没有使用传进来的参数,变成了很短的定时函数 |
mirvv 发表于 2025-3-24 09:40 一次定义全局变量,多次使用并不会无限增加内存占用 |
xiaobendan001 发表于 2025-3-24 10:23 没有警告,我是想在最开头声明nTime,延时函数直接用我声明的nTime,这样不可以吗 |
mirvv 发表于 2025-3-24 09:40 请问这应该怎么释放内存 |
xiaobendan001 发表于 2025-3-24 10:23 我没考虑到char的范围,现在改一改,延时函数那边我已经改过了,把30行和29行换一个位置就都能流了,感谢 ![]() |
CQ123 发表于 2025-3-26 14:12 好的,这样改就可以流水了 |
188610329 发表于 2025-3-24 09:46 n = 1;啊 |
| 把最后的i=0改成n=1; |
| 第29行i=0无意义,改成n=1即可。 |
| 主要是8次循环后n没有重新置1,后面就溢出了 |
| 把最后的i=0改成n=1; |
|
代码原理大概没啥问题。但是你延时函数的参数没有使用。就是调用的时候的500没起作用。颜色400周期后退出,400周期很快的,就是可能一瞬间就完成了8个LED的流水,你没看到。实际上是7个,因为你输出时是先N*2的。这样第一个实际上是没有亮过的。如5楼那样改下延时让参数起作用试试看。 而且你声明是全局的NTIME变量,然后在形参里面也用了NTIME,并且没有指明类型。这习惯不好,容易混淆。不指定类型的参数会是什么类型?另外这种编译时不会有警告吗?如果是你声明的CHAR类型那么你传给他一个500是超了范围的。 |
| 你还是很有想象力的,不过要注意N的阶乘容易溢出 |
188610329 发表于 2025-3-24 09:46 人家N不是初始化=1了? |
|
n = 0, n*2 依然 = 0, n*2*2*2*2…… 也依然是 0 从头到尾 n = 0, 从头得尾 P2 = 0xff 你希望 怎么流水灯?? |
sunwind001 发表于 2025-3-23 16:59 你的unsigned char n = 1,是全局变量,不释放内存,你这一直循环的话,char类型最大256,多循环几次就char就溢出了就是这个变量n错了; |
| 呃。我猜你是想表达是的P2 = 0XFF << 1 ? |
|
#include <STC89C5xRC.H> void DelayXms(unsigned int ms) { unsigned int i, j; for (i = ms; i > 0; i--) for (j = 110; j > 0; j--); } void main() { unsigned char i; while(1) { for(i=0; i<8; i++) { P2 = 0xFF - (0x01 << i); // 逐位点亮 DelayXms(500); } } } 1.查看一下你的LED端口是否为P2等等,确认硬件端口正确 2.参数类型确认 3.端口移位操作 |
|
用移位操作,你的n=n*2 会超出0XFF while(1) { for(i = 0; i < 7; i++) { P2 = ~(0x01 << i); DelayXms(500); } |
| 延时函数那边已经修改过了 |
| 把while(1)框架删除,是全亮而且板子一直响 |