用單片機來點亮LED,這幾乎是每個同學學習單片機的第一個實驗。那么誰來點,怎么亮?注意這里面涉及到兩個研究對象,單片機和LED。要想知道單片機如何來點,先要知道LED為什么亮。這種由分析被控制對象來研究控制對象的思路在本教程后面會反復用到,這里先提出來亮個相。我們先來看LED為什么會亮,也就是說先來了解LED的工作原理。當有電流通過時(達到一定值比如5mA), LED便會發光。至于進一步的發光的工作原理我們不去追究,有興趣的可以自己查查,不屬于我們討論的內容。根據這個原理,我們只需要給LED正極接在5V電源下,LED負極接地,如圖1所示,產生電勢差,正向導通,那么LED有電流通過,就發光了。
?圖1點亮LED,由于電流過高,LED很快熄滅
但是LED會很快熄滅,為什么?假設LED正向導通時兩端壓價約為2.2V,那么剩余的壓降(5-2.2)V會施加在導線上,電阻幾乎為0,根據歐姆定律,電流無窮大,LED很快被燒掉。因此我們需要給這個電路加個限流電阻,這個限流電阻應該取多大,同樣假設LED正向導通的壓價約為2.2V(具體查閱LED廠家提供的參數),電源電壓為5V,電流設定為5mA,根據歐姆定律就能算出限流電阻為560R。計算過程如下
R1兩端的電壓等于電源電壓減去LED電壓降,電流I取5mA,這樣可以計算出電阻R1為560歐姆。這樣LED就能持續發光了,如圖2所示。
圖2串聯一個電阻R1,其阻值為560歐姆,此時LED正常發光
那么LED怎么熄滅呢?沒有電流通過就可以了。如何實現沒有電流?LED兩邊等電勢就行了。因此只需要在LED左邊提供一個高電平5V,LED就熄滅了,如圖3所示
圖3LED兩邊等勢,LED熄滅
以上我們完成了對LED的分析。前面說了,我們要通過分析被控制對象(LED)來操作控制對象(MCU).下面再來分析,如何操作控制對象?首先要知道MCU是什么?根據定義,MCU是具有一定可編程能力的數字電路集合體。那么什么叫做可編程呢?通俗的講,就是根據人給單片機的不同指令去執行不同的任務。那這樣就好辦了,如下圖所示,LED左邊接在了MCU的P1.0引腳。根據前面的分析,只要跟MCU講:”把你的P1.0引腳輸出低電平“,(假設這里我們的單片機輸出高電平是5V,低電平是0V。因為有的單片機高電平為3.3V)。這時候LED就點亮了,如果輸出高電平,LED就熄滅了,這樣就實現了單片機對LED的控制,如圖4所示。
圖4單片機實現對LED點亮和熄滅的控制
你使用人類語言與單片機交流,單片機是聽不懂的。因此你對單片機發送的指令他是聽不懂的。那么單片機聽的懂什么語言?我們知道單片機只認識0和1.那么我們馬上想到用0和1來和單片機對話,這當然可以。其實早期的程序就是直接寫0和1的(www.ppptalk.com)。可是這樣做對程序員來說太痛苦了,單片機是認識了,程序員卻暈倒了。不信的話,你自己在一張A4的紙上填滿0和1,姑且不論什么含義,看著就暈倒了。這樣就產生了一個問題,用人類語言,單片機聽不懂,用單片機的語言,人類使用不方便。因此就各退一步,來個折中吧。用什么呢,C語言(早期是匯編,我們以后再談),既像機器語言又帶有人類語言的味道。這樣我們就先把人類語言轉成C語言,然后再按照一定的規則把C語言轉成機器語言,從而實現人與機器的交流。因此簡單來講,就是把人的語言(或者說指令)先翻譯成C語言,然后進一步翻譯成機器語言(或者機器指令)。那么這個指令如何傳送給單片機呢,這個過程就叫程序燒寫,或者程序下載,燒寫過程中用到的工具就是燒寫器。把機器指令輸送到單片機,上電后,單片機就開始執行這個指令,從而到達我們控制器件的目的。其過程如下所示::
圖5單片機開發環境搭建流程圖。一共包括三個過程,STEP1-把人的指令翻譯成C語言,STEP2-把C語言進一步翻譯(編譯)成機器語言,STEP3-把機器語言傳送給單片機,從而實現對單片機的控制
以上這個例子非常簡單,但是給出了單片機開發的基本流程。我們來梳理一下這個過程(叁議電子)。首先我們要知道工作器件的原理。注意工作器件是我們最終的目的,比如控制led的目的是用來照明或者指示作用;控制溫度傳感器的目的是為了測量溫度;控制液晶模塊的目的是為了要顯示特定的內容等等。單片機只是達到最終目的的手段或者途徑。因此用單片機來控制工作器件,一開始就要理解工作器件是如何工作的。然后在這個基礎上,根據工作器件的需要對單片機傳遞不同的指令(人類語言)。但是單片機是看不懂人類指令的,因此需要翻譯成單片機看得懂的語言,然后把翻譯的結果傳送給單片機
對于STC89C52RC單片機,編輯和編譯指令采用的是KEIL軟件,下載程序(燒寫指令)采用STC_ISP(宏晶)。因此簡單來講,對于STC89C52RC單片機搭建開發環境,就是安裝這個兩個軟件(KEIL和STC_ISP)
前面羅嗦了這么多,主要是為初學者講解了單片機開發的初步思想以及單片機開發環境的搭建。主要總結如下兩點:
1.從被控制對象入手來研究如何操作控制對象。所謂被控制對象其實就是我們想要使用的外圍工作器件,他可以是LED,也可以是溫度傳感器,步進電機等等,是我們的最終目的,比如讓LED閃爍,測量溫度,控制轉速等等。如何了解他們的工作原理,最好的方式就是閱讀廠家提供的說明資料。對于控制對象(單片機),這個也很多,51,MSP430,AVR,PIC等等,如何與他們對話,同樣的道理,查看芯片手冊(也是官方資料)。
2.了解這兩個對象之間的關系后,我們就開始搭建單片機開發環境,編寫指令,編譯指令,最后燒寫指令。
補充內容:發光二極管的導通壓降
發光二極管導通后的壓降基本穩定在1.2~2V左右,隨著電壓的升高壓降略有升高
對于直插發光二極管壓降
主要有三種顏色,這三種顏色的壓降都不相同,具體壓降參考值如下:
紅色發光二極管的壓降為2.0~2.2V
黃色發光二極管的壓降為1.8~2.0V
綠色發光二極管的壓降為3.0~3.2V
直插型發光二極管正常發光時的額定電流約為20mA
對于貼片發光二極管壓降:
紅色發光二極管壓降為1.82~1.88V,額定電流5-8mA
綠色發光二極管壓降為1.75~1.82V,額定電流3-5mA
橙色發光二極管壓降為1.7~1.8V,額定電流3-5mA
藍色發光二極管壓降為3.1~3.3V,額定電流8-10mA
這里列出這些參數,主要給大家一個簡單的印象,在具體項目中要查看使用的發光二極管廠家提供的參數。