51单片机流水灯

安稳与你 提交于 2020-01-09 23:54:49

三种方法实现流水灯

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左移一位yesno

代码

//移位操作
#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循环左移一位
  }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!