实验任务一:实现控制8个发光管的亮(灭)
#include <REGX52.H>
void Delay1ms(unsigned int xms) //@11.0592MHz
{
unsigned char i, j;
while(xms)
{
xms--;
i = 12;
j = 169;
do
{
while (--j);
} while (--i);
}
}
void main()
{
while(1)
{
P2=0;//八个LED灯全亮
Delay1ms(100);//延时100ms
P2=1;//八个LED灯全灭
Delay1ms(100);
}
}
实验任务二:实现8位流水灯的效果
实验现象单片机从P2_0------P2_7逐个点亮LED(始终只有一个亮,呈现LED流水灯的形式)
直到P2_7的LED灯点亮之后再熄灭,P2_0的LED灯又点亮,如此循环往复
#include <REGX52.H>
unsigned char i;
void Delay1ms(unsigned int xms) //@11.0592MHz
{
unsigned char i, j;
while(xms)
{
xms--;
i = 12;
j = 169;
do
{
while (--j);
} while (--i);
}
}
void main()
{
P2=0xFE;
while(1)
{
for(i=0;i<8;i++)
{
Delay1ms(100);
P2=P2<<1;
P2=P2|0x01;
Delay1ms(100);
}
P2=0xFE;
}
}
程序讲解:
在for循环中,让流水灯的程序循环八次
P2=P2<<1;
因为LED灯为共阳极,所以为低电平点亮,我们将P2端口数值左移一位,"<<"表示左移,"1"为移动的位数
P2=P2|0x01;
将P2端口的数值(8位)与00000001进行或运算,即给P2端口最低位补1
最后,P2=0XFE,让P2等于11111110,重新开始新一轮循环