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