|
|
#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種位移,嵌套循環,也算是花樣流水燈了,自己寫的會不知道流水燈效果,那你不是寫,是抄襲的?你可分別把其中一條移位語句注釋掉試看。 |
編譯后看匯編代碼,單步運行不就知道了 |