/*----------------------------------------------- 功能:花樣燈(實現多種閃爍) 作者:fei yu 日期:2010-6-15 ------------------------------------------------*/ #include<reg52.h> #define uint unsigned int void delay(uint); main() { uint fre=0x04; uint fre1,fre2; uint comp1=0xfe,comp2=0x80; while(1) { /*---------------------------------------------------------------------------------- 模塊一:循環單向閃爍,只有一個燈亮 執行3次,轉入下一種閃爍 ----------------------------------------------------------------------------------*/ P1=0xfe; while(1!=fre--) { fre1=0x08; while(1!=fre1--) { delay(30000); P1<<=1; P1|=0x01; if(P1==0x7f) { delay(30000); P1=0xfe; } } } /*---------------------------------------------------------------------------------- 模塊2:循環單向閃爍,只有兩個燈亮 3次,轉入下一種閃爍執行 ----------------------------------------------------------------------------------*/ P1=0xfc; while(3!=fre++) { fre2=0x04; while(1!=fre2--) { delay(30000); P1<<=2; P1|=0x03; if(P1==0x3f) { delay(30000); P1=0xfc; } } } /*---------------------------------------------------------------------------------- 模塊3:循環往復閃爍,只有一個燈亮 執行3次,轉入下一種閃爍 ----------------------------------------------------------------------------------*/ P1=0xfe; fre1=0x04; while(1!=fre1--) { while(P1!=0x7f) { delay(30000); P1<<=1; P1|=0x01; } while(P1!=0xfe) { delay(30000); P1>>=1; P1|=0x80; } } /*---------------------------------------------------------------------------------- 模塊4:全亮全滅 執行3次,轉入下一模塊 ----------------------------------------------------------------------------------*/ while(3!=fre1++) { delay(30000); P1=0x00; delay(30000); P1=0xff; } /*---------------------------------------------------------------------------------- 模塊5:順次點亮或者熄滅, 多個燈亮,執行3次,轉入下一模塊 ----------------------------------------------------------------------------------*/ while(1!=fre1--) { P1=0xfe; while(P1!=0x00) { delay(30000); P1<<=1; } delay(30000); P1=0x80; while(P1!=0xff) { delay(30000); P1>>=1; P1|=0x80; } } /*---------------------------------------------------------------------------------- 模塊6:順次點亮或者熄滅,多個燈亮, 一次點亮兩個,執行3次,轉入下一模塊 ----------------------------------------------------------------------------------*/ while(3!=fre1++) { P1=0xfc; while(P1!=0x00) { delay(30000); P1<<=2; } delay(30000); P1=0xc0; while(P1!=0xff) { delay(30000); P1>>=2; P1|=0xc0; } delay(30000); } /*---------------------------------------------------------------------------------- 模塊7:雙端對稱往返閃爍 執行3次,進行下一輪循環 ----------------------------------------------------------------------------------*/ P1=0x7e; delay(30000); while(1!=fre1--) { fre2=0x00; while(6!=fre2++) { P1=0xff; comp1<<=1; comp1|=0x01; comp2>>=1; P1&=comp1; P1^=comp2; delay(3000000); if(P1==0xe7) { comp1<<=1; comp1|=0x01; comp2>>=1; } if(comp2==0x01) { comp1=0xfe; comp2=0x80; } } } } } void delay(uint cnt) { while(cnt--); }