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

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限流電阻的計算方法
//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);
}
}
