0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

怎么做到用3個(gè)IO口控制6個(gè)LED燈的?

GReq_mcu168 ? 來(lái)源:電路啊 ? 作者:電路啊 ? 2021-05-13 11:18 ? 次閱讀

7909e236-b328-11eb-bf61-12bb97331649.png

▲本文要分析的電路

事情是這樣開(kāi)始的。 買(mǎi)了個(gè)電動(dòng)牙刷,幾十塊錢(qián)那種:

收到的實(shí)物長(zhǎng)這樣:

牙刷手柄上有1個(gè)按鍵和6個(gè)LED

拆開(kāi)看看電路板:

可以看出,電路板上用的單片機(jī),只有8個(gè)腳,卻要控制1個(gè)按鍵、6個(gè)LED燈、1個(gè)震動(dòng)的馬達(dá)電機(jī)

初看之下,GPIO應(yīng)該是不夠用的。 單片機(jī)除去電源腳(正極)和GND腳(負(fù)極),只剩最多6個(gè)GPIO腳。 那么是怎么做到夠用的? 原來(lái),經(jīng)過(guò)巧妙的電路設(shè)計(jì),這款電動(dòng)牙刷實(shí)現(xiàn)了用3個(gè)GPIO控制6個(gè)LED燈,節(jié)省了GPIO。

這個(gè)巧妙的電路如下:

7909e236-b328-11eb-bf61-12bb97331649.png

6個(gè)LED燈為相同的型號(hào),為方便查看,用紅綠兩種顏色區(qū)分兩種不同的方向。 一、原理分析 這個(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)如下:(帶箭頭的紅線為電流回路)

7c0332da-b328-11eb-bf61-12bb97331649.png

2、當(dāng)只有LED2亮起時(shí),單片機(jī)各GPIO的狀態(tài)如下:

7c36faf2-b328-11eb-bf61-12bb97331649.png

3、當(dāng)只有LED3亮起時(shí),單片機(jī)各GPIO的狀態(tài)如下:

7c438ae2-b328-11eb-bf61-12bb97331649.png

4、當(dāng)只有LED4亮起時(shí),單片機(jī)各GPIO的狀態(tài)如下:

7c5179ea-b328-11eb-bf61-12bb97331649.png

5、當(dāng)只有LED5亮起時(shí),單片機(jī)各GPIO的狀態(tài)如下:

7c773efa-b328-11eb-bf61-12bb97331649.png

6、當(dāng)只有LED6亮起時(shí),單片機(jī)各GPIO的狀態(tài)如下:

7cb4fc36-b328-11eb-bf61-12bb97331649.png

整理如下:

7ce6930e-b328-11eb-bf61-12bb97331649.png

就是這么簡(jiǎn)單! 二、總結(jié)提升 以上其實(shí)是用了一種叫“查理復(fù)用”(Charlieplex)的方法。 為什么叫查理復(fù)用?

很簡(jiǎn)單,因?yàn)檫@個(gè)方法來(lái)源于美信半導(dǎo)體公司工程師Charlie Allen。

查理復(fù)用是一種能夠在驅(qū)動(dòng)LED,特別是驅(qū)動(dòng)大量LED時(shí)有效地節(jié)約GPIO的方法。 使用該方法,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。

以此類(lèi)推。

這種方式能夠?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)。

前面電動(dòng)牙刷中6個(gè)LED燈的電路,就是這么設(shè)計(jì)的。

下面從最簡(jiǎn)單的開(kāi)始,一步一步體會(huì)查理復(fù)用的電路設(shè)計(jì)。 1、使用2個(gè)GPIO時(shí)最簡(jiǎn)單:

7d1c3040-b328-11eb-bf61-12bb97331649.png

LED1亮起時(shí):

7d4cc8b8-b328-11eb-bf61-12bb97331649.png

LED2亮起時(shí):

7d69915a-b328-11eb-bf61-12bb97331649.png

這里只用到高電平、低電平的狀態(tài),不需要用高阻態(tài)的狀態(tài)。 2、使用3個(gè)GPIO時(shí),前面已經(jīng)分析過(guò):

7909e236-b328-11eb-bf61-12bb97331649.png

可以等效為下圖:

7d9b361a-b328-11eb-bf61-12bb97331649.png

可以看出,確實(shí)是任意兩個(gè)GPIO之間均串入了兩個(gè)并聯(lián)的LED,且LED方向相反。 3、同樣的原理,使用4個(gè)GPIO時(shí):

7da60fc2-b328-11eb-bf61-12bb97331649.png

點(diǎn)亮LED1時(shí):

7db59be0-b328-11eb-bf61-12bb97331649.png

其他LED亮起的情況不再列舉。 查理復(fù)用這樣的電路接法也會(huì)引發(fā)一些問(wèn)題。 首先,LED亮起時(shí)完全由單片機(jī)的GPIO輸出電流,所以對(duì)于GPIO的電流驅(qū)動(dòng)能力有一定的要求。設(shè)計(jì)電路時(shí)要注意查詢(xún)自己使用的MCU的電流驅(qū)動(dòng)能力,下圖是STM32單片機(jī)中對(duì)GPIO電流驅(qū)動(dòng)能力的說(shuō)明:

7dc47520-b328-11eb-bf61-12bb97331649.png

其次,如果出現(xiàn)了某個(gè)LED開(kāi)路或短路的情況,電流的流向會(huì)被打亂,LED亮起來(lái)的邏輯會(huì)變得錯(cuò)亂。最壞的情況下,電路會(huì)對(duì)GPIO索取大電流,導(dǎo)致單片機(jī)損壞。下圖是假設(shè)LED1短路,那么在點(diǎn)亮LED5時(shí),LED3也會(huì)亮起:

7df06996-b328-11eb-bf61-12bb97331649.png

三、繼續(xù)進(jìn)階

如果要同時(shí)亮起兩個(gè)以上的LED,怎么辦?

交替點(diǎn)亮他們就行,只要交替切換的速度夠快,由于人眼的視覺(jué)暫留效應(yīng),看起來(lái)就是同時(shí)亮起的。

值得一提的是,如果要同時(shí)亮起的LED較多,比如大規(guī)模的LED點(diǎn)陣,那么還要注意一些新的問(wèn)題,頗有門(mén)道。

本文不再展開(kāi),感興趣的讀者可以自行查詢(xún)修煉,繼續(xù)進(jìn)階。

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • led
    led
    +關(guān)注

    關(guān)注

    240

    文章

    22907

    瀏覽量

    650138
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6023

    文章

    44376

    瀏覽量

    628427
  • 電流
    +關(guān)注

    關(guān)注

    40

    文章

    6502

    瀏覽量

    131115
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1175

    瀏覽量

    51515

原文標(biāo)題:用3個(gè)IO口控制6個(gè)LED燈,怎么做到的?

文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    問(wèn)一下一個(gè)單片機(jī)的io分別控制個(gè)板該怎么設(shè)計(jì)電路?

    各位大佬,我想問(wèn)一下一個(gè)單片機(jī)的io分別控制個(gè)板該怎么設(shè)計(jì)電路,每個(gè)
    發(fā)表于 07-15 19:03

    請(qǐng)問(wèn)esp32的io怎么做的ns的延時(shí)控制?

    之前stm32都是自己NOP();語(yǔ)句拼湊出來(lái)的ns級(jí)延時(shí),esp32是freertos任務(wù)會(huì)切換,想做到ns延時(shí)要怎么做?請(qǐng)大佬指點(diǎn)一下,謝謝!
    發(fā)表于 06-21 07:43

    個(gè)STM32的IO連接到一起,其中一個(gè)IO被燒壞的原因?

    如題:兩個(gè)STM32的IO連接到一起,一個(gè)單片機(jī)IO設(shè)置為輸出模式(發(fā)送數(shù)據(jù)),另一個(gè)設(shè)置為外
    發(fā)表于 04-24 07:53

    STM32配置IO的頻率時(shí),為什么只給一個(gè)IO配置?

    配置IO的頻率時(shí),為什么只給一個(gè)IO配置?
    發(fā)表于 04-07 08:43

    個(gè)簡(jiǎn)單的無(wú)線LED電路

    這篇文章解釋了一個(gè)簡(jiǎn)單的無(wú)線 LED 電路,可用于在夜間自動(dòng)打開(kāi) LED 以照亮繪畫(huà)。室內(nèi)
    的頭像 發(fā)表于 02-25 14:03 ?933次閱讀
    一<b class='flag-5'>個(gè)</b>簡(jiǎn)單的無(wú)線<b class='flag-5'>LED</b><b class='flag-5'>燈</b>電路

    求購(gòu)兩個(gè)LED呼吸控制

    某寶某多買(mǎi)了幾個(gè)控制器發(fā)現(xiàn)LED的亮度變化在低占空比的時(shí)候,變化很明顯,而在高占空比的時(shí)候反而變化很小,導(dǎo)致呼吸表現(xiàn)呼吸不均勻的現(xiàn)象,我想要的是控制器能
    發(fā)表于 01-31 21:54

    能否使用普通IO模擬PWM波?該怎么做?

    能否使用普通IO模擬PWM波?該怎么做? 使用普通IO模擬PWM波是一種常見(jiàn)的嵌入式系統(tǒng)應(yīng)用技術(shù),它通過(guò)
    的頭像 發(fā)表于 01-15 14:43 ?4375次閱讀

    STM32按鍵控制LED的亮滅

    使用一個(gè)按鍵控制LED的亮滅,按鍵按下時(shí)LED亮起,按鍵松開(kāi)時(shí)LED熄滅。通過(guò)按鍵控制實(shí)驗(yàn)來(lái)介紹
    的頭像 發(fā)表于 12-11 14:19 ?3103次閱讀
    STM32按鍵<b class='flag-5'>控制</b><b class='flag-5'>LED</b>的亮滅

    6個(gè)萬(wàn)兆光+24個(gè)千兆光+24個(gè)千兆以太網(wǎng)電機(jī)架式三層網(wǎng)管工業(yè)以太網(wǎng)交換機(jī)

    +48個(gè)千兆以太網(wǎng)電;(2)6個(gè)萬(wàn)兆光+8個(gè)千兆光
    的頭像 發(fā)表于 11-21 09:11 ?934次閱讀
    <b class='flag-5'>6</b><b class='flag-5'>個(gè)</b>萬(wàn)兆光<b class='flag-5'>口</b>+24<b class='flag-5'>個(gè)</b>千兆光<b class='flag-5'>口</b>+24<b class='flag-5'>個(gè)</b>千兆以太網(wǎng)電<b class='flag-5'>口</b>機(jī)架式三層網(wǎng)管工業(yè)以太網(wǎng)交換機(jī)

    你見(jiàn)過(guò)有四個(gè)管腳的LED嗎?

    普通的發(fā)光二極管(LED)只有兩個(gè)管腳,一個(gè)長(zhǎng)腳一個(gè)短腳
    的頭像 發(fā)表于 11-13 16:30 ?1597次閱讀
    你見(jiàn)過(guò)有四<b class='flag-5'>個(gè)</b>管腳的<b class='flag-5'>LED</b><b class='flag-5'>燈</b>嗎?

    基于51單片機(jī)點(diǎn)亮一個(gè)LED(二)

    前面學(xué)習(xí)完怎么對(duì)單片機(jī)的一個(gè)IO的高低電平的控制,并且成功點(diǎn)亮了LED,接下來(lái)學(xué)習(xí)一下流水燈的寫(xiě)法。
    的頭像 發(fā)表于 11-01 11:47 ?737次閱讀
    基于51單片機(jī)點(diǎn)亮一<b class='flag-5'>個(gè)</b><b class='flag-5'>LED</b><b class='flag-5'>燈</b>(二)

    基于51單片機(jī)點(diǎn)亮一個(gè)LED(一)

    不論學(xué)習(xí)什么單片機(jī),最簡(jiǎn)單的外設(shè)莫過(guò)于IO的高低電平控制。而對(duì)于一個(gè)IO的高低電平
    的頭像 發(fā)表于 11-01 11:44 ?2863次閱讀
    基于51單片機(jī)點(diǎn)亮一<b class='flag-5'>個(gè)</b><b class='flag-5'>LED</b><b class='flag-5'>燈</b>(一)

    LED與數(shù)碼管還有矩陣在同一個(gè)IO,并且同時(shí)亮如何關(guān)閉?

    LED與數(shù)碼管還有矩陣在同一個(gè)IO,并且同時(shí)亮。 如何將其中
    發(fā)表于 10-26 06:11

    單片機(jī)的IO不夠用了怎么辦?如何擴(kuò)展單片機(jī)的IO?

    是有限的,當(dāng)我們面對(duì)復(fù)雜的控制任務(wù)時(shí),如何擴(kuò)展單片機(jī)的IO就成為了一個(gè)非常重要的問(wèn)題。本文將向您介紹如何通過(guò)某些硬件或軟件手段來(lái)擴(kuò)展單片機(jī)的IO
    的頭像 發(fā)表于 10-24 11:49 ?6514次閱讀

    c51單片機(jī)如何同時(shí)點(diǎn)亮40個(gè)LED?

    c51單片機(jī)如何同時(shí)點(diǎn)亮40個(gè)LED?io不夠啊
    發(fā)表于 10-18 06:38