在項(xiàng)目中經(jīng)常會(huì)遇到單片機(jī)IO口資源不夠用的情況,那么如何讓單片機(jī)的IO口利用最大化呢,這里分享一下幾種方法。
一、如何使用1個(gè)GPIO口控制2個(gè)LED燈顯示四種狀態(tài)
1、LED的兩大特性:
1).單向?qū)щ娦?/p>
2).閾值特性:在LED兩端加壓到一定的閥值電壓后才能導(dǎo)通(材料不同,閥值電壓不同)
并聯(lián)
3、原理詳解
1).IO口為高阻態(tài)時(shí),兩個(gè)LED均熄滅
2).IO口為高電平的時(shí)候,紅色LED點(diǎn)亮
3).IO口為低電平的時(shí)候,黃色LED點(diǎn)亮
4).IO口輸出方波信號(hào)(頻率大于100Hz),兩個(gè)LED交替點(diǎn)亮,根據(jù)人眼視覺惰性,兩個(gè)燈相當(dāng)于都點(diǎn)亮
限制:電源電壓只有5V,只有部分低閥值的LED可點(diǎn)亮
解決方法:
串聯(lián)
1).IO口為高阻態(tài)時(shí),兩個(gè)LED均熄滅(兩個(gè)LED導(dǎo)通所需電壓大于電源電壓)
2).IO口為高電平的時(shí)候,藍(lán)色LED點(diǎn)亮
3).IO口為低電平的時(shí)候,綠色LED點(diǎn)亮
4).IO口輸出方波信號(hào)(頻率大于100Hz),兩個(gè)LED交替點(diǎn)亮,根據(jù)人眼視覺惰性,兩個(gè)燈相當(dāng)于都點(diǎn)亮
總結(jié):當(dāng)兩個(gè)LED導(dǎo)通電壓大于電源電壓時(shí),串聯(lián)
當(dāng)兩個(gè)LED導(dǎo)通電壓小于電源電壓時(shí),并聯(lián)
LED燈驅(qū)動(dòng)
使用NPN和PNP三極管
如果是一個(gè)IO口,IO口驅(qū)動(dòng)電流很小??刂苾蓚€(gè)LED燈時(shí)不能同時(shí)發(fā)光也就是一個(gè)發(fā)光一個(gè)不發(fā)光,則可以使用如下電路;兩個(gè)三極管一個(gè)NPN一個(gè)PNP來實(shí)現(xiàn)LED燈控制。
使用NPN和NPN
如果是一個(gè)IO口,IO口驅(qū)動(dòng)電流很小??刂苾蓚€(gè)LED燈時(shí)不能同時(shí)發(fā)光也就是一個(gè)發(fā)光一個(gè)不發(fā)光,則可以使用如下電路;兩個(gè)三極管都是NPN三極管,因?yàn)镹PN從集電極拿出來信號(hào),剛好是和基極信號(hào)相位相反的。
直接驅(qū)動(dòng)無需放大
如上所示,LED燈直接可以用IO口驅(qū)動(dòng),此時(shí)一個(gè)接成IO口上拉的形式;一個(gè)接成IO口下拉的形式,此時(shí)IO口高低狀態(tài)會(huì)驅(qū)動(dòng)不同顏色的了的LED燈發(fā)光。
兩個(gè)NPN使用兩個(gè)IO口
IO口無法驅(qū)動(dòng)而且需要使用兩種不同顏色的LED燈時(shí),我們可以直接使用兩個(gè)NPN三極管來驅(qū)動(dòng);當(dāng)然也可以使用PNP三極管。
以上兩種燈需要交替亮起來一般很常見,例如系統(tǒng)正常工作時(shí)需要紅色指示燈亮起來,但是待機(jī)時(shí),需要綠色指示燈亮起來。
請(qǐng)注意紅色、綠色、藍(lán)色LED燈除了顏色不一致,正常發(fā)光時(shí)的壓降也是不一致的;如下所示:
紅色:1.6~2.0V
綠色:2.2~2.5V
藍(lán)色:2.5~3.1V
小知識(shí):2014年諾貝爾物理學(xué)獎(jiǎng),被授予日本名古屋大學(xué)、名城大學(xué)教授赤崎勇,名古屋大學(xué)教授天野浩,以及美國加州大學(xué)圣芭芭拉分校教授、美籍日裔科學(xué)家中村修二,以表彰他們發(fā)明了藍(lán)色發(fā)光二極管(LED),并因此帶來的新型節(jié)能光源?
二、如何使用兩個(gè)IO口控制三個(gè)LED燈
方法一:
S1和S2分別接單片機(jī)兩個(gè)IO口,這里通過一個(gè)單刀雙擲按鍵模擬IO口輸出高低電平。
S1和S2同時(shí)為低電平時(shí),LED燈全滅。
S1為低電平,S2為高電平時(shí),LED2亮。
S1為高電平,S2為低電平時(shí),LED3亮。
S1為高電平,S2為高電平時(shí),LED1亮。
方法二:
S3和S4分別接單片機(jī)兩個(gè)IO口,這里通過一個(gè)單刀雙擲按鍵模擬IO口輸出高低電平。
S3和S4同時(shí)為低電平時(shí),LED4亮。
S3為低電平,S4為高電平時(shí),LED6亮。
S3為高電平,S4為低電平時(shí),LED5亮。
S3為高電平,S4為高電平時(shí),LED5、LED6同時(shí)亮。
方法三:
S1和S2分別接單片機(jī)兩個(gè)IO口,這里通過一個(gè)單刀雙擲按鍵模擬IO口輸出高低電平。
S1和S2同時(shí)為低電平時(shí),LED燈全滅。
S1為低電平,S2為高電平時(shí),LED3亮。
S1為高電平,S2為低電平時(shí),LED2亮。
S1為高電平,S2為高電平時(shí),LED1亮。
方法四:
S3和S4分別接單片機(jī)兩個(gè)IO口,這里通過一個(gè)單刀雙擲按鍵模擬IO口輸出高低電平。
S3和S4同時(shí)為低電平時(shí),LED燈全滅。
S3為低電平,S4為高電平時(shí),LED6亮。
S3為高電平,S4為低電平時(shí),LED5亮。
S3為高電平,S4為高電平時(shí),LED4亮。
通過兩個(gè)IO口的高低電平4種組合方式,結(jié)合外部電路就可以控制3個(gè)LED燈的亮滅。
三、如何用3個(gè)IO口控制6個(gè)LED燈
這個(gè)電路用到了單片機(jī)GPIO的三種狀態(tài):高電平 低電平 高阻態(tài)
所謂“高阻態(tài)”,是指GPIO對(duì)外部電路表現(xiàn)出極大的阻抗。因阻抗很大,幾乎不會(huì)吸入電流,也不會(huì)對(duì)外輸出電流。
各個(gè)LED燈單獨(dú)亮起,分為六種情況。
1、當(dāng)只有LED1亮起時(shí),單片機(jī)各GPIO的狀態(tài)如下:(帶箭頭的紅線為電流回路)
2、當(dāng)只有LED2亮起時(shí),單片機(jī)各GPIO的狀態(tài)如下:
3、當(dāng)只有LED3亮起時(shí),單片機(jī)各GPIO的狀態(tài)如下:
4、當(dāng)只有LED4亮起時(shí),單片機(jī)各GPIO的狀態(tài)如下:
5、當(dāng)只有LED5亮起時(shí),單片機(jī)各GPIO的狀態(tài)如下:
6、當(dāng)只有LED6亮起時(shí),單片機(jī)各GPIO的狀態(tài)如下:
整理如下:
就是這么簡(jiǎn)單!
使用該方法,n個(gè)GPIO可以驅(qū)動(dòng) n*(n-1) 個(gè)LED,所以:
使用2個(gè)GPIO可以驅(qū)動(dòng)2個(gè)LED。
使用3個(gè)GPIO可以驅(qū)動(dòng)6個(gè)LED。
使用4個(gè)GPIO可以驅(qū)動(dòng)12個(gè)LED。
以此類推。
這種方式能夠?qū)崿F(xiàn)的基礎(chǔ)是:
單片機(jī)GPIO的三個(gè)狀態(tài):高電平、低電平、高阻態(tài)。
LED具有單向?qū)щ娦浴?/p>
查理復(fù)用設(shè)計(jì)的方法:
任意兩個(gè)GPIO引腳之間串入兩個(gè)LED,這兩個(gè)LED為并聯(lián),且LED方向相反。
當(dāng)你想要點(diǎn)亮某個(gè)特定的LED時(shí),就將其兩端所連接到的GPIO引腳分別設(shè)定為高電平和低電平,其它剩余的GPIO引腳設(shè)定為高阻態(tài)。
下面從最簡(jiǎn)單的開始,一步一步體會(huì)查理復(fù)用的電路設(shè)計(jì)。
1、使用2個(gè)GPIO時(shí)最簡(jiǎn)單:
LED1亮起時(shí):
LED2亮起時(shí):
這里只用到高電平、低電平的狀態(tài),不需要用高阻態(tài)的狀態(tài)。
2、使用3個(gè)GPIO時(shí),前面已經(jīng)分析過:
可以等效為下圖:
可以看出,確實(shí)是任意兩個(gè)GPIO之間均串入了兩個(gè)并聯(lián)的LED,且LED方向相反。
查理復(fù)用這樣的電路接法也會(huì)引發(fā)一些問題。
首先,LED亮起時(shí)完全由單片機(jī)的GPIO輸出電流,所以對(duì)于GPIO的電流驅(qū)動(dòng)能力有一定的要求。設(shè)計(jì)電路時(shí)要注意查詢自己使用的MCU的電流驅(qū)動(dòng)能力,下圖是STM32單片機(jī)中對(duì)GPIO電流驅(qū)動(dòng)能力的說明:
其次,如果出現(xiàn)了某個(gè)LED開路或短路的情況,電流的流向會(huì)被打亂,LED亮起來的邏輯會(huì)變得錯(cuò)亂。最壞的情況下,電路會(huì)對(duì)GPIO索取大電流,導(dǎo)致單片機(jī)損壞。下圖是假設(shè)LED1短路,那么在點(diǎn)亮LED5時(shí),LED3也會(huì)亮起:
審核編輯:黃飛
?
評(píng)論