实验任务一:实现控制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);//延时100msP2=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,重新开始新一轮循环