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

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

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

基于51單片機(jī)設(shè)計(jì)的花樣流水燈設(shè)計(jì)

DS小龍哥-嵌入式技術(shù) ? 來源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2023-06-11 10:00 ? 次閱讀

一、項(xiàng)目介紹

花樣流水燈是一種常見的LED燈效果,被廣泛應(yīng)用于舞臺表演、節(jié)日慶典、晚會演出等場合。在現(xiàn)代智能家居、電子產(chǎn)品中,花樣流水燈也被廣泛使用,通過調(diào)整亮滅順序和時(shí)間,可以實(shí)現(xiàn)各種炫酷的燈光效果,增強(qiáng)用戶體驗(yàn)。而51單片機(jī)作為一種常見的嵌入式開發(fā)平臺,具有體積小、功耗低、可編程性強(qiáng)等優(yōu)點(diǎn),非常適合用于開發(fā)花樣流水燈及其他嵌入式應(yīng)用。

以下場景中流水燈得到了廣泛的應(yīng)用:

  • 舞臺表演:花樣流水燈可用于舞臺背景、音樂MV等場合,配合音樂和舞蹈,營造出炫酷、動(dòng)感的視覺效果。
  • 節(jié)日慶典:在傳統(tǒng)節(jié)日如春節(jié)、中秋節(jié)等場合,花樣流水燈可以用于燈籠、彩燈等裝飾,為節(jié)日增添喜慶氛圍。
  • 晚會演出:在各種晚會、派對、聚會等場合,花樣流水燈可以用于舞臺效果、音樂燈光秀等,增強(qiáng)整個(gè)活動(dòng)的氛圍和趣味性。
  • 智能家居:花樣流水燈可以使用在居家燈光控制中,實(shí)現(xiàn)遠(yuǎn)程控制、定時(shí)開關(guān)、自動(dòng)調(diào)節(jié)等功能,提升居住環(huán)境的科技感和人性化。

image-20230606215451680

二、設(shè)計(jì)原理

2.1 基本原理

花樣流水燈是一種常見的LED燈效果,通常由多個(gè)LED燈組成,通過控制每個(gè)LED燈的亮滅順序和時(shí)間,實(shí)現(xiàn)花樣流水燈的效果。在51單片機(jī)中,可以使用定時(shí)器端口控制來實(shí)現(xiàn)這一效果。

2.2 硬件搭建

為了實(shí)現(xiàn)花樣流水燈,需要將多個(gè)LED燈按照一定的順序連接到51單片機(jī)的IO引腳上。電路設(shè)計(jì)上,為每個(gè)LED燈配備一個(gè)電阻,并將它們連接到5V電源引腳和地線上。

具體硬件搭建方法如下:

(1)將多個(gè)LED燈依次連接起來組成一個(gè)電路鏈,將第一個(gè)LED的正極接到P1.0口,第二個(gè)LED的正極接到P1.1口,第三個(gè)LED的正極接到P1.2口,以此類推,一共連接7個(gè)LED燈。

(2)為每個(gè)LED燈配備一個(gè)適當(dāng)?shù)碾娮?,用來限?a href="http://srfitnesspt.com/tags/電流/" target="_blank">電流,防止損壞LED。

(3)將每個(gè)LED的負(fù)極連接到5V電源引腳附近的地線上,形成一個(gè)完整的電路。

2.3 軟件實(shí)現(xiàn)

在軟件實(shí)現(xiàn)上,使用51單片機(jī)的定時(shí)器和端口控制來控制LED燈的亮滅順序和時(shí)間。

具體方法如下:

(1)設(shè)置一個(gè)計(jì)數(shù)器變量count,用來保存當(dāng)前亮起的LED燈的編號(從0開始)。

(2)在定時(shí)器中斷處理函數(shù)中,每次計(jì)數(shù)器溢出時(shí),將當(dāng)前亮起的LED燈熄滅,并將count加1;當(dāng)count等于LED燈總數(shù)時(shí),將count重置為0。

(3)然后,再將下一個(gè)LED燈亮起,以此類推。

(4)通過控制定時(shí)器的計(jì)數(shù)周期和每個(gè)燈亮起的時(shí)間,可以調(diào)整花樣流水燈的效果。

三、代碼實(shí)現(xiàn)

3.1 流水燈代碼實(shí)現(xiàn)1

#include < reg52.h >
 ?
 #define LED_NUM 8         // LED燈總數(shù)
 #define TIMER_TICK 500    // 定時(shí)器計(jì)數(shù)初值,控制亮滅時(shí)間
 #define HIGH 0            // 高電平
 #define LOW 1             // 低電平
 ?
 unsigned int count = 0;
 ?
 // 定時(shí)器中斷處理函數(shù)
 void TimerInterrupt() interrupt 1
 {
     static unsigned long tick = 0;
 ?
     tick++;
 ?
     if (tick >= TIMER_TICK)
     {
         P1 &= ~(1 < < count); // 熄滅當(dāng)前LED
         count++;             // 切換到下一個(gè)LED
 ?
         if (count >= LED_NUM)
         {
             count = 0;       // 重置計(jì)數(shù)器
         }
 ?
         P1 |= (1 < < count);  // 亮起下一個(gè)LED
         tick = 0;            // 重置計(jì)時(shí)器
     }
 }
 ?
 // 主函數(shù)
 void main()
 {
     unsigned int i;
 ?
     P1 = 0xFF;              // 所有IO口初始化為高電平
     TMOD |= 0x01;           // 定時(shí)器0,模式1,16位自動(dòng)重載
     TH0 = (65536 - TIMER_TICK) / 256;
     TL0 = (65536 - TIMER_TICK) % 256;
     ET0 = 1;                // 定時(shí)器中斷允許
     EA = 1;                 // 總中斷允許
     TR0 = 1;                // 定時(shí)器開始計(jì)數(shù)
 ?
     while (1)
     {
         // 等待中斷事件
     }
 }

3.2 流水燈實(shí)現(xiàn)效果2

【1】逐個(gè)點(diǎn)亮

#include < reg52.h >
 ?
 void Delay(unsigned int t) // 延時(shí)函數(shù)
 {
     unsigned int i, j;
     for (i = 0; i < t; i++)
         for (j = 0; j < 125; j++);
 }
 ?
 void main()
 {
     while (1)
     {
         unsigned char i; // 定義計(jì)數(shù)器i
         for (i = 0; i < 8; i++) // 循環(huán)8次,依次點(diǎn)亮LED燈
         {
             P0 = ~(1 < < i); // 通過位運(yùn)算生成控制信號,輸出到P0口,控制LED燈點(diǎn)亮
             Delay(500); // 延時(shí)500ms
         }
     }
 }

【2】逐個(gè)熄滅

#include < reg52.h >
 ?
 void Delay(unsigned int t) // 延時(shí)函數(shù)
 {
     unsigned int i, j;
     for (i = 0; i < t; i++)
         for (j = 0; j < 125; j++);
 }
 ?
 void main()
 {
     while (1)
     {
         unsigned char i; // 定義計(jì)數(shù)器i
         for (i = 7; i < 8; i--) // 循環(huán)8次,依次熄滅LED燈
         {
             P0 = ~(1 < < i); // 通過位運(yùn)算生成控制信號,輸出到P0口,控制LED燈熄滅
             Delay(500); // 延時(shí)500ms
         }
     }
 }

【3】來回流動(dòng)

#include < reg52.h >
 ?
 void Delay(unsigned int t) // 延時(shí)函數(shù)
 {
     unsigned int i, j;
     for (i = 0; i < t; i++)
         for (j = 0; j < 125; j++);
 }
 ?
 void main()
 {
     while (1)
     {
         unsigned char i; // 定義計(jì)數(shù)器i
         for (i = 0; i < 8; i++) // 循環(huán)8次,依次點(diǎn)亮LED燈
         {
             P0 = ~(1 < < i); // 通過位運(yùn)算生成控制信號,輸出到P0口,控制LED燈點(diǎn)亮
             Delay(500); // 延時(shí)500ms
         }
         for (i = 6; i > 0; i--) // 循環(huán)6次,依次熄滅LED燈
         {
             P0 = ~(1 < < i); // 通過位運(yùn)算生成控制信號,輸出到P0口,控制LED燈熄滅
             Delay(500); // 延時(shí)500ms
         }
     }
 }

3.3 閃光燈的實(shí)現(xiàn)

下面是三個(gè)不同的閃光燈效果的代碼,分別為常亮、快閃和慢閃。

【1】常亮閃光燈

#include < reg52.h >
 ?
 sbit LED = P1 ^ 0;
 ?
 void main() {
     while (1) {
         LED = 0; // LED常亮
     }
 }

【2】快閃閃光燈

#include < reg52.h >
 ?
 sbit LED = P1 ^ 0;
 ?
 void delay(unsigned int i) {
     while (i--);
 }
 ?
 void main() {
     while (1) {
         LED = 0; // LED亮
         delay(50000); // 延時(shí)一段時(shí)間
         LED = 1; // LED滅
         delay(50000); // 延時(shí)一段時(shí)間
     }
 }

【2】慢閃閃光燈

#include < reg52.h >
 ?
 sbit LED = P1 ^ 0;
 ?
 void delay(unsigned int i) {
     while (i--);
 }
 ?
 void main() {
     while (1) {
         LED = 0; // LED亮
         delay(100000); // 延時(shí)一段時(shí)間
         LED = 1; // LED滅
         delay(100000); // 延時(shí)一段時(shí)間
     }
 }

以上三個(gè)代碼中,都使用了P1口的第0位來控制LED燈的亮滅。其中,第一個(gè)代碼是常亮閃光燈,只需要將LED置為0。第二個(gè)代碼是快閃閃光燈,使用了一個(gè)delay函數(shù)來實(shí)現(xiàn)延時(shí),每次延時(shí)50000個(gè)時(shí)鐘周期,即約為500ms。第三個(gè)代碼是慢閃閃光燈,與第二個(gè)代碼類似,只是將延時(shí)時(shí)間改為了100000個(gè)時(shí)鐘周期,即約為1s。

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

    關(guān)注

    22

    文章

    1591

    瀏覽量

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

    關(guān)注

    273

    文章

    5696

    瀏覽量

    122756
  • 計(jì)數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2248

    瀏覽量

    94179
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3227

    瀏覽量

    114149
  • 流水燈
    +關(guān)注

    關(guān)注

    21

    文章

    432

    瀏覽量

    59557
收藏 人收藏

    評論

    相關(guān)推薦

    心形花樣流水燈

    心形花樣流水燈基于51單片機(jī)程序設(shè)計(jì)電路圖等
    發(fā)表于 11-26 16:36 ?212次下載

    51單片機(jī)流水燈程序

    51單片機(jī)流水燈程序 51單片機(jī)流水燈程序
    發(fā)表于 12-21 15:52 ?170次下載

    單片機(jī)控制花樣流水燈原理圖及程序

    本文詳細(xì)介紹了AT89C51單片機(jī)流水燈的編寫方法以及介紹了單片機(jī)32位LED花樣流水燈程序及原
    發(fā)表于 04-26 16:15 ?5.5w次閱讀
    <b class='flag-5'>單片機(jī)</b>控制<b class='flag-5'>花樣</b><b class='flag-5'>流水燈</b>原理圖及程序

    如何使用51單片機(jī)控制32個(gè)LED多花樣流水燈的程序資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何使用51單片機(jī)控制32個(gè)LED多花樣流水燈的程序資料免費(fèi)下載。
    發(fā)表于 10-11 08:00 ?47次下載
    如何使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>控制32個(gè)LED多<b class='flag-5'>花樣</b><b class='flag-5'>流水燈</b>的程序資料免費(fèi)下載

    51單片機(jī)控制32個(gè)LED多花樣流水燈詳細(xì)程序資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是51單片機(jī)控制32個(gè)LED多花樣流水燈詳細(xì)程序資料免費(fèi)下載。
    發(fā)表于 10-10 08:00 ?79次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>控制32個(gè)LED多<b class='flag-5'>花樣</b><b class='flag-5'>流水燈</b>詳細(xì)程序資料免費(fèi)下載

    使用C51單片機(jī)設(shè)計(jì)的4按鍵4種花樣流水燈的資料和程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用C51單片機(jī)設(shè)計(jì)的4按鍵4種花樣流水燈的資料和程序免費(fèi)下載。
    發(fā)表于 11-09 08:00 ?43次下載
    使用C<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)設(shè)</b>計(jì)的4按鍵4種<b class='flag-5'>花樣</b><b class='flag-5'>流水燈</b>的資料和程序免費(fèi)下載

    使用單片機(jī)設(shè)計(jì)的花樣流水燈程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)設(shè)計(jì)的花樣流水燈程序免費(fèi)下載。
    發(fā)表于 04-01 08:00 ?1次下載
    使用<b class='flag-5'>單片機(jī)設(shè)</b>計(jì)的<b class='flag-5'>花樣</b><b class='flag-5'>流水燈</b>程序免費(fèi)下載

    使用51單片機(jī)設(shè)計(jì)的流水燈程序資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)設(shè)計(jì)的流水燈程序資料免費(fèi)下載
    發(fā)表于 04-08 08:00 ?11次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)設(shè)</b>計(jì)的<b class='flag-5'>流水燈</b>程序資料免費(fèi)下載

    使用51單片機(jī)進(jìn)行四按鍵五花樣流水燈設(shè)計(jì)的程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)進(jìn)行四按鍵五花樣流水燈設(shè)計(jì)的程序免費(fèi)下載。
    發(fā)表于 08-23 17:30 ?19次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>進(jìn)行四按鍵五<b class='flag-5'>花樣</b><b class='flag-5'>流水燈</b>設(shè)計(jì)的程序免費(fèi)下載

    使用51單片機(jī)實(shí)現(xiàn)簡單花樣流水燈的程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)實(shí)現(xiàn)簡單花樣流水燈的程序免費(fèi)下載。
    發(fā)表于 07-05 17:41 ?10次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>實(shí)現(xiàn)簡單<b class='flag-5'>花樣</b><b class='flag-5'>流水燈</b>的程序免費(fèi)下載

    使用51單片機(jī)設(shè)計(jì)流水燈的源代碼免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)設(shè)計(jì)流水燈的C語言源代碼免費(fèi)下載。
    發(fā)表于 06-28 17:42 ?5次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)設(shè)</b>計(jì)<b class='flag-5'>流水燈</b>的源代碼免費(fèi)下載

    使用proteus仿真AVR單片機(jī)設(shè)計(jì)超級花樣流水燈的資料合集

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用proteus仿真AVR單片機(jī)設(shè)計(jì)超級花樣流水燈的資料合集。
    發(fā)表于 04-30 08:00 ?3次下載
    使用proteus仿真AVR<b class='flag-5'>單片機(jī)設(shè)</b>計(jì)超級<b class='flag-5'>花樣</b><b class='flag-5'>流水燈</b>的資料合集

    C51單片機(jī)學(xué)習(xí)筆記(二)——花樣流水燈的實(shí)現(xiàn)

    C51單片機(jī)學(xué)習(xí)筆記(二)——花樣流水燈的實(shí)現(xiàn)文章目錄C51單片機(jī)學(xué)習(xí)筆記(二)——
    發(fā)表于 11-12 13:51 ?37次下載
    C<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>學(xué)習(xí)筆記(二)——<b class='flag-5'>花樣</b><b class='flag-5'>流水燈</b>的實(shí)現(xiàn)

    基于51單片機(jī)花樣流水燈設(shè)計(jì)

    花樣流水燈就是讓LED燈按照一定規(guī)律進(jìn)行各種變化,流水燈在生活中也隨處可見,例如在建筑物的棱角上裝上流水燈,可以起到變換閃爍達(dá)到美不勝收的效果。此設(shè)計(jì)使用16個(gè)LED燈,有四種
    的頭像 發(fā)表于 06-28 10:29 ?3422次閱讀
    基于<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>花樣</b><b class='flag-5'>流水燈</b>設(shè)計(jì)

    51單片機(jī)流水燈制作

    ?流水燈是學(xué)習(xí)51單片機(jī)的一個(gè)基本項(xiàng)目,是我們對單片機(jī)IO口輸出認(rèn)識的基本項(xiàng)目。當(dāng)然學(xué)會了花樣流水燈
    的頭像 發(fā)表于 02-26 10:06 ?1329次閱讀
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>流水燈</b>制作