51系列是8位机,其IO都是映射到P0、P1之类上的,每个P0、P1等等都对应8个管脚,每个管脚可以作为一个开关的控制量,从而实现多个LED之类的控制。
所谓流水循环灯,就是让组成循环的IO脚相应管脚一次实现开关打开状态,即去修改对应的P0、P1的值(定时循环修改),修改值的次序也是依据一定的顺序,最简单的在比如8个LED的循环流水灯,可以假定是P0对应的管脚,就是让P0=0x01然后在定时器作用下循环左移(右移)操作而已。
如果是超过8bit的,就需要用到数组查表操作更方便,比如用到了P0、P1对应管脚的,
先初始化一个对应P0P1状态的 二维数组,共有16个状态,比如:
Arr[16][2]={ {01}{02}..{0128}{10}{20}...{1280} };
//下面是循环遍历伪语句:
i=0;
while{1}{
P0=Arr
[0];
P1=Arr[1];
i++;
if(i>15) i=0;
// 下面是延时处理调用
delay();
}
上面的语句就是循环流水灯的逻辑关键代码啦。
51系列是8位机,其IO都是映射到P0、P1之类上的,每个P0、P1等等都对应8个管脚,每个管脚可以作为一个开关的控制量,从而实现多个LED之类的控制。
所谓流水循环灯,就是让组成循环的IO脚相应管脚一次实现开关打开状态,即去修改对应的P0、P1的值(定时循环修改),修改值的次序也是依据一定的顺序,最简单的在比如8个LED的循环流水灯,可以假定是P0对应的管脚,就是让P0=0x01然后在定时器作用下循环左移(右移)操作而已。
如果是超过8bit的,就需要用到数组查表操作更方便,比如用到了P0、P1对应管脚的,
先初始化一个对应P0P1状态的 二维数组,共有16个状态,比如:
Arr[16][2]={ {01}{02}..{0128}{10}{20}...{1280} };
//下面是循环遍历伪语句:
i=0;
while{1}{
P0=Arr[0];
P1=Arr[1];
i++;
if(i>15) i=0;
// 下面是延时处理调用
delay();
}
上面的语句就是循环流水灯的逻辑关键代码啦。
举报