Ⅰ 51單片機匯編控制8個流水燈
思路:
循環控制常亮狀態的值,將其從最高位循環到最低位。這個用於最後狀態的常亮
在常亮循環中,控制不是常亮的其它所有位進行再次循環,逐漸從最低位亮滅循環到最高位
代碼如下:
#include<reg51.h>
unsignedcharPData;//整體結果
unsignedcharCurrData;//變化的最高位
//延時,本函數是非精確延時,若需要精確延遲則需要根據本函數的匯編語句進行精確計算後調整循環體次數
voiddelay(unsignedintms){
unsignedchari;
while(ms--){
for(i=0;i<120;t++){
;
}
}
}
voidmain(){
unsignedchari=0,j=0;
PData=0x00;//全滅狀態
for(i=8;i>0;i--){//控制常亮的位置,先從最高位開始,依次循環到最低位
for(j=0;j<i-1;j++){//從最低位循環到不是常亮的最高位
P1=~(PData+(1<<j));//第i位亮
delay(500);
P1=~PData;//第i位滅
delay(500);
}
PData=PData+(1<<(i-1));//置最高位為常亮狀態
P1=~PData;
delay(500);
}
//停機
while(1){
;
}
}