99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

基于移位寄存器的發(fā)光二極管立方體(4*4)編寫代碼

電子設(shè)計 ? 來源:電路城 ? 作者:電路城 ? 2021-05-21 17:49 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

該項目主要是為帶有移位寄存器的發(fā)光二極管立方體(4*4)編寫代碼,為立方體創(chuàng)造不同的模式。

硬件組件:

Arduino Nano R3

移位寄存器75HC595

瞬時按鈕開關(guān)

發(fā)光二極管

4*4立方體:

該立方體有16條腿和4排的立方體。Les s把這些行叫做層。如何將這16條支路連接到Arduino而不占用其所有引腳的最簡單方法是使用移位寄存器75HC595。

基于移位寄存器的發(fā)光二極管立方體(4*4)編寫代碼

(移位寄存器75HC595)

將立方體的前8個引腳(1-8)連接到第一個移位寄存器(引腳Q0-Q7),并將其他8個引腳(9-16)連接到另一個引腳,如俯視圖中的表格所示:

基于移位寄存器的發(fā)光二極管立方體(4*4)編寫代碼

(俯視立方體的腿)

下一步是用Arduino連接移位寄存器的引腳,如下所示:

引腳8(兩個移位寄存器/ GND)至阿爾杜伊諾的接地引腳

第一移位寄存器的引腳9 (Q7)至第二移位寄存器的引腳14(數(shù)據(jù))

引腳10(兩個移位寄存器/復(fù)位)至Arduino的引腳8

引腳11(兩個移位寄存器/時鐘)至Arduino的引腳9

引腳12(兩個移位寄存器/鎖存器)至Arduino的引腳10

引腳14(第一個移位寄存器/數(shù)據(jù))至Arduino的引腳11

引腳16(兩個移位寄存器/ VCC)至Arduino的5V引腳

最后一步是用Arduino連接立方體的層:

引腳4 -第0層(通過100歐姆電阻

引腳5 -第1層(通過100歐姆電阻)

引腳6 -第2層(通過100歐姆電阻)

引腳7 -第3層(通過100歐姆電阻)

(立方體的底部)

控制led

一層中的每個led都由一個數(shù)字表示,如下表所示:

基于移位寄存器的發(fā)光二極管立方體(4*4)編寫代碼

(打開指示燈的值)

所以要打開圖層第二行的第二個led,就會設(shè)置layer = 32。要打開前兩個led,layer = 1 + 2 = 3。要打開第一行l(wèi)ed,layer = 1 + 2 + 4 + 8 = 15。

如果想將循環(huán)中的光穿過層中的所有LED,在第一步中,設(shè)置layer=b000000000000001=1,然后在循環(huán)中,將通過設(shè)置layer=layer《《1來移動該位。或者可以設(shè)置layer=(1《《count)并在循環(huán)中增加“count”。

主回路:

當(dāng)知道如何在一層中設(shè)置led時,想要控制4層。雖然只能向我們的2個移位寄存器發(fā)送關(guān)于1層的信息,但使用Arduino的主循環(huán)來非??焖俚卮蜷_和關(guān)閉循環(huán)中的層,它們將在同一時刻全部改變。顯示圖層值的代碼非常簡單:

SetShiftReg(layer[k]); //將層數(shù)據(jù)發(fā)送到移位寄存器

bitClear(PORTD, 4 + k); //啟用“層k”

delay(1); //對LED亮度很重要

PORTD |= B11110000; //關(guān)閉圖層

k++; if (k 》 3) k = 0; //在循環(huán)中再增加一層

在該項目中,使用按鈕(與接地和Arduino的引腳2連接)來改變創(chuàng)建的模式。按下按鈕設(shè)置“開始”。這個開始采用并初始化下一個模式。

然后,循環(huán)在“速度時間”值中設(shè)置的每一個時間(以毫秒為單位)后啟動選定的模式。

關(guān)于主循環(huán)和按鈕的標(biāo)簽

#define buttonPin 2

unsigned int layer[4] = {0, 0, 0, 0}; //65535填充層

byte k = 0;

bool start = true;

unsigned long delayTime;

int speedTime = 0;

int count;

void setup() {

InitializeShiftReg();

InitializeMyLedCube();

}

void InitializeMyLedCube() {

DDRD = B11110000; //引腳D0-D3作為輸入,D4-D7作為輸出

PORTD |= B11110000; //關(guān)閉圖層

pinMode(buttonPin, INPUT_PULLUP);

attachInterrupt(digitalPinToInterrupt(buttonPin), PushButton, FALLING);

delayTime = millis();

}

byte patternNum = 28;

byte pattern = patternNum - 1;

void loop() {

if (start) {

detachInterrupt(digitalPinToInterrupt(buttonPin));

delay(500); //等待釋放按鈕

pattern++;

if (pattern 》 patternNum) pattern = 1;

attachInterrupt(digitalPinToInterrupt(buttonPin), PushButton, FALLING);

count = 0;

}

if (((millis() - delayTime) 》 speedTime) || start) {

switch (pattern) {

case 1: LayersUpDown(); break;

case 2: FallingDot(); break;

case 3: Rain(); break;

case 4: AllCube(); break;

case 5: Cut(); break;

case 6: Cube(); break;

case 7: Diagonal(); break;

case 8: Mixer(); break;

case 9: Random(); break;

case 10: FallingLayer(); break;

case 11: LayerCut(); break;

case 12: Circle(); break;

case 13: RandomWay(); break;

case 14: SmallCube(); break;

case 15: RandomWayCube(); break;

case 16: GrowingCube(); break;

case 17: FallingLayers(); break;

case 18: GrowingLine(); break;

case 19: CircleEdges(); break;

case 20: CircleSide(); break;

case 21: RandomWayLine(); break;

case 22: RandomWaySide(); break;

case 23: DJCube(); break;

case 24: FillingCube(); break;

case 25: NanoBuilding(); break;

case 26: Curve(); break;

case 27: Snake(); break;

case 28: Julka(); break;

default: break;

}

delayTime = millis();

}

//此部分顯示在函數(shù)中設(shè)置的圖層

SetShiftReg(layer[k]); //將層數(shù)據(jù)發(fā)送到移位寄存器

bitClear(PORTD, 4 + k); //啟用“層k”

delay(1); //對LED亮度很重要

PORTD |= B11110000; //關(guān)閉圖層

k++; if (k 》 3) k = 0; //在循環(huán)中再增加一層

}

void PushButton() {

start = true;

}

“移位寄存器”標(biāo)簽:

#define latchPin 10 //端口 B2

#define clockPin 9 //端口 B1

#define dataPin 11 //端口B3

#define resetPin 8 //端口 B0

void InitializeShiftReg() {

DDRB |= B1111; //引腳D8-D11作為輸出

PORTB |= B0001; //將引腳重置為高

}

void SetShiftReg(unsigned int value) {

bitClear(PORTB, 2); //數(shù)字寫入(latchPin, LOW);

shiftOut(dataPin, clockPin, MSBFIRST, value 》》 8);

shiftOut(dataPin, clockPin, MSBFIRST, value);

bitSet(PORTB, 2); //數(shù)字寫入(latchPin, HIGH);

}

創(chuàng)建模式:

每次在“速度時間”值中設(shè)置模式的開始后,Arduino的主循環(huán)都會啟動選定的模式。換句話說,一個模式的函數(shù)總是只改變一次層,但是主循環(huán)會重復(fù)多次。

以Rain()模式為例:

void Rain() {

if (start) {

start = false; speedTime = 200;

ClearLayers();

}

layer[0] = layer[1];

layer[1] = layer[2];

layer[2] = layer[3];

layer[3] = 1 《《 random(16);

}

只有當(dāng)打開模式時,“開始”部分才會啟動一次。它設(shè)置速度時間并關(guān)閉所有l(wèi)ed。然后,總是隨機打開頂層16個led中的一個,在這個循環(huán)中,把它移到底層。
責(zé)任編輯:pj

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

    關(guān)注

    8

    文章

    7250

    瀏覽量

    91598
  • 發(fā)光二極管
    +關(guān)注

    關(guān)注

    13

    文章

    1216

    瀏覽量

    67479
  • 移位寄存器
    +關(guān)注

    關(guān)注

    3

    文章

    287

    瀏覽量

    22694
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    紫外發(fā)光二極管發(fā)光原理 紫外發(fā)光二極管的結(jié)構(gòu)

    紫外發(fā)光二極管是指可發(fā)出波長約400nm的近紫外光的發(fā)光二極管(led)。
    的頭像 發(fā)表于 02-26 16:03 ?3818次閱讀
    紫外<b class='flag-5'>發(fā)光二極管</b>的<b class='flag-5'>發(fā)光</b>原理 紫外<b class='flag-5'>發(fā)光二極管</b>的結(jié)構(gòu)

    發(fā)光二極管型號有哪些_發(fā)光二極管型號大全

    `發(fā)光二極管隨著科技的不斷進(jìn)步,工業(yè)化程度也在不斷的提升,現(xiàn)在高科技產(chǎn)品被大量的使用,相信大家對于紅外發(fā)光二極管一定不會陌生,紅外發(fā)光二極管指的就是一種能發(fā)出紅外線的二極管,比較常見的
    發(fā)表于 04-03 11:33

    發(fā)光二極管型號有哪些_發(fā)光二極管型號大全

    `發(fā)光二極管隨著科技的不斷進(jìn)步,工業(yè)化程度也在不斷的提升,現(xiàn)在高科技產(chǎn)品被大量的使用,相信大家對于紅外發(fā)光二極管一定不會陌生,紅外發(fā)光二極管指的就是一種能發(fā)出紅外線的二極管,比較常見的
    發(fā)表于 09-07 11:29

    發(fā)光二極管原理

    發(fā)光二極管是一種直接能把電能轉(zhuǎn)變?yōu)楣饽艿陌雽?dǎo)體器件。與其它發(fā)光器件相比,具有體積小、功耗低、發(fā)光均勻、穩(wěn)定、響應(yīng)速度快、壽命長和可靠性高等優(yōu)點,被廣泛應(yīng)用于各種電子儀器、音響設(shè)備、計算機等作電流指示
    發(fā)表于 06-13 02:40

    74HC595點亮8個發(fā)光二極管實驗?zāi)康?/a>

    的擴展點亮8個發(fā)光二極管按照 1011 0001調(diào)整燈的亮滅2. 知識點8位移位寄存器08-74HC595各個針腳功能如下Vin :芯片高電平輸入端(電源)GND:芯片接地端(接地)OE:使能端,接地才能正常工作,一般情況下接地MR:一般情況下接高電平,接低電平會重置0~
    發(fā)表于 12-07 10:05

    發(fā)光二極管

    發(fā)光二極管 發(fā)光二極管(LED)通常用元素
    發(fā)表于 09-17 09:25 ?1019次閱讀

    閃爍式發(fā)光二極管

    閃爍式發(fā)光二極管 閃爍式發(fā)光二極管是一種光電結(jié)合的器件,它是把CMOS-LED 技術(shù)應(yīng)用到發(fā)光二極管上而制成的。閃爍式發(fā)光二極管的外形與普通發(fā)光二
    發(fā)表于 09-19 17:40 ?6304次閱讀

    二極管-發(fā)光二極管

    二極管-發(fā)光二極管   發(fā)光二極管簡稱為
    發(fā)表于 11-07 09:06 ?1937次閱讀

    什么是發(fā)光二極管

    什么是發(fā)光二極管              發(fā)光二極管功耗小,噪
    發(fā)表于 12-29 11:22 ?982次閱讀

    發(fā)光二極管(LED),發(fā)光二極管(LED)是什么意思

    發(fā)光二極管(LED),發(fā)光二極管(LED)是什么意思 發(fā)光二極管(LED)的發(fā)光原理可以用PN結(jié)的能帶結(jié)構(gòu)來解釋:當(dāng)導(dǎo)帶中的電子與價帶中的空穴
    發(fā)表于 02-27 16:14 ?4349次閱讀

    發(fā)光二極管的原理是什么?

    發(fā)光二極管的原理是什么? 發(fā)光二極管是一種特殊的二極管。和普通的二極管一樣,發(fā)光二極管由半導(dǎo)體芯片組成,這些半導(dǎo)體材料會
    發(fā)表于 02-27 16:17 ?6148次閱讀

    移位寄存器,移位寄存器是什么意思

    移位寄存器,移位寄存器是什么意思 移位寄存器_
    發(fā)表于 03-08 14:50 ?1.8w次閱讀

    有機發(fā)光二極管_什么是有機發(fā)光二極管

    本內(nèi)容介紹了什么是有機發(fā)光二極管,有機發(fā)光二極管的概念,有機發(fā)光二極管的結(jié)構(gòu)及優(yōu)勢,詳細(xì)的全面的介紹有機發(fā)光二極管
    發(fā)表于 05-15 14:55 ?8291次閱讀
    有機<b class='flag-5'>發(fā)光二極管</b>_什么是有機<b class='flag-5'>發(fā)光二極管</b>

    發(fā)光二極管封裝是什么,關(guān)于發(fā)光二極管封裝的詳解

    說起發(fā)光二極管可能很多人不知道是什么東西,但是說起LED應(yīng)該大多數(shù)人都知道,畢竟LED在我們的日常生活中隨處可見,發(fā)光二極管即LED。今天我們想要了解的知識點與發(fā)光二極管(LED)有關(guān),讓我們來看
    發(fā)表于 12-26 11:04 ?6573次閱讀

    什么是紅外二極管?發(fā)光二極管?紅外二極管發(fā)光二極管的區(qū)別

    什么是紅外二極管?發(fā)光二極管又是什么呢?紅外二極管發(fā)光二極管的區(qū)別? 紅外二極管發(fā)光二極管
    的頭像 發(fā)表于 01-26 15:42 ?2778次閱讀