新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 流水燈設(shè)計的幾個程序

流水燈設(shè)計的幾個程序

作者: 時間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
第一個程序:讓流水燈,從左到右,第一個燈,一瞬間到最高亮度,然后降到最低亮度,之后,就是前兩個燈重復(fù)第一個燈的情況,然后是前三個燈,然后是前4個燈,直到全部完成
程序如下:
#include
delay(k)//延時函數(shù)
{
while(k--)
{}
}

voidmain(void)//主函數(shù)
{
unsignedintt=25000,n=1;
P1=0xfe;
for(n = 1;n<=7;n++)//可讀性提高
{
delay(t);
P1=(0xfe<delay(t);
P1=0XFF;
}
}
開始的時候不會用位運算,把每一步都寫出來(一閃一滅,每一次都是用賦值來表示),數(shù)著到那一個閃爍,
代碼很復(fù)雜,經(jīng)過提醒后,然后通過位運算,大大化簡了代碼的數(shù)量,而且可讀性提高不少..
錯誤的原因是:不了解編譯語言是否可以像c語言一樣編譯,想了一會,就用復(fù)雜的代碼去寫出這個程序.

第二個程序:讓流水燈,從右到左,第一個燈從暗到明,然后到最亮程度就保持住這個狀態(tài),然后第二個燈緊接著從暗到明,然后是第3個燈,以此類推直到全亮,然后集體熄滅.
程序如下:

#include
delay(k)//延時函數(shù)
{
while(k--)
{}
}

voidmain(void)//主函數(shù)
{
unsignedintn=1,i=1;//都最后要看看那些是變量,那些是常量
const int t = 600;


P1=0XFF;
for(n = 1;n<9;n++)
{
for(i=1;i<=t;i++)
{
delay(t-i);//通過每一次循環(huán)暗的時間減少
P1=(0XFF>>n);
delay(i);//通過每一次循環(huán),亮的時間增多,在人的眼睛看來就可以逐漸增亮
P1=(0XFF>>(n-1));
}
}
P1=0XFF;
delay(25000);
}
開始的時候,認為通過閃爍次數(shù)和熄滅的次數(shù)一樣,然后最后就亮了,就可以算是由暗到亮了,這個想法到最后燒寫發(fā)現(xiàn)變化太快了,由暗到亮的過程不算表示出來,出現(xiàn)了最致命的錯誤...
其實我們主要是在亮和暗的時間方面做了緩慢的變化就可以表示有暗到亮的過程....

第三個程序:讓流水燈,從左到右,第一個燈,從暗到明,然后亮度再降下來,然后是接下一個燈,就是依次明暗亮一個燈,一次只亮暗一個
程序如下:
#include

delay(k)//一個延時的函數(shù)
{
while(k--)
{}
}

voidmain()//主函數(shù)
{
unsignedintdark=0xfe,i=1,n=1;
constintt=600;//珍惜內(nèi)存啊,不變的可以用常量來表示

P1=0xff;
for(n=1;n<=8;n++)
{
for(i=1;i{
P1=0XFF;
delay(t-i);
P1=(dark);
delay(i);
}
for(i=i;i>0;i--)//由亮到暗
{
delay(t-i);
P1=(dark);
delay(i);
P1=0XFF;
}
dark=(dark<<1)+1;//向左位移后,最右補0,如果沒有+1,那就會亮起來,沒有一次只亮一個
}
}
開始的時候,也是想到用加法去表示出來,用0xff<在其中,for中的語句有一些可讀性不高的語句for(;n<9;n++),這些語句,在看程序的時候就要找出那個已經(jīng)賦值的n在那里,是什么值..最后就把他改為for(n = 1;n<9;n++)
在其中有一個常量用了變量的形式去表示,這個是占用內(nèi)存的錯誤,因此,每一次寫,就要想好這個量是用常量還是用變量,如果是常量,可以用宏的形式去表示,也可以用const 去表示..用宏更容易維護


最后,我想下一次,每一次燒寫我的程序之前,都會用流水燈的程序運行運行一次,確保燈的連線閉路的...
而且,寫完運行之后,就找找那些變量是不是變了,是不是可以用常量表示.
自己看自己的程序,是不是可以一路看到最后,走到那個一步是要找出他的大小..會有麻煩,不方便...就看是否可以進行修改...


關(guān)鍵詞: 流水燈延時函

評論


技術(shù)專區(qū)

關(guān)閉