圖片是我單獨把流水燈部分去掉后做的分析,求大神解答下
********************************
間隔300ms第一次一個管亮流動一次,
第二次兩個管亮流動,依次到8個管亮,
然后重復整個過程。
單片機源程序如下:
#include<reg52.h> //52單片機頭文件
#include <intrins.h> //包含有左右循環移位子函數的庫
#define uint unsigned int //宏定義
#define uchar unsigned char //宏定義
void delay(uint z) //延時函數,z的取值為這個函數的延時ms數,如delay(200);大約延時200ms.
{ //delay(500);大約延時500ms.
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main() //主函數
{
uchar a,i,j;
while(1) //大循環
{
a=0xfe; //賦初值
for(j=0;j<8;j++)
{
for(i=0;i<8-j;i++) //左移
{
P1=a; //點亮小燈
delay(200); //延時200毫秒
a=_crol_(a,1); //將a變量循環左移一位
}
a=_crol_(a,j); //補齊,方便下面的左移一位
P1=0xff; //全部關閉
a=a<<1; //左移一位讓多一個燈點亮
}
}
}
|