在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何在Arduino上使用八個大型紅色LED而不需要放棄8個輸出引腳

454398 ? 來源:網絡整理 ? 作者:網絡整理 ? 2019-11-27 16:21 ? 次閱讀

概述

在本課程中,您將學習如何在Arduino上使用八個大型紅色LED而不需要放棄8個輸出引腳!

如何在Arduino上使用八個大型紅色LED而不需要放棄8個輸出引腳

盡管您可以將八個LED分別連接一個Arduino引腳上的電阻(就像我們在第2課中對RGB LED所做的那樣),您很快就會開始用盡Arduino上的引腳。如果您沒有與duino連接的東西很多,則可以這樣做-但通常我們需要按鈕,傳感器,伺服器等,在您不知道它的情況下,您就沒有管腳了。因此,您將使用名為 74HC595串行到并行轉換器的芯片,而不是這樣做。該芯片具有八個輸出(完美)和三個輸入,可用于一次將數據饋入其中。

該芯片使驅動LED的速度稍慢一些(您每秒只能將LED更換大約500,000次,而不是每秒8,000,000次),但它的確非??欤热祟惪梢詸z測到的速度還要快,所以值得!

零件

要構建本課中描述的項目,您將需要以下零件。

零件 數量

5mm紅色LED 8

270電阻(紅色,紫色,棕色條紋) 8

74HC595移位寄存器

1

半面包板 1

Arduino Uno R3 1

跳線束 1

面包板布局

由于我們要連接八個LED和八個電阻,因此實際上需要進行很多連接。

將74HC595芯片放在第一位可能是最容易的,因為幾乎所有其他東西都可以連接對此。如此放置,以使小U形槽口朝向面包板的頂部。芯片的引腳1位于該凹口的左側。

arduino的數字4進入移位寄存器的引腳14

arduino的數字5進入移位寄存器的引腳12

來自arduino的數字6進入移位寄存器的#11引腳

除了‘595的所有輸出之一,所有輸出都位于芯片的左側,因此,為了便于連接,

在芯片之后,將電阻器放置到位。您需要小心,不要使電阻的引線相互接觸。在將電源連接到Arduino之前,應該再次檢查這一點。如果發現很難在不接觸引線的情況下布置電阻器,則有助于縮短引線,使其更靠近面包板的表面。然后,將LED放在面包板上。

更長的正極LED引線必須全部朝向芯片,無論面包板位于面包板的哪一側。

現在僅需連接跳線,如上所示。不要忘了從IC的引腳8到面包板GND列的引腳。

稍后加載列出的草圖并嘗試一下。每個LED都應依次點亮,直到所有LED都點亮,然后它們都熄滅并重復該循環。

74HC595移位寄存器

在閱讀代碼之前,讓我們快速看一下芯片的功能,以便我們可以理解代碼的功能。

該芯片屬于一種移位寄存器。

移位寄存器可保存八個存儲單元,每個存儲單元可以是1或0。

設置每個存儲單元這些值的開或關,我們使用芯片的“數據”和“時鐘”引腳輸入數據。

時鐘引腳需要接收八個脈沖。在每個脈沖時,如果數據引腳為高電平,則將1壓入移位寄存器。否則,它為0。當接收到所有八個脈沖時,然后啟用“鎖存”引腳會將這八個值復制到鎖存寄存器。這是必要的,否則當將數據加載到移位寄存器中時,錯誤的LED會閃爍。該芯片還具有OE(輸出使能)引腳,該引腳用于一次啟用或禁用所有輸出。您可以將其連接到具有PWM功能的Arduino引腳,并使用“ analogWrite”控制LED的亮度。該引腳為低電平有效,因此我們將其連接至GND。

Arduino代碼

Arduino包含一個名為“ shiftOut”的特殊功能,該功能專門用于將數據發送到移位寄存器。

這是完整的草圖,

下載:文件

復制代碼

/*

Adafruit Arduino - Lesson 4. 8 LEDs and a Shift Register

*/

int latchPin = 5;

int clockPin = 6;

int dataPin = 4;

byte leds = 0;

void setup()

{

pinMode(latchPin, OUTPUT);

pinMode(dataPin, OUTPUT);

pinMode(clockPin, OUTPUT);

}

void loop()

{

leds = 0;

updateShiftRegister();

delay(500);

for (int i = 0; i 《 8; i++)

{

bitSet(leds, i);

updateShiftRegister();

delay(500);

}

}

void updateShiftRegister()

{

digitalWrite(latchPin, LOW);

shiftOut(dataPin, clockPin, LSBFIRST, leds);

digitalWrite(latchPin, HIGH);

} /*

Adafruit Arduino - Lesson 4. 8 LEDs and a Shift Register

*/

int latchPin = 5;

int clockPin = 6;

int dataPin = 4;

byte leds = 0;

void setup()

{

pinMode(latchPin, OUTPUT);

pinMode(dataPin, OUTPUT);

pinMode(clockPin, OUTPUT);

}

void loop()

{

leds = 0;

updateShiftRegister();

delay(500);

for (int i = 0; i 《 8; i++)

{

bitSet(leds, i);

updateShiftRegister();

delay(500);

}

}

void updateShiftRegister()

{

digitalWrite(latchPin, LOW);

shiftOut(dataPin, clockPin, LSBFIRST, leds);

digitalWrite(latchPin, HIGH);

}

我們要做的第一件事是定義將要使用的三個引腳。這些是Arduino數字輸出,將連接到74HC595的鎖存器,時鐘和數據引腳。

下載:file

復制代碼

int latchPin = 5;

int clockPin = 6;

int dataPin = 4; int latchPin = 5;

int clockPin = 6;

int dataPin = 4;

接下來,定義了一個名為“ leds”的變量。這將用于保持當前打開或關閉LED的模式。 “字節”類型的數據表示使用八位數字。每個位都可以打開或關閉,因此非常適合跟蹤我們八個LED中的哪個打開或關閉。

下載:文件

復制代碼

byte leds = 0; byte leds = 0;

“設置”功能僅設置了我們正在使用的三個引腳

下載:文件

復制代碼

void setup()

{

pinMode(latchPin, OUTPUT);

pinMode(dataPin, OUTPUT);

pinMode(clockPin, OUTPUT);

} void setup()

{

pinMode(latchPin, OUTPUT);

pinMode(dataPin, OUTPUT);

pinMode(clockPin, OUTPUT);

}

“循環”功能最初通過將變量“ leds”的值設置為0來關閉所有LED。然后調用“ updateShiftRegister”發送“ leds” ’模式到移位寄存器,以便所有LED熄滅。稍后我們將處理‘updateShiftRegister’的工作方式。

循環功能暫停半秒鐘,然后使用‘for’循環和變量‘i’從0到7開始計數。每次,它使用Arduino函數‘bitSet’來設置控制變量‘leds’中的LED的位。然后它還會調用‘updateShiftRegister’,以便leds更新以反映變量‘leds’中的內容。

然后,在‘i’遞增之前,有半秒的延遲,下一個LED點亮。

下載:文件

復制代碼

void loop()

{

leds = 0;

updateShiftRegister();

delay(500);

for (int i = 0; i 《 8; i++)

{

bitSet(leds, i);

updateShiftRegister();

delay(500);

}

} void loop()

{

leds = 0;

updateShiftRegister();

delay(500);

for (int i = 0; i 《 8; i++)

{

bitSet(leds, i);

updateShiftRegister();

delay(500);

}

}

函數‘updateShiftRegister’首先將LatchPin設置為低電平,然后在再次將‘latchPin’置于高電平之前調用Arduino函數‘shiftOut’。它有四個參數,前兩個是分別用于數據和時鐘的引腳。

第三個參數指定要從哪個數據端開始。我們將從最右邊的位開始,這就是所謂的“最低有效位”(LSB)。

最后一個參數是要移入移位寄存器的實際數據。

下載:文件

復制代碼

void updateShiftRegister()

{

digitalWrite(latchPin, LOW);

shiftOut(dataPin, clockPin, LSBFIRST, leds);

digitalWrite(latchPin, HIGH);

} void updateShiftRegister()

{

digitalWrite(latchPin, LOW);

shiftOut(dataPin, clockPin, LSBFIRST, leds);

digitalWrite(latchPin, HIGH);

}

如果要關閉而不是打開LED之一,則可以在“ leds”變量上調用類似的Arduino函數(bitClear) 。這會將“ leds”的位設置為0,然后您只需跟隨它調用“ updateShiftRegister”即可更新實際的LED。

亮度控制

我未提到的74HC595的一個引腳是稱為“輸出使能”的引腳。這是針腳13,在面包板上,它永久接地。該引腳用作開關,可以啟用或禁用輸出-唯一需要注意的是它是“低電平有效”(接地以啟用)。因此,如果將其連接到5V,則所有輸出均關閉。而如果將其接地,則應該打開的那些輸出打開,應該關閉的那些輸出關閉。

我們可以將此引腳與“ analogWrite”功能一起使用,我們在第3課中使用了該功能。 ,以使用PWM控制LED的亮度(另請參閱第3課)。

要做的是,更改與74HC595引腳13的連接,以代替將其接地,將其連接到Arduino的引腳3。

下面的草圖將在所有LED點亮后逐漸將它們逐漸熄滅。

下載:文件

復制代碼

/*

Adafruit Arduino - Lesson 4. 8 LEDs and a Shift Register - Brightness

*/

int latchPin = 5;

int clockPin = 6;

int dataPin = 4;

int outputEnablePin = 3;

byte leds = 0;

void setup()

{

pinMode(latchPin, OUTPUT);

pinMode(dataPin, OUTPUT);

pinMode(clockPin, OUTPUT);

pinMode(outputEnablePin, OUTPUT);

}

void loop()

{

setBrightness(255);

leds = 0;

updateShiftRegister();

delay(500);

for (int i = 0; i 《 8; i++)

{

bitSet(leds, i);

updateShiftRegister();

delay(500);

}

for (byte b = 255; b 》 0; b--)

{

setBrightness(b);

delay(50);

}

}

void updateShiftRegister()

{

digitalWrite(latchPin, LOW);

shiftOut(dataPin, clockPin, LSBFIRST, leds);

digitalWrite(latchPin, HIGH);

}

void setBrightness(byte brightness) // 0 to 255

{

analogWrite(outputEnablePin, 255-brightness);

}

/*

Adafruit Arduino - Lesson 4. 8 LEDs and a Shift Register - Brightness

*/

int latchPin = 5;

int clockPin = 6;

int dataPin = 4;

int outputEnablePin = 3;

byte leds = 0;

void setup()

{

pinMode(latchPin, OUTPUT);

pinMode(dataPin, OUTPUT);

pinMode(clockPin, OUTPUT);

pinMode(outputEnablePin, OUTPUT);

}

void loop()

{

setBrightness(255);

leds = 0;

updateShiftRegister();

delay(500);

for (int i = 0; i 《 8; i++)

{

bitSet(leds, i);

updateShiftRegister();

delay(500);

}

for (byte b = 255; b 》 0; b--)

{

setBrightness(b);

delay(50);

}

}

void updateShiftRegister()

{

digitalWrite(latchPin, LOW);

shiftOut(dataPin, clockPin, LSBFIRST, leds);

digitalWrite(latchPin, HIGH);

}

void setBrightness(byte brightness) // 0 to 255

{

analogWrite(outputEnablePin, 255-brightness);

}

其他要做的事情

一旦您知道如何使用74HC595,那么使用許多LED可以做很多事情。您可以嘗試以下操作:

制作“ Larson Scanner”掃描燈,就像在電視連續劇《騎士騎士》中KITT的前部以及在《 Battle Start Galactica》系列中的Cylons上那樣。 li》

制作電子骰子。將6個LED排列為兩列,每列三個LED,中間一個LED。提示–看一下稱為“隨機”的Arduino函數。

74HC595的一大優點是,您可以通過菊花鏈式連接它們以增加數量。您可以控制的LED。有關74HC595的更高級用法的其他指導,請查看使用‘shiftOut’的Arduino官方文檔http://arduino.cc/zh/Tutorial/ShiftOut

責任編輯:wv

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • led
    led
    +關注

    關注

    242

    文章

    23741

    瀏覽量

    671342
  • Arduino
    +關注

    關注

    189

    文章

    6493

    瀏覽量

    190202
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    何在iMX8MM EVK啟用紅外接收器?

    使用 iMX8MM EVK,您還可以獲得一與其中一 GPIO 接口的 IR 接收器 LED。通過今天的這篇文章,我將演示如何在 iMX
    發表于 03-24 06:20

    STM32CubeMx使用ADC時,只需要將通道進行配置,不需要引腳進行模擬輸入嗎?

    當使用ADC時,只需要將通道進行配置,不需要引腳進行模擬輸入嗎?模擬輸入腳只能夠接收模擬電壓信號,ADC只是將模擬信號轉換為數字信號的,只有先使用模擬輸入,將信號引入進來,在使用A
    發表于 03-13 07:32

    DLP4710在使用的過程中,不需要內置的光源,如何去掉這三光源?

    DLP4710 LC套件,在使用的過程中,不需要內置的光源,如何去掉這三光源? 目前去掉LED,就無法正確投影圖像。 是否可以通過在硬件對PMIC管理芯片的反饋
    發表于 02-25 06:28

    ADS7886只用cs就直接控制輸出了,不需要在spi在發送一空數據啟動時鐘了?

    我用 F28069 外擴的ADS7886在手冊上有這段話 在cs的下降沿,開始對輸入信號進行采樣和轉換,一邊轉換也就一邊輸出,難道只用cs就直接控制輸出了,不需要在spi在發送一
    發表于 01-10 14:52

    sn65lvdt14的dir引腳如果不需要,是接地還是懸空?

    sn65lvdt14的芯片dir引腳如果不需要,是接地還是懸空
    發表于 12-26 07:21

    使用ADS1299開發套件時,如何為八個通道輸入提供一共同的外部參考?

    請問在使用ADS1299開發套件時,想要為八個通道輸入提供一共同的外部參考,在硬件和TI提供的軟件該如何設置?
    發表于 12-16 08:50

    不需要點表的工業網關應用案例:如何提升工業企業生產效率與質量?

    不需要點表的工業網關解決方案。技術團隊在車間各個關鍵設備節點安裝了新的工業網關。由于不需要點表,安裝過程極為簡便,技術人員僅需將網關與設備連接,并進行簡單的網絡設置,即可完成部署。整個車間的網關部署時間比之前預計縮短了 [X]%。
    的頭像 發表于 11-13 10:27 ?448次閱讀
    <b class='flag-5'>不需要</b>點表的工業網關應用案例:如何提升工業企業生產效率與質量?

    TPA6130A2如果不需要I2C功能,是否可以將I2C的兩引腳懸空?

    如果不需要I2C功能,是否可以將I2C的兩引腳懸空。 2.如果將I2C兩引腳懸空,該IC是否是最大音量,而且長期使用和多次通電IC是否依
    發表于 11-01 08:16

    C語言為什么不需要包含stdio.h

    我們在寫單片機程序的時候,第一行都會包含 reg51.h,于是就有同學提出了疑問,為什么不需要包含 stdio.h?
    的頭像 發表于 10-29 15:48 ?784次閱讀

    想找一AGC的芯片,不需要軟件控制的 ,完全硬件AGC,求推薦

    想找一AGC的芯片完全硬件AGC不需要軟件控制的價格20元以下
    發表于 10-28 06:21

    不需要點表的工業網關” 深控技術物聯網解決方案

    不需要點表的工業網關” 物聯網解決方案
    的頭像 發表于 09-29 15:43 ?641次閱讀
    “<b class='flag-5'>不需要</b>點表的工業網關” 深控技術物聯網解決方案

    不需要點表的工業網關,究竟有多大潛力?

    在當今科技飛速發展的時代,工業領域也在不斷尋求創新與突破,以提高生產效率、降低成本并提升競爭力。工業網關作為連接工業設備與網絡的關鍵節點,其重要性不言喻。如今,一款不需要點表的工業網關嶄露頭角
    的頭像 發表于 09-27 15:11 ?899次閱讀
    <b class='flag-5'>不需要</b>點表的工業網關,究竟有多大潛力?

    DRV8823的正確輸出序列應該是怎么樣的,不需要過零電流嗎?

    ,來產生過零電流,但是用電流探頭查看電流,發現不是正弦波。DRV8823的正確輸出序列應該是怎么樣的,不需要過零電流嗎?
    發表于 09-26 08:07

    網線那幾根線不需要

    通常是橙白、橙、綠白、綠。 剩下的四根線,即藍、藍白、棕、棕白,在百兆網絡中通常是不需要的。這四根線在網線中主要作為備用或用于其他用途,如語音傳輸等。然而,在千兆網絡中,由于數據傳輸速率的提高,這根線都
    的頭像 發表于 09-04 09:40 ?3479次閱讀

    DAC8771RGZ只輸出正電壓不需要輸出負電壓的時候,芯片的引腳11和27,下圖的VNEG_IN網絡應該怎么接?

    請教下DAC8771RGZ這款DA芯片,當只輸出正電壓不需要輸出負電壓的時候,芯片的引腳11和27,下圖的VNEG_IN網絡應該怎么接,直接接地嗎?
    發表于 08-08 07:24
    主站蜘蛛池模板: 欧美猛交xxxx乱大交 | 深夜释放自己vlog糖心旧版本 | 欧美在线免费 | 日本高清视频网站www | 久色中文| 日本在线视频一区二区三区 | 在线黄色免费观看 | 护士一级aaaaaa毛片 | 东方天堂网 | 久久伦子沙发 | 国产特黄一级毛片特黄 | 福利视频一区二区微拍堂 | 天天射天天干天天色 | 欧美天堂在线观看 | 中国国产aa一级毛片 | 黄色视屏日本 | 日本色图网站 | 亚洲欧美天堂网 | 手机看片自拍自拍自拍 | 99久久99久久精品国产 | 一区二区三区视频 | 日本免费一区二区视频 | 天天摸夜夜摸爽爽狠狠婷婷97 | 永久手机看片福利盒子 | xxxxxhd69日本护士 | 中文字幕在线永久在线视频2020 | 成 人在线观看视频网站 | 免费一级黄 | 五月婷婷俺也去开心 | 色欧美亚洲 | 在线你懂得 | 国产美女主播一级成人毛片 | 激情六月婷婷开心丁香开心 | 亚洲成人高清在线 | 欧美另类激情 | 青草青青产国视频在线 | 免费日本视频 | 久久99精品久久久久久园产越南 | 四虎永久在线观看视频精品 | 久久亚洲一级毛片 | 色综合天 |