51單片機控制LED閃爍


51單片機最小系統

  • 供電部分:5V供電
  • 時鍾部分:
    • 晶振的選擇 一般使用12MHz或者11.0592MHz的晶振,51單片機12個時鍾周期執行一個機器周期,使用12MHz的晶振,那么1個機器周期是1uS;使用11.0592MHz的晶振是為了減小串口通信的誤碼率。
    • 起振電容的選擇,參考數據手冊選擇。

LED閃爍

LED燈驅動電路分析

LED限流電阻的計算方法

Proteus中默認的LED的壓降是2.2V,電流一般5 - 20mA就可以了,電源VCC=5V。要使LED的驅動電流為10ma,那么電阻R=(5V - 2.2V) / 10mA = 280歐,可以取比較接近的330歐電阻。由於51單片機的P0口,拉電流(高電平驅動)最大電流只有1mA,灌電流(低電平驅動)最大有10mA,整個P0口不能超過24mA,直接使用灌電流可以不需要三級管就行了。

LED屬性

實現LED閃爍程序

//LED限流電阻的計算方法
//Proteus中默認的LED的壓降是2.2V,電流一般5-20mA就可以了,電源VCC=5V
//要使LED的驅動電流為10ma,那么電阻R=(5V - 2.2V) / 10mA = 280歐,可以取比較接近的330歐電阻。
//由於51單片機的P0口,拉電流(高電平驅動)最大電流只有1mA,灌電流(低電平驅動)最大有10mA,
//整個P0口不能超過24mA,直接使用灌電流可以不需要三級管就行了。

#include <REG51.H>

//定義數據類型,u8表示無符號8bit整數(數值范圍是0-255)
//u16表示16bit整數(數值范圍是0-65535)
typedef unsigned char u8;
typedef unsigned int u16;

//定義P00引腳為LED所在引腳
sbit LED = P0^0;


//延時1毫秒,1秒=1000毫秒
void delay_ms(u16 ms)
{
    while (ms--)
    {
        volatile u8 x = 120;
        while (x--);
    }
}

//程序入口函數
void main()
{
    while (1)
    {
        //LED燈亮500毫秒
        LED = 0;   
        delay_ms(500);
        
        //LED燈滅500毫秒
        LED = 1;
        delay_ms(500);
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM