首先我們規劃好硬件電路部分,在這里使用三個流水燈做簡單講解吧。單片機使用簡單基礎的51單片機。利用單片機P3.0~P3.2 三個I0口,假如外部電源給LED供電,IO口就輸出低電平時(0),LED燈就會亮,IO口輸出高電平,LED就會滅。假如是單片機IO口給led供電(如果使用P0口需要使用上拉電阻),IO口就輸出低電平時(0),LED燈就會滅,IO口輸出高電平,LED就會亮。
限流電阻阻值計算:
LED的工作電壓:紅黃為2V,綠藍白為3.2~3.6V,電流都是18-20ma。下圖是是單片機IO驅動的情況,P0口需要使用上拉電阻。假設LED額定電流是18mA。額定電源是3.2v那么限流電阻R2=(5V-3.2V)/18mA=100Ω。(圖就是個大概,晶振回路和復位電路都沒畫)

實例解析:外部電源供電,電路連接簡略圖如下
程序設計思想:開始讓P0保持高電平,三燈都是滅的。然后P0.0輸出低電平,LED1亮,延時一段時間后,讓P0.0輸出高電平,P0.1輸出低電平,LED1滅,LED2亮,再延時一段時間,讓P0.1輸出高電平,P0.2輸出低電平,此時LED2滅,LED3亮,延時后讓亮滅過程循環就可實現流水燈效果。

流水燈仿真實驗:4個LED
程序編寫后需要用KECIL C51軟件生成HEX文件,用proteus可以仿真結果

程序:
#include //頭文件
#include//頭文件
#define uchar unsigned char
uchar j,temp;
void delay(unsigned int ms) //延時函數
{
uchar t;
while(ms--)
for(t=0;t<123;t++);
}
void main() //主函數
{
P1=0xff; //P1=11111111,對應串口燈全滅
delay(500);
temp=0xfe; // 0x11111110
for(j=0;j<4;j++) //此循環執行四次跳出
{
P1=temp; // P1=11111110, P1.0連接的LED燈亮
delay(500); // 延時
temp=_crol_(temp,1); //左移函數,依次是11111101,11111011,11110111
}
P1=0xff; 跳出循環,P1串口全部是高電平,LED都滅
while(1);
}
審核編輯:湯梓紅
-
led
+關注
關注
242文章
23479瀏覽量
665779 -
單片機
+關注
關注
6050文章
44703瀏覽量
641306 -
流水燈
+關注
關注
21文章
433瀏覽量
59968
發布評論請先 登錄
相關推薦
51單片機實現流水燈

51單片機流水燈實驗

評論