running_led(基礎(chǔ)流水燈程序)
明白了這個(gè)基礎(chǔ)的流水燈思想,大部分流水燈程序都是這個(gè)基礎(chǔ)流水燈演變而來(lái)的。
流水燈的流動(dòng):當(dāng)開(kāi)關(guān)(switch)閉合并且松開(kāi)后,流水燈開(kāi)始流動(dòng):
流水燈從兩端向中間亮起,直至全部點(diǎn)亮——從中間向兩端開(kāi)始只有一個(gè)滅,其余都亮——全部滅掉——從兩端只有一個(gè)亮燈流向中間——全部點(diǎn)亮(結(jié)束)
(proteus繪制原理圖)
(從兩端開(kāi)始向中間亮起)
(流水燈全部點(diǎn)亮)
(從中間向兩端流水滅燈)
(從兩端向中間流水亮燈)
我的代碼:
#include
#include
#include
#define uint unsigned int
#define uchar unsigned char
sbit switch_led=P1^0;
void delay(uint delay_time);
void main()
{
uint i;
while(1)
{
if(switch_led==0)
{
delay(10);//防止誤判
if(switch_led==0)
{
while(switch_led==0);//消抖
P0=0xfe;
P2=0x7f;
delay(1000);
for(i=0;i<7;i++)
{
P0=P0<<1;
P2=P2>>1;
delay(500);
}
P0=0x80;
P2=0x01;
delay(500);
for(i=0;i<7;i++)
{
P0=_cror_(P0,1);
P2=_crol_(P2,1);
delay(500);
}
delay(1000);
P0=0XFF;
P2=0XFF;
delay(1000);
P0=0xfe;
P2=0x7f;
delay(500);
for(i=0;i<7;i++)
{
P0=_crol_(P0,1);
P2=_cror_(P2,1);
delay(500);
}
P0=0X00;
P2=0X00;
}
}
}
}
void delay(uint delay_time)//延時(shí)1ms子程序
{
uint x,y;
for(x=delay_time;x>0;x--)
for(y=112;y>0;y--)
{;}
}