- 51單片機應用開發案例手冊
- 程國鋼編著
- 1363字
- 2018-12-27 19:43:08
1.2 I/O引腳驅動LED
LED(發光二極管)是51單片機系統中最常見的一種指示型外部設備,是半導體二極管的一種,可以把電能轉化成光能;其主要結構是一個PN結,具有單向導電性,常常用于指示某個開關量的狀態。LED的實物如圖1.2所示。

圖1.2 紅色的發光二極管實物
說明:發光二極管有紅、黃、綠等多種不同顏色及不同的大小(直徑),還有高亮等型號,它們主要的區別是封裝、功率和價格。
1.2.1 LED的工作原理
發光二極管LED和普通二極管一樣,具有單向導電性,當加在發光二極管兩端的電壓超過了它的導通電壓(一般為1.7~1.9V)時就會導通,當流過它的電流超過一定電流(一般為2~3mA)時則會發光。51單片機系統中發光二極管的典型應用電路如圖1.3所示。

圖1.3 51單片機系統中LED的典型應用電路圖
圖1.3中P1端口上的LED驅動方式稱為“拉電流”驅動方式,當51單片機I/O引腳輸出高電平時,發光二極管導通發光;當51單片機I/O引腳輸出低電平時,發光二極管截止。圖1.3中P3端口上的LED驅動方式稱為“灌電流”驅動方式,當51單片機引腳輸出低電平時,發光二極管導通發光;當51單片機引腳輸出高電平時,發光二極管截止。
圖1.3中的電阻均為限流電阻,當電阻值較小時,電流較大,發光二極管亮度較高;當電阻值較大時,電流較小,發光二極管亮度較低。一般來說該電阻值選擇范圍為1~10kΩ,具體電阻的選擇與該型號單片機的I/O口驅動能力、LED的型號及系統的功耗有關。
說明:P1端口不直接用I/O引腳驅動LED,而是外加了VCC,原因是51單片機I/O口的驅動能力有限;同理,P3中的電阻值不宜過小,因為51單片機I/O口吸收電流的能力也有限,過大的電流容易燒毀單片機。
1.2.2 應用實例——LED閃爍和流水燈
1. LED閃爍實例
LED閃爍實例中使用51單片機控制8個LED間隔亮、滅,形成閃爍效果,這種效果常常用于指示單片機系統的運行狀態。
圖1.4是LED閃爍實例的電路圖,8個LED使用灌電流的驅動方式連接在51單片機的P1端口上,表1.2是實例使用的典型器件說明。
表1.2 LED閃爍實例器件列表


圖1.4 LED閃爍實例電路圖
在實例中,51單片機通過一個軟件延時程序控制P1端口輪流輸出高電平和低電平,驅動發光二極管發光和熄滅,【例1.1】是LED閃爍實例的代碼。
【例1.1】 代碼使用兩個嵌套的for循環語句來控制延時,當到達延時之后使P1輸出電平翻轉。
#include <AT89X52.h> main() { unsigned char i,j; P1 =0x00; //初始化P1 輸出,LED全亮 while(1) { for(i=0;i<200;j++) //for循環軟件延時 { for(j=0;j<50;j++); } P1 =~P1; //P1 端口輸出的電平翻轉,形成閃爍 } }
2. 流水燈實例
流水燈實例使用51單片機控制8個LED輪流點亮,常常用于指示單片機系統的工作進程,或者用于構造特殊效果。例如,用紅、綠、黃三種顏色來制造舞臺效果等。
流水燈實例的電路圖和LED閃爍實例相同,如圖1.4所示,【例1.2】是流水燈實例的代碼。
【例1.2】 與LED閃爍實例類似,51單片機使用兩個嵌套的for循環語句來進行軟件延時,當延時完成之后使用“<<”移位語句將當前輸出高電平的P1端口引腳向高位移動一位,由于“<<”語句不帶進位功能(即到達最高位之后不會自動循環到最低位),所以需要用一個判斷語句將點亮端口位移動到最低位。
#include <AT89X52.h> main() { unsigned char i,j; unsigned char LED; LED=0x01; //最低位LED點亮 P1 =~LED; //灌電流驅動 while(1) { for(i=0;i<250;i++) //軟件延時 { for(j=0;j<250;j++); } if(LED==0x80) //判斷是否到最高位,如果流水到頭,則折返到最低位點亮 { LED=0x01; } else { LED=LED <<1; //移位,行程流水 } P1 =~LED; } }