学习51单片机的第二步应该就是流水灯了
之前的那一版有点问题,我就直接删掉了,这次完善了一下,请大家多多指正。(文末有解释)
#include <REGX52.H>
//延时函数
void DelayXms(unsigned int x) //@12.000MHz
{
unsigned char i, j;
while(--x)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
//主函数
void main()
{
char num;
while(1)
{
//--------------------核心部分--------------------
for(num=0x01;num!=0x00;num<<=1)
{
P2=num;
DelayXms(500);
}
//-----------------------------------------------
}
}
稍微解释一下:
"0x" 后面的数表示十六进制。
左移后,左右边补0
0x01 表示成二进制数 0000 0001
左移一次变成 0000 0010 也就是 0x02
以此类推
当左移到 1000 0000 即 0x80后(第八位灯已经点亮并延时),下一次循环进行左移会变成 0000 0000 即0x00.此时for循环判断条件不成立,for循环退出,至此一个流水灯周期结束。