點亮微控制器中任意一個流水燈亮滅的C語言程式該如何做呢?
實現任意一個流水燈亮滅的程式非常好程式設計呀,這是入門級水準。
首先我們規劃好硬體電路部分,在這裡使用三個流水燈做簡單講解吧。微控制器使用簡單基礎的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 <reg51.h> //標頭檔案
#include<intrins.h>//標頭檔案
#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);
點亮微控制器中任意一個流水燈亮滅的C語言程式該如何做呢?
實現任意一個流水燈亮滅的程式非常好程式設計呀,這是入門級水準。
首先我們規劃好硬體電路部分,在這裡使用三個流水燈做簡單講解吧。微控制器使用簡單基礎的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 <reg51.h> //標頭檔案
#include<intrins.h>//標頭檔案
#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);
}