三種方法實現流水燈
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循環左移一位
}
}