回覆列表
  • 1 # 學習vs遊戲

    點亮微控制器中任意一個流水燈亮滅的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);

    }

  • 中秋節和大豐收的關聯?
  • 羽毛球后場轉體怎麼練?