新聞中心

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

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

作者: 時(shí)間:2016-11-25 來(lái)源:網(wǎng)絡(luò) 收藏
第一個(gè)程序:讓流水燈,從左到右,第一個(gè)燈,一瞬間到最高亮度,然后降到最低亮度,之后,就是前兩個(gè)燈重復(fù)第一個(gè)燈的情況,然后是前三個(gè)燈,然后是前4個(gè)燈,直到全部完成
程序如下:
#include
delay(k)//延時(shí)函數(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;
}
}
開(kāi)始的時(shí)候不會(huì)用位運(yùn)算,把每一步都寫出來(lái)(一閃一滅,每一次都是用賦值來(lái)表示),數(shù)著到那一個(gè)閃爍,
代碼很復(fù)雜,經(jīng)過(guò)提醒后,然后通過(guò)位運(yùn)算,大大化簡(jiǎn)了代碼的數(shù)量,而且可讀性提高不少..
錯(cuò)誤的原因是:不了解編譯語(yǔ)言是否可以像c語(yǔ)言一樣編譯,想了一會(huì),就用復(fù)雜的代碼去寫出這個(gè)程序.

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

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

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

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

voidmain()//主函數(shù)
{
unsignedintdark=0xfe,i=1,n=1;
constintt=600;//珍惜內(nèi)存啊,不變的可以用常量來(lá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;//向左位移后,最右補(bǔ)0,如果沒(méi)有+1,那就會(huì)亮起來(lái),沒(méi)有一次只亮一個(gè)
}
}
開(kāi)始的時(shí)候,也是想到用加法去表示出來(lái),用0xff<在其中,for中的語(yǔ)句有一些可讀性不高的語(yǔ)句for(;n<9;n++),這些語(yǔ)句,在看程序的時(shí)候就要找出那個(gè)已經(jīng)賦值的n在那里,是什么值..最后就把他改為for(n = 1;n<9;n++)
在其中有一個(gè)常量用了變量的形式去表示,這個(gè)是占用內(nèi)存的錯(cuò)誤,因此,每一次寫,就要想好這個(gè)量是用常量還是用變量,如果是常量,可以用宏的形式去表示,也可以用const 去表示..用宏更容易維護(hù)


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


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

評(píng)論


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

關(guān)閉