#include<reg52.h> DELAY(unsigned int ms) { unsigned int i,j; for(i=ms;i>0;i--) for(j=114;j>0;j--); return 0; } void main() { int a,b,k,l; while(1) { a=0xfe; for(k=0;k<8;k++) { if(k>0) a=a<<1; b=a; for(l=k;l<8;l++) { P1=b; DELAY(400); b=(b<<1)+1; } } } } 这是我的最终代码 |
csmyldl 发表于 2019-10-30 07:52 谢谢,知道了,是第二个循环里面要用一个参数代替a,我没注意直接改变a的值了 |
mengzhixinheng 发表于 2019-10-30 07:49 对,在第二个循环要用其他参数代替a,谢谢 |
|
k=1时,此时a=0xfe,for (l=1;l<=8;l++)循环控制一个灯走一遍,k=2时,此时a=0xff,执行a=a<<k后,a=0xfc,才符合你编程逻辑 |
k值不对,第一遍后a的初值被改变为0xff |
写了2种位移,嵌套循环,也算是花样流水灯了,自己写的会不知道流水灯效果,那你不是写,是抄袭的?你可分别把其中一条移位语句注释掉试看。 |
![]() |