程序:
//流水灯程序方法一
#include<reg51.h>
void main()
{
unsigned int i;//定义初始延时变量
i=40000;
while(1)//循环
{
P1=0xFE;//点亮1灯
while(i--);//延时40000
P1=0xFD;//点亮2灯
while(i--);
P1=0XFB;//点亮3灯
while(i--);
P1=0XF7;//点亮4灯
while(i--);
P1=0XEF;//点亮5灯
while(i--);
P1=0XDF;//点亮6灯
while(i--);
P1=0XBF;//点亮7灯
while(i--);
P1=0X7F;点亮8灯
while(i--);
}
}
//流水灯程序方法二(取反~)
/*#include<reg51.h>
void main()
{
unsigned int x;//定义左移的位数
unsigned int i;//定义初始延时变量
x=0;//此时不左移,点亮1灯
i=40000;//延时时长
while(1)//循环,一次点亮8个灯
{
P1=~(0x01<<x);//二进制(00000001)取反得到二进制(11111110),即为1号灯的位地址。使其左移x位
x++;//表示每次左移位数加1,即第一次左移1位,第二次左移2位......,每移位一次,依次点亮8个灯(1~8)
//while(i--);//延时点亮,使得每个灯点亮时有时间间隔
if(x>=8)//一共8个灯,当x=7时,8号灯亮,所以当x>=8时没有相应的I/O口(灯),使其循环,只得让x从0开始。
{
x=0;
}
while(i--);
}
}*/
//流水灯程序方法三
/*#include<reg51.h>
#include<intrins.h>//循环移位库
void main()//主函数
{
unsigned int i;//定义无符号延时变量
i=40000;//延时赋值
P1=0x7F;//(01111111)此时第八灯亮
while(1)//循环函数
{
P1=_cror_(P1,1);//(01111111-10111111-11011111-11101111-11110111-11111011-11111101-11111110)循环右移,_crol_(值,位数):循环左移
while(i--);
}
}*/
/*//方法四:点亮led灯(定义数组灵活点亮)
#include<reg51.h>
unsigned char code led[8]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};///code意思是储存在外部硬盘上,不占用内存,随用随调取。
void main()
{
unsigned int i;
unsigned int temp;
//i=40000;
while(1)
{
P1=led[temp++];
if(temp>=8)
{
temp=0;
}
i=40000;
while(i--);
}
}*/
标签:P1,点亮,--,51,unsigned,单片机,while,延时,at89c51 From: https://blog.51cto.com/u_15797078/5870654