三种方法实现流水灯
1.位输出操作
流程图
代码
//位操作输出
#include<reg52.h>
#define uint unsigned int
#define on 0
#define off 1
sbit LED0=P1^0;
sbit LED1=P1^1;
sbit LED2=P1^2;
sbit LED3=P1^3;
sbit LED4=P1^4;
sbit LED5=P1^5;
sbit LED6=P1^6;
sbit LED7=P1^7;
void delay(uint xms) //延时约xms毫秒
{
uint i,j;
for(i=xms;i>0;i--)
for(j=112;j>0;j--); //分号代表跑空,for语句不需要分号,112次表示一毫秒
}
void main()
{
while(1)
{
LED0=on; //P1^0=0;
delay(500); //延时500毫秒;
LED0=off;
LED1=on; //P1^1=0;
delay(500); //延时500毫秒;
LED1=off;
LED2=on; //P1^2=0;
delay(500); //延时500毫秒;
LED2=off;
LED3=on; //P1^3=0;
delay(500); //延时500毫秒;
LED3=off;
LED4=on; //P1^4=0;
delay(500); //延时500毫秒;
LED4=off;
LED5=on; //P1^5=0;
delay(500); //延时500毫秒;
LED5=off;
LED6=on; //P1^6=0;
delay(500); //延时500毫秒;
LED6=off;
LED7=on; //P1^7=0;
delay(500); //延时500毫秒;
LED7=off;
}
}
2.移位操作
流程图
代码
//移位操作
#include<reg51.h>
void delay(unsigned int xms); //函数声明(若将函数写在主函数后,则应在此处进行声明
void main()
{ int i;
while(1)
{
P1=0xfe;
for(i=0;i<8;i++)
{
delay(500); //延时0.5秒
P1 = P1 << 1; //最后位补0,则亮的灯越来越多,因此应或0000 0001
P1 = P1 | 0x01;
}
}
}
void delay(unsigned int xms) //延时约xms毫秒
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=112;j>0;j--); //分号代表跑空,for语句不需要分号,112次表示一毫秒
}
3.循环移位
流程图
代码
//循环移位操作
#include<reg51.h>
#include<intrins.h>
#include"delay.h" //此处将延时函数封装成库,""表示调用自己编写的库<>表示调用系统头文件
void main()
{
P1 = 0xfe; //1111 1110
while(1)
{
delay(500);
P1 = _crol_(P1,1); //将P1循环左移一位
}
}
来源:CSDN
作者:怎么样.
链接:https://blog.csdn.net/qq_44981039/article/details/103914276