那曲檬骨新材料有限公司

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

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

3天內不再提示

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

電子設計 ? 來源:電路城 ? 作者:電路城 ? 2021-05-21 17:49 ? 次閱讀

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

硬件組件:

Arduino Nano R3

移位寄存器75HC595

瞬時按鈕開關

發光二極管

4*4立方體:

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

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

(移位寄存器75HC595)

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

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

(俯視立方體的腿)

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

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

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

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

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

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

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

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

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

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

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

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

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

(立方體的底部)

控制led

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

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

(打開指示燈的值)

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

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

主回路:

當知道如何在一層中設置led時,想要控制4層。雖然只能向我們的2個移位寄存器發送關于1層的信息,但使用Arduino的主循環來非常快速地打開和關閉循環中的層,它們將在同一時刻全部改變。顯示圖層值的代碼非常簡單:

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

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

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

PORTD |= B11110000; //關閉圖層

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

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

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

關于主循環和按鈕的標簽

#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; //關閉圖層

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();

}

//此部分顯示在函數中設置的圖層

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

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

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

PORTD |= B11110000; //關閉圖層

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

}

void PushButton() {

start = true;

}

“移位寄存器”標簽:

#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); //數字寫入(latchPin, LOW);

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

shiftOut(dataPin, clockPin, MSBFIRST, value);

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

}

創建模式:

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

以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);

}

只有當打開模式時,“開始”部分才會啟動一次。它設置速度時間并關閉所有led。然后,總是隨機打開頂層16個led中的一個,在這個循環中,把它移到底層。
責任編輯:pj

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

    關注

    8

    文章

    7139

    瀏覽量

    89576
  • 發光二極管
    +關注

    關注

    13

    文章

    1204

    瀏覽量

    66507
  • 移位寄存器
    +關注

    關注

    3

    文章

    259

    瀏覽量

    22342
收藏 人收藏

    評論

    相關推薦

    紫外發光二極管發光原理 紫外發光二極管的結構

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

    發光二極管型號有哪些_發光二極管型號大全

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

    發光二極管型號有哪些_發光二極管型號大全

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

    74HC595點亮8個發光二極管實驗目的

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

    發光二極管

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

    閃爍式發光二極管

    閃爍式發光二極管 閃爍式發光二極管是一種光電結合的器件,它是把CMOS-LED 技術應用到發光二極管上而制成的。閃爍式發光二極管的外形與普通發光二
    發表于 09-19 17:40 ?6151次閱讀

    二極管-發光二極管

    二極管-發光二極管   發光二極管簡稱為
    發表于 11-07 09:06 ?1811次閱讀

    什么是發光二極管

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

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

    發光二極管(LED),發光二極管(LED)是什么意思 發光二極管(LED)的發光原理可以用PN結的能帶結構來解釋:當導帶中的電子與價帶中的空穴
    發表于 02-27 16:14 ?4260次閱讀

    發光二極管的原理是什么?

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

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

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

    有機發光二極管_什么是有機發光二極管

    本內容介紹了什么是有機發光二極管,有機發光二極管的概念,有機發光二極管的結構及優勢,詳細的全面的介紹有機發光二極管
    發表于 05-15 14:55 ?7916次閱讀
    有機<b class='flag-5'>發光二極管</b>_什么是有機<b class='flag-5'>發光二極管</b>

    移位寄存器怎么用_如何使用移位寄存器_移位寄存器的用途

    移位寄存器是一個具有移位功能的寄存器,是指寄存器中所存的代碼能夠在移位脈沖的作用下依次左移或右移
    發表于 12-22 15:49 ?2w次閱讀

    發光二極管封裝是什么,關于發光二極管封裝的詳解

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

    什么是紅外二極管?發光二極管?紅外二極管發光二極管的區別

    什么是紅外二極管發光二極管又是什么呢?紅外二極管發光二極管的區別? 紅外二極管發光二極管
    的頭像 發表于 01-26 15:42 ?2075次閱讀
    大发888娱乐城df888| 云鼎娱乐城| 众发娱乐城| 波克棋牌完整版下载| 大发888真钱官网| 网上赌场| 百家乐官网体育nba| 皇冠百家乐官网在线游戏| 百家乐玄机| 好用百家乐官网软件| 百家乐官网高手论坛| 百家乐电话投注多少| 太子百家乐的玩法技巧和规则 | 大发888娱乐城官方免费下载| 大发888黄金版娱乐场| 娱乐城开户送| 闲和庄百家乐官网的玩法技巧和规则| 真人百家乐游戏网| 大发888海立方| 百家乐官网代理在线游戏可信吗网上哪家平台信誉好安全 | 礼泉县| 百家乐官网博国际| CEO百家乐的玩法技巧和规则| 百家乐官网视频游戏平台| 百家乐智能分析软| 太原百家乐招聘| 马牌百家乐官网现金网| V博百家乐官网的玩法技巧和规则| 百家乐折叠桌| 威尼斯人娱乐城返水| 百家乐官网tt娱乐城娱乐城| 太阳城花园| 三公百家乐官网玩法| 百家乐投注哪个信誉好| 真钱德州扑克| 网上百家乐骗钱| 澳门葡京赌场图片| 真人百家乐代理合作| 竞彩比分| 易球百家乐娱乐城| 百家乐官网稳赢玩法|