❶ 如何用單片機做流水燈
因為電路用單片機控制,所以電路非常簡潔。其電路原理圖見下圖,印製板圖如下圖所示。
電路的核心部分是AT89C2051單片機,前面提到它有Pl和P3兩組I/O口,我們這里只用到Pl口,共8個引腳。圖中Cl、R9組成典型的上電復位(即在加電時單片機復位)電路,XTAL、C2、C3與AT89C2051片內振盪電路組成時鍾振盪器。值得注意的是,C2、C3的容量不能與圖中數值偏差太大,否則可能引起不起振或振盪不穩定。XTAL的頻率可以在4-20MHz之間,不過,頻率的變化會導致程序運行速度的變化,這樣就需要調整延時子函數的參數。事實上,不調整參數亦可,只是此時延遲時間不再是1秒,其延遲時間會隨著XTAL頻率的降低而增加。
二、軟體部分
本程序包含兩個函數,一個是主函數,另一個是延時子函數。源程序如下(為了便於講解,我們為每行程序加上了編號):
程序各行作用如下:
00行:把AT89C2051的頭文件「AT89x051.H」包含進來。
01行:聲明Delay()延時子函數,該函數有一個無符號整型參數k,同時函數前面的void表明函數不返回函數值。
02行:延時子函數的開始,同時聲明兩個無符號整型變數i和j。
不過請注意,這里沒有象上期的程序一樣,把表示函數開始的「{」單獨成行,而是把下一行寫在一起了。事實上,寫C程序的時候,可以把多行寫作一行,C編譯器只要遇到分號就認為是一行語句的結束。
當然,我們不能因為C程序有這個特點,就隨意把多行合作一行書寫,實際書寫C程序的時候,還是要養成良好的程序書寫習慣,按照約定俗成的原則來書寫。
03行:聲明for()循環。這個循環的初始條件是i=0,終止條件是i<k,循環計數是每循環一次,用手計數的變數i加1。因此,這個循環的循環次數就是k次。這樣,只要改變k的值(即改變Delay()延時子函數的參數k的值),就可以很容易地控制循環次數,從而獲得不同的延時時間。
04行:聲明嵌套在03循環中的一個新的for()循環,這個循環與上一個循環相似,其循環次數是120次。本循環與上一個循環嵌套後,使得總的循環次數達120×k次。
05行:第一個分號,表示L條空語句,佔用一個機器時間,以實現延時的目的。後面的兩個「}」中,第一個「}」是04行for()循環的結束標志,程序遇到它時,將自動返回04行,使用於循環計數的變數j加1,同時判斷j是否小於120,如果否,則轉入05行;第二個是03行for()循環的結束標志,程序遇到它則會返回03行
❷ 急求一個單片機流水燈(16個燈)電路圖!!
電路如下:
將16個LED的陰極(Led-、K極)連接到單片機的IO口(P1.0、P1.1...P1.7。。。),
LED的陽極(Led+、A極)串聯一個560歐姆電阻(一共16個)到電源正極
(Vcc、5V)
如果要點亮一個Led的話(P1.0)只要
CLR P1.0
要熄滅一個Led的話(P1.0)只要
SETB P1.0
即可
夠詳細了吧?!
❸ 如何用單片機簡單製作一個流水燈
1:首先得准備單片機的最小系統;2:安裝共陽或者共陰電路外加限流電阻接好硬體;3:使用相應的編程軟體將編寫好的代碼下載到單片機,完後上電運行結果。
❹ 單片機中流水燈如何控制
單片機中流水燈控制:
硬體連接很簡單,只要將8個LED指示燈接在P1口上
另一端通過220歐姆的電阻接+5V電源上,就可以了。
主要靠軟體控制,簡單的可以使用左移或右移指令,將低電平0
逐漸移入寄存器中,即控制LED指示燈逐漸一個一個地點亮或一個一個地熄滅。
復雜點:
可以進行花式流水控制。
例如:
可以由兩邊逐漸向內點亮
然後再由內逐漸向外一個一個熄滅。
還可以由由內逐漸向兩邊內點亮
然後再由兩邊漸向內逐一個一個熄滅。
在程序的實現上
可以把各種花式流水的P1口亮滅狀態字
事先定義成數組
然後每隔一定的時間
取出送P1口顯示。
呵呵
俺只提供給你一個號的演算法
程序就自己動手自立更生吧
滿意
就選滿意回答
❺ 如何用單片機簡單製作一個流水燈
工具:STC系列51單片機、串口轉換器(USB轉TTL 或232轉TTL)
材料:實驗板一塊(可以買現成的,也可以買麵包板自己搭建),電阻、LED燈 若干,5V電源等。
以下程序可以直接用Keil C 直接編譯執行。
//可以通過左移函數_crol_()和右移函數_cror_()來實現LED等的來迴流動。
//具體實現方法可以參考如下程序:
#include<reg51.h>
#include<intrins.h>
#defineuintunsignedint
#defineucharunsignedchar
voiddelay(uinta);
voidmain()
{
P1=0xfe;
while(1)
{
//向左循環點亮LED
for(i=0;i<7;i++)
{
P1=_crol_(P1,1);//左移一位,點亮下一位LED
delay(55);
}
//向右循環點亮LED
for(i=0;i<7;i++)
{
P1=_cror_(P1,1);//右移一位,,點亮上一位LED
delay(55);
}
}
}
//延時函數,延時a毫秒
voiddelay(uinta)
{
uintx,y;
for(x=a;x>0;x--)
for(y=110;y>0;y--);
}
❻ 51單片機流水燈安裝與調試的過程
利用實驗室提供的單片機實驗開發板的最小系統電路模塊、流水燈電路模塊,以及Protues模擬軟體搭建電路,實現I/O口循環流水燈演示效果。
LED流水燈控制電路如圖2-1所示,八個LED燈D0-D7(可選擇LED-RED)陽極接到+5V,陰極通過300歐姆電阻分別接到單片機的P1.0-P1.7八個IO口上。I/O口循環流水燈效果實現流程如圖2-2所示,依次從第一盞燈開始,分別點亮每一盞燈,中間調用延時子函數便可使得流水燈的效果清晰可見。點亮LED燈的具體實現方法與上節相同,只需讓相應的IO口輸出低電平即可,程序實現代碼已給出。按照上節給出的項目開發流程,從模擬電路搭建到程序編寫,再到模擬調試以及最後的實物調試完成循環流水燈的實現。
❼ 51單片機流水燈,怎麼寫程序能達到物理上改變燈連的引腳。
當然可以了。
假設你原來操作的時P0口,
燈D0接的是P0.0引腳
燈D1接的是P0.1引腳
燈D2接的是P0.2引腳
...
燈D7接的是P0.7引腳
為了好布線後,順序亂掉了,比如
燈D0接的是P0.3引腳【亂了】
燈D1接的是P0.1引腳
燈D2接的是P0.0引姿塵腳【亂了】
燈D3接的是P0.2引腳【雹殲亂了】
燈D4接的是P0.4引腳
燈D5接的是P0.5引腳
燈D6接的是P0.6引腳
燈D7接的是P0.7引腳
這時候,可以採用一個位元組變數比如temp來替代原來P0,然後對這源冊沖個變數做判斷,比如
switch(temp)
{
case
0xfe:
P0=0xf7;break;
case
0xfd:
P0=0xfd;break;
case
0xfb:
P0=0xfe;break;
case
0xf7:
P0=0xfb;break;
...
}
❽ 51單片機要做100燈的流水燈,怎樣接線
這個簡單,鎮氏我用兩個口跟四個74159接了64個燈,留下郵箱地址吧,派搭我發給你,剩下的你可以塵旅拿參照那裡面 的設計自己擴展再接64個也沒問題
❾ 單片機流水燈
P0口控制,先奇數亮再偶數亮,循環三次;一個燈上下循環三次;兩個分別從兩邊往中間流動三次;再從中間往兩邊流動三次;不過這個程序實現的應該是這樣的
先奇數亮再偶數亮,循環三次;一個燈上下循環三次;兩個分別從兩邊往中間流動;再從中間往兩邊流動(延時0.1s)
#include< reg52.h>
#include< intrins.h>//頭文件
#define uint unsigned int
#define uchar unsigned char//聲明用unit代替unsigned int,下個同理
void delay();
void main()
{ uchar temp,temp1,temp2,a,b;
while(1)
{ for(b=3;b>0;b--)
{ temp=0xaa;
P0=temp;
delay();
temp=0x55;
P0=temp;
delay();//調用延時函數
}
for(a=3;a>0;a--)
{ temp=0xfe;
for(b=7;b>0;b--)
{ P0=temp;
temp=_crol_(temp,1);
delay();
P0=temp;
delay();
}
}
temp1=0xfe;
temp2=0x7f;
for(a=8;a>0;a--)
{
temp=temp1&temp2;
P0=temp;
delay();
temp1=_crol_(temp1,1);
temp2=_cror_(temp2,1);
}
}
}
void delay()
{ uint a,b;
for(a=100;a>0;a--)
for(b=100;b>0;b--);
} //延時函數
希望可以幫助到您
謝謝