51单片机流水灯

三种方法实现流水灯

1.位输出操作

流程图

Created with Raphaël 2.2.0 开始 开发板初始化 LED0亮一秒后熄灭 LED1亮一秒后熄灭 LED2亮一秒后熄灭 LED3亮一秒后熄灭 LED4亮一秒后熄灭 LED5亮一秒后熄灭 LED6亮一秒后熄灭 LED7亮一秒后熄灭

代码

//位操作输出
#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.移位操作

流程图

Created with Raphaël 2.2.0 开始 开发板初始化 点亮第一个LED 延时0.5s 左移8次了吗? P1左移一位 yes no

代码

//移位操作
#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.循环移位

流程图

Created with Raphaël 2.2.0 开始 开发板初始化 点亮第一个LED 延时 P1循环左移一位

代码

//循环移位操作
#include<reg51.h>
#include<intrins.h>
#include"delay.h"   //此处将延时函数封装成库,""表示调用自己编写的库<>表示调用系统头文件
void main()
{
  P1 = 0xfe;   //1111 1110
  while(1)
  {
   delay(500);
   P1 = _crol_(P1,1);   //将P1循环左移一位
  }
}
发布了16 篇原创文章 · 获赞 11 · 访问量 593

猜你喜欢

转载自blog.csdn.net/qq_44981039/article/details/103914276