嵌入式 | 51 单片机《手把手教你51单片机-C语言版》
一、單片機基礎知識
-  單片機的內部資源 
 這里講到的內部資源,是指作為單片機用戶,單片機提供給我們可使用的東西。總結起來,主要是三大資源:
 Flash——程序存儲空間,早期單片機是 OTPROM。
 RAM——數據存儲空間。
 SFR——特殊功能寄存器。
-  KST-51 開發板原理圖 
 單片機最小系統的三要素就是電源、晶振、復位電路,如圖 2-1 所示
 
-  電源 
 目前主流單片機的電源分為 5V 和 3.3V 這兩個標準,我們所選用的 STC89C52,它需要 5V 的供電系統,我們的開發板是使用 USB 口輸出的5V 直流直接供電的。
從圖 2-1 可以看到,供電電路在 40 腳和 20 腳的位置上, 40 腳接的是+5V,通常也稱為 VCC 或 VDD,代表的是電源正極, 20 腳接的是 GND,代表的是電源的負極。 +5V 和 GND 之間還有個電容。
數字標號代表的才是單片機真正的引腳位置。一般情況下,這種雙列直插封裝的芯片,左上角是 1 腳,逆時針旋轉引腳號依次增加,一直到右上角是最大腳位,我們現在選用的單片機一共是 40 個引腳,因此右上角就是 40(在表示芯片的方框的內部),如圖 2-2 所示,大家要分清原理圖引腳標號和實際引腳位置的區別。
-  晶振 
 晶振,又叫晶體振蕩器,通電后不停振蕩,作用是為單片機系統提供基準時鐘信號,類似于我們部隊訓練時喊口令的人,單片機內部所有的工作都是以這個時鐘信號為步調基準來進行工作的。 STC89C52 單片機的 18 腳和 19 腳是晶振引腳,我們接了一個 11.0592M 的晶振(它每秒鐘振蕩 11,059,200 次),外加兩個 20pF 的電容,電容的作用是幫助晶振起振,并維持振蕩信號的穩定。
-  復位電路 
 在圖 2-1 左側是一個復位電路,接到了單片機的 9 腳 RST(Reset)復位引腳上。單片機復位一般是 3種情況:上電復位、手動復位、程序自動復位。
- 假如我們的單片機程序有 100 行,當某一次運行到第 50 行的時候,突然停電了,這個時候單片機內部有的區域數據會丟失掉,有的區域數據可能還沒丟失。那么下次打開設備的時候,我們希望單片機能正常運行,所以上電后,單片機要進行一個內部的初始化過程,這個過程就可以理解為上電復位,上電復位保證單片機每次都從一個固定的相同的狀態開始工作。這個過程跟我們打開電腦電源開電腦的過程是一致。
- 當我們的程序運行時,如果遭受到意外干擾而導致程序死機,或者程序跑飛的時候,我們就可以按下一個復位按鍵,讓程序重新初始化重新運行,這個過程就叫做手動復位,最典型的就是我們電腦的重啟按鈕。
- 當程序死機或者跑飛的時候,我們的單片機往往有一套自動復位機制,比如看門狗,具體應用以后再了解。在這種情況下,如果程序長時間失去響應,單片機看門狗模塊會自動復位重啟單片機。還有一些情況是我們程序故意重啟復位單片機
電源、晶振、復位構成了單片機最小系統的三要素,也就是說,一個單片機具備了這三個條件,就可以運行我們下載的程序了,其他的比如 LED 小燈、數碼管、液晶等設備都是屬于單片機的外部設備,即外設。最終完成我們想要的功能就是通過對單片機編程來控制各種各樣的外設實現的。
二、點亮LED小燈
LED(light-emitting diode),即發光二極管,俗稱 LED 小燈。板子上用的是普通的貼片發光二極管。這種二極管通常的正向導通電壓是 1.8V
 到 2.2V 之間,工作電流一般在 1mA~20mA 之間。其中,當電流在 1mA~5mA 之間變化時,隨著通過 LED 的電流越來越大,我們的肉眼會明顯感覺到這個小燈越來越亮,而當電流從5mA~20mA 之間變化時,我們看到的發光二極管的亮度變化就不是太明顯了。當電流超過
 20mA 時, LED 就會有燒壞的危險了,電流越大,燒壞的也就越快。所以我們在使用過程中應該特別注意它在電流參數上的設計要求。
 
 圖 2-3 是我們開發板上的 USB 接口電路,通過 USB 線,電腦給我們的開發板供電和下載程序以及實現電腦和開發板之間的通信。
USB 座共有 6 個接口,其中 2 腳和 3 腳是數據通信引腳, 1 腳和 4 腳是電源引腳, 1 腳是 VCC 正電源, 4 腳是 GND 即地線。 5 腳和 6 腳是外殼,直接接到了 GND 上。
 
 我們現在主要來看 1 腳 VCC 和 4 腳 GND。 1 腳通過 F1(自恢復保險絲)接到右側,在正常工作的情況下,保險絲可以直接看成導線,因此左右兩邊都是 USB 電源+5V,自恢復保險絲的作用是,當你后級電路哪個地方有發生短路的時候,保險絲會自動切斷電路,保護開發板以及電腦的 USB 口,當電路正常后,保險絲會恢復暢通,正常工作。
右側有 2 條支路,第一條是在+5V 和 GND 接了一個 470uF 的電容, 電容是隔離直流的,所以這條支路是沒有電流的。我們把第二條支路摘取出來就是如圖 2-4 這個樣子
 
 發光二極管是二極管中的一種,因此和普通二極管一樣,這個二極管也有陰極和陽極,習慣上也稱之為負極和正極。原理圖里的 LED 畫成這樣方便在電路上觀察,方向必須接對了才會有電流通過讓 LED 小燈發光。剛才提到了我們接入的 VCC 電壓是 5V,發光二極管自身壓降大概是 2V,那么在右邊 R34 這個電阻上承受的電壓就是 3V。那么現在我們要求電流范圍是 1~20mA 的話,就可以根據歐姆定律 R=U/I,把這個電阻的上限和下限值求出來。
U=3V,當電流是 1mA 的時候,電阻值是 3K;當電流是 20mA 的時候,電阻值是 150歐,也就是 R34 的取值范圍是 150~3K 歐姆。這個電阻值大小的變化,直接可以限制整條通路的電流的大小,因此這個電阻我們通常稱之為“限流電阻”。在圖 2-3 中,我們用的電阻是1K,這條支路電流的大小為 3 mA。 而這個發光二極管在這里的作用,是作為電源指示燈的,使用 USB 線將開發板和電腦連起來,這個燈就會亮了。
同理,我們在板子后級開關控制的地方,又添加了一個 LED10 發光二極管,作用就是當我們打開開關時,這個二極管才會亮起,如圖 2-5 所示。
 
 這里的開關雖然只有一個,但是是 2 路的, 2 路開關并聯能更好的確保給后級提供更大的電流。電容 C19 和 C10,都是隔離斷開直流的。
下面,我們把圖 2-4 進行一下變化,把右側的 GND 去掉,改成一個單片機的 IO口,如圖 2-6 所示。
 
 圖 2-4 由于電源從正極到負極有電壓差,并且電路是導通的,所以就會有電流通過, LED小燈因為有了電流通過,所以就會直接發光。我們把右側的原 GND 處接到單片機 P0.0 引腳上,那么如果我們單片機輸出一個低電平,也就是跟 GND 一樣的 0V 電壓,就可以讓 LED小燈和圖 2-4 一樣發光了。
因為我們的單片機是可以編程控制的,我們可以讓 P0.0 這個引腳輸出一個高電平,就是跟 VCC 一樣的 5V 電壓,那么這個時候,左側 VCC 電壓和右側的 P0.0 的電壓是一致的,那就沒有電壓差,沒有電壓差就不會產生電流,沒有電流 LED 小燈就不會亮,也就是會處于熄
 滅狀態。下面,我們就用我們的編程軟件來實現控制小燈的亮和滅。
 4根地址線控制LED燈。74HC138譯碼器控制LED區域的總開關。
 ADDR0、ADDR1、ADDR2、ADDR3。
- 當地址線表示 0 時,是點陣燈管第一行。P0=0時,即00000000時,第一行全部亮。
 ADDR0=0、ADDR1=0、ADDR2=0、ADDR3=0
- 當地址線表示 1 ~ 7 時,是矩陣燈管第二行至第八行。
- 當地址線表示 8 時,是數碼管最右邊的數字區域。P0=0時,即00000000時,第一行全部亮。
 ADDR0=0、ADDR1=0、ADDR2=0、ADDR3=1
- 當地址線表示 9 ~ 13 時,是液晶管自右邊數 1 ~ 5 的數字區域。
- 當地址線表示 14 時,是發光二極管區域。P0=0時,即00000000時,第一行全部亮。
 ADDR0=0、ADDR1=1、ADDR2=1、ADDR3=1。
其中,每個單元的行可以通過控制p0的值控制小燈的亮滅。主要原理就是小燈的兩端產生電勢差,從而產生電流。
KST-51單片機
 
 點亮LED小燈代碼
總結
以上是生活随笔為你收集整理的嵌入式 | 51 单片机《手把手教你51单片机-C语言版》的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: [js] 字符串拼接有哪些方式?哪种性能
- 下一篇: [css] 使用css实现霓虹灯效果
