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

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

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

基于51單片機設計的呼吸燈

DS小龍哥-嵌入式技術 ? 來源:DS小龍哥-嵌入式技術 ? 作者:DS小龍哥-嵌入式技 ? 2023-06-10 08:36 ? 次閱讀

一、項目介紹

呼吸燈是一種常見的LED燈光效果,它可以模擬人類呼吸的變化,使燈光看起來更加柔和和自然。51單片機是一種廣泛使用的微控制器,具有體積小、功耗低、成本低等優(yōu)點,非常適合用于控制LED呼吸燈。本項目的呼吸燈將使用PWM(脈沖寬度調(diào)制)技術控制LED亮度,從而實現(xiàn)呼吸燈的效果。

在本項目中,將使用51單片機作為主控制器,通過編程實現(xiàn)呼吸燈的控制。將使用C語言編寫代碼,并使用Keil C51集成開發(fā)環(huán)境進行編譯和調(diào)試。使用Proteus仿真軟件進行電路設計和仿真,確保電路的正確性和穩(wěn)定性。

image-20230606214353670

二、設計原理

2.1 PWM技術

PWM是脈沖寬度調(diào)制(Pulse Width Modulation)的縮寫,是一種通過改變脈沖寬度來控制電路的技術。在數(shù)字電路中,PWM是一種非常常見的技術,它可以用來控制電機、LED燈等電子設備的亮度、速度等參數(shù)

PWM技術的基本原理是通過控制脈沖的寬度和周期來控制電路的輸出。在一個PWM周期內(nèi),電路會以一定的頻率(也就是PWM頻率)產(chǎn)生一系列脈沖,每個脈沖的寬度和高電平時間占整個周期的比例是由控制器根據(jù)需要設定的。通過這種方式,可以實現(xiàn)對電路輸出的精確控制。

在LED呼吸燈項目中,使用定時器模擬PWM技術可以實現(xiàn)呼吸燈效果。具體來說,就是通過定時器產(chǎn)生一定頻率的脈沖信號,然后通過改變脈沖的占空比來控制LED燈的亮度。當脈沖的占空比逐漸增大時,LED燈的亮度也會逐漸增強,直到達到最大亮度;當脈沖的占空比逐漸減小時,LED燈的亮度也會逐漸減弱,直到最終熄滅。這樣就可以實現(xiàn)類似于人類呼吸的漸變效果。

2.2 呼吸燈原理

呼吸燈是一種將 LED 燈光做成漸變效果的技術,可以讓 LED 的亮度在一定時間內(nèi)慢慢地增加和減小,使得 LED 的亮度變化更加自然和柔和,適合用于需要漸變效果的場景,如燈光調(diào)節(jié)、音響節(jié)拍等。

呼吸燈的原理是通過改變 LED 的 PWM 信號的占空比來控制 LED 的亮度。PWM(Pulse Width Modulation,脈寬調(diào)制)是一種調(diào)節(jié)模擬信號幅度的常用技術,它通過改變信號的脈沖寬度來實現(xiàn)對信號幅度的調(diào)節(jié)。在呼吸燈中,PWM 信號的頻率較高,而占空比則會隨著時間的推移而逐漸變化,從而實現(xiàn) LED 亮度的漸變效果。

呼吸燈的實現(xiàn)通常需要使用一個定時器和一個 PWM 模塊。定時器用來定時觸發(fā)中斷事件,在中斷處理函數(shù)中改變 PWM 信號的占空比,從而控制 LED 的亮度。在定時器中斷處理函數(shù)中,可以通過數(shù)學函數(shù)(如正弦、余弦等)或者簡單的數(shù)值計算來得到不同的 PWM 占空比,實現(xiàn)不同的呼吸燈效果。

2.3 51單片機

51單片機是一種廣泛使用的微控制器,具有體積小、功耗低、成本低等優(yōu)點,非常適合用于控制LED呼吸燈。

STC89C52是一種基于MCS-51內(nèi)核的8位單片機,由中國的STC公司生產(chǎn)。具有高性價比、易于編程、廣泛應用等特點,在工業(yè)控制、通信、家電控制等領域得到了廣泛應用。

STC89C52單片機的主要特點如下:

  1. 采用MCS-51內(nèi)核,具有8位數(shù)據(jù)總線和16位地址總線,可以訪問64KB的程序存儲器和64KB的數(shù)據(jù)存儲器。
  2. 內(nèi)置12MHz的晶振,可以通過軟件設置分頻系數(shù)來獲得不同的系統(tǒng)時鐘頻率。
  3. 具有多種外設接口,包括UART、SPI、I2C、定時器、中斷等,可以方便地實現(xiàn)各種應用。
  4. 支持ISP(In-System Programming)編程方式,可以通過串口或并口進行在線編程,方便快捷。
  5. 具有低功耗模式,可以通過軟件設置進入不同的睡眠模式,以節(jié)省系統(tǒng)能耗。

STC89C52單片機可以使用C語言或匯編語言進行編程,編寫的程序可以通過編譯器生成HEX文件,然后通過編程器燒錄到芯片中。由于STC89C52單片機的廣泛應用和豐富的資料,因此學習和使用它相對來說比較容易。

三、代碼實現(xiàn)

3.1 自動呼吸燈

因為STC89C52單片機沒有PWM輸出功能,只能使用延時函數(shù)實現(xiàn),以下是基于STC89C52單片機實現(xiàn)呼吸燈效果的完整代碼:

#include < reg52.h >
 ?
 #define LED P1
 ?
 void delay(unsigned int xms)
 {
     unsigned int i, j;
     for (i = xms; i > 0; i--)
         for (j = 110; j > 0; j--);
 }
 ?
 void main()
 {
     unsigned char i;
     while (1)
     {
         for (i = 0; i < 255; i++)
         {
             LED = i;
             delay(10);
         }
         for (i = 255; i > 0; i--)
         {
             LED = i;
             delay(10);
         }
     }
 }

在這個代碼中,使用了STC89C52單片機的P1口來控制LED燈的亮度。通過一個循環(huán),讓LED燈的亮度從0到255逐漸增加,再從255到0逐漸減小,這樣就實現(xiàn)了呼吸燈的效果。

在代碼中,使用了一個delay函數(shù)來控制循環(huán)的速度。這個函數(shù)可以讓程序延時一定的時間,從而控制LED燈的亮度變化速度。在這個代碼中,設置了每次延時10毫秒,可以根據(jù)需要調(diào)整這個值來改變呼吸燈的效果。

3.2 按鍵控制燈光亮度

以下是基于STC89C52單片機的LED燈亮度控制完整代碼,其中使用了兩個按鍵分別控制LED的亮度和滅度。

#include < reg52.h >
 ?
 #define LED P1
 ?
 sbit KEY_UP = P3 ^ 2;
 sbit KEY_DOWN = P3 ^ 3;
 ?
 unsigned char pwm = 0;
 ?
 void delay(unsigned int i) {
     while (i--);
 }
 ?
 void key_scan() {
     if (KEY_UP == 0) {
         delay(1000);
         if (KEY_UP == 0) {
             pwm += 10;
             if (pwm >= 100) {
                 pwm = 100;
             }
         }
     }
     if (KEY_DOWN == 0) {
         delay(1000);
         if (KEY_DOWN == 0) {
             pwm -= 10;
             if (pwm <= 0) {
                 pwm = 0;
             }
         }
     }
 }
 ?
 void main() {
     TMOD = 0x01; // 設置定時器0為模式1
     TH0 = 0xFC; // 定時器初值,用于產(chǎn)生PWM信號的頻率為50Hz
     TL0 = 0x67;
     TR0 = 1; // 啟動定時器0
     ET0 = 1; // 允許定時器0中斷
     EA = 1; // 開啟總中斷
     while (1) {
         key_scan();
     }
 }
 ?
 void timer0() interrupt 1 {
     static unsigned char cnt = 0;
     if (cnt >= 100) {
         cnt = 0;
     }
     if (cnt < pwm) {
         LED = 0;
     } else {
         LED = 1;
     }
     cnt++;
 }

以上代碼中,使用了定時器0來產(chǎn)生PWM信號,控制LED的亮度。使用了兩個按鍵來調(diào)整LED的亮度和滅度。其中,KEY_UP按鍵用于增加LED的亮度,KEY_DOWN按鍵用于減小LED的亮度。在每次定時器中斷時,根據(jù)pwm的值來控制LED的亮度。當cnt小于pwm時,LED為低電平,LED亮度較高;當cnt大于等于pwm時,LED為高電平,LED亮度較低。

審核編輯:湯梓紅

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

    關注

    240

    文章

    22907

    瀏覽量

    650124
  • 單片機
    +關注

    關注

    6023

    文章

    44376

    瀏覽量

    628404
  • PWM
    PWM
    +關注

    關注

    114

    文章

    5058

    瀏覽量

    212196
  • 51單片機
    +關注

    關注

    272

    文章

    5689

    瀏覽量

    122169
  • 呼吸燈
    +關注

    關注

    10

    文章

    108

    瀏覽量

    42637
收藏 人收藏

    評論

    相關推薦

    51單片機呼吸程序設計

    51單片機呼吸程序設計是基于單片機的原理與接口設計,采用單片機I/O口,加以C語言編程實現(xiàn)LE
    發(fā)表于 07-14 07:54

    基于51單片機呼吸怎樣設計

    課程設計報告書題目:基于51單片機呼吸設計信息工程學院課程設計任務書學 號1學生姓名專業(yè)(班級)設計題目基于51
    發(fā)表于 07-15 08:01

    如何利用51單片機實現(xiàn)呼吸的設計?

    如何利用51單片機實現(xiàn)呼吸的設計?
    發(fā)表于 10-19 06:24

    基于51單片機的七彩呼吸設計資料分享

    ”。(4)按鍵3按下時,恢復起始亮法。1 先做一個呼吸由易到難,先做一個呼吸呼吸是讓小
    發(fā)表于 11-19 07:11

    51單片機呼吸的實現(xiàn)源程序

    51單片機呼吸的實現(xiàn),源程序,hex文件都有,用到的led是共陰極的
    發(fā)表于 12-10 16:35 ?168次下載

    使用51單片機做一個簡易呼吸的程序免費下載

    本文檔的主要內(nèi)容詳細介紹的是使用51單片機做一個簡易呼吸的程序免費下載。
    發(fā)表于 04-01 08:00 ?1次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機</b>做一個簡易<b class='flag-5'>呼吸</b><b class='flag-5'>燈</b>的程序免費下載

    使用單片機設計的呼吸程序免費下載

    本文檔的主要內(nèi)容詳細介紹的是使用單片機設計的呼吸程序免費下載。
    發(fā)表于 08-02 17:34 ?2次下載
    使用<b class='flag-5'>單片機設</b>計的<b class='flag-5'>呼吸</b><b class='flag-5'>燈</b>程序免費下載

    使用51單片機設計LED點陣呼吸效果程序免費下載

    本文檔的主要內(nèi)容詳細介紹的是使用51單片機設計LED點陣呼吸效果程序免費下載。
    發(fā)表于 07-04 17:41 ?20次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機設</b>計LED點陣<b class='flag-5'>呼吸</b><b class='flag-5'>燈</b>效果程序免費下載

    使用51單片機實現(xiàn)的呼吸工程文件免費下載

    本文檔的主要內(nèi)容詳細介紹的是使用51單片機實現(xiàn)的呼吸工程文件免費下載。
    發(fā)表于 09-03 08:00 ?13次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機</b>實現(xiàn)的<b class='flag-5'>呼吸</b><b class='flag-5'>燈</b>工程文件免費下載

    51單片機設計簡易交通

    **51單片機設計簡易交通**單片機好難啊 (好像學啥都難。。。)皮毛也沒學到設計簡陋(尷尬)不過通過自己的學習做出了一點東西 雖然很簡陋 但還是很讓人開心啊使用Proteus設計電
    發(fā)表于 11-04 11:21 ?38次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機設</b>計簡易交通<b class='flag-5'>燈</b>

    51單片機 呼吸 七彩呼吸

    呼吸”。(4) 按鍵3按下時,恢復起始亮法。1 先做一個呼吸由易到難,先做一個呼吸。呼吸
    發(fā)表于 11-12 11:51 ?57次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b> <b class='flag-5'>呼吸</b><b class='flag-5'>燈</b> 七彩<b class='flag-5'>呼吸</b><b class='flag-5'>燈</b>

    51單片機基于定時器的精準呼吸

    51單片機基于定時器的精準呼吸設計目的:實現(xiàn)LED小從最暗到最亮再到最暗的循環(huán)顯示最暗——最亮——最暗整個周期為2.88秒(符合
    發(fā)表于 11-21 09:51 ?50次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>基于定時器的精準<b class='flag-5'>呼吸</b><b class='flag-5'>燈</b>

    51單片機心形實現(xiàn)旋轉呼吸流水編程

    51單片機心形實現(xiàn)旋轉呼吸流水編程
    發(fā)表于 11-23 16:20 ?23次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>心形<b class='flag-5'>燈</b>實現(xiàn)旋轉<b class='flag-5'>呼吸</b><b class='flag-5'>燈</b>流水編程

    基于51單片機呼吸程序編寫

    利用51單片機編寫的呼吸小程序,實驗程序內(nèi)容截圖分享~
    發(fā)表于 11-23 16:36 ?33次下載
    基于<b class='flag-5'>51</b><b class='flag-5'>單片機</b>的<b class='flag-5'>呼吸</b><b class='flag-5'>燈</b>程序編寫

    51單片機呼吸頻率怎么調(diào)節(jié)

    51單片機呼吸頻率的調(diào)節(jié)方法可以通過改變PWM(脈沖寬度調(diào)制)的工作周期和占空比來實現(xiàn)。在下面的文章中,我將詳細介紹如何使用51
    的頭像 發(fā)表于 12-19 10:39 ?1839次閱讀