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左移一位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循環左移一位
  }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章