LED燈的51單片機pwm控制實例

2021-02-13 EDN電子技術設計

我們知道 51單片機本身是沒有pwm接口的,這個程序是通過軟體模擬pwm.在一定的頻率的方波中,調整高電平和低電平的佔空比,即可實現LED燈亮度控制。

要用51產生PWM去控制LED,首先要確定PWM的周期T和佔空比D,確定了這些以後,可以用定時器產生一個時間基準t,比如定時器溢出n次的時間是PWM的高電平的時間,則D*T=n*t,類似的可以求出PWM低電平時間需要多少個時間基準n'。

那麼就可以編寫程序,根據定的時間基準t給定時器賦值初始化,然後開啟定時器,定義一個標誌位flag,根據flag的狀態決定輸出高平還是低電平,假設定義flag=1的時候輸出高電平,用一個變量去記錄定時器中斷的次數,每次中斷就讓記錄中斷次數的變量+1,在中斷程序裡面判斷這個變量的值是否到了n,如果到了說明高電平的時間夠了,那麼就改變flag為0,輸出低電平,同時記錄中斷變量的值清零,每次中斷的時候依舊+1,根據flag=0的情況跳去判斷記錄變量的值是否到了n' 如果到了,說明PWM的低電平時間夠了,那麼就改flag=1,輸出改高電平,同時記錄次數變量清零,重新開始,如此循環便可得到想要的PWM波形。

/******************************************************************************************

* 文件:PWM.c         

* 備註:51單片機PWM完全注釋          *

******************************************************************************************/

#include <STC89.H>

unsigned char CYCLE;      /*PWM周期長度*/

unsigned char count = 0;        /*記錄中斷次數*/

unsigned char PWM_ON;      /*PWM高電平時間計數*/

void delay()          /*延時約78ms*/

{

unsigned char i, j;

for(j = 100; j; j--)

for(i = 255; i; i--)

;

}

void main()

{

bit Flag;       /*變化狀態標誌,0:漸亮,1:漸暗*/

TMOD = 0x01;           /*時間基準為1ms*/

TH0 = (65536 - 100) / 256;      /*右端表達式編譯後為0xFF*/

TL0 = (65536 - 100) % 256;      /*同上*/

IE = 0x82;       /*開定時器0中斷0x82 = 10000010*/

TR0 = 1;          /*啟動定時器0*/

CYCLE = 10;           /*十級亮度,即十級PWM*/

while(!Flag)          /*漸亮,每一次變化亮度增加1*/

{

delay();          /*延時*/

PWM_ON++;       /*高電平脈寬延長,即亮度增加*/

if(PWM_ON == CYCLE)       /*若高電平脈寬增長到整個周期*/

{

Flag = 1;       /*則轉為漸暗*/

}

}

while(Flag)       /*漸暗,每一次變化亮度減少1*/

...

完整精彩全文請看原文連結。

微信用戶如何查閱及一秒鐘分享好文

點擊右上角→發送給朋友

點擊右上角→分享到朋友圈或騰訊微博

點擊右上角→複製連結,可發送到電腦上查看

如何訂閱EDN微信

添加朋友→查找微信公眾帳號:edn-china

點擊右上角→查看公共帳號→添加關注

喜歡此文請點讚↓

進入edn-china帳號,點擊右上角的小頭像,點擊「查看歷史消息」可查看其它精彩信息。。。


點擊下方↓「閱讀原文」即可查看文章詳情和全文。


歡迎邀請好友關注「edn-china",最精彩的電子資訊和資料地帶!

相關焦點

  • 用51單片機實現pwm專題及常見問題 - CSDN
    基於51單片機脈衝寬度調製(即PWM)直流電機轉速快慢以及霍爾測速的項目一、前言1、基於51單片機脈衝寬度調製(即PWM)直流電機轉速快慢以及霍爾測速的項目包括用Keil軟體編寫單片機C語言程序和用
  • PWM(脈寬調製)——LED特效呼吸燈設計
    ,百度盤群組分享連結更新時間:2016-03-06,失效請在文末留言,不要在後臺留言  簡述PWM  PWM——脈寬調製信號(Pulse Width Modulation),它利用微處理器的數字輸出來實現,是對模擬電路控制的一種非常有效的技術,廣泛應用於測量、通信、功率控制與變化等許多領域。
  • 51單片機系列之2點亮第一個led燈
    點亮led燈簡單的理解就是要求陽極高電平陰極低電平。接下來我們去看看單片機的原理圖,找到led模塊。如圖可以看到led的陽極是連接的VCC(電源高電平)陰極連接的接口是單片機的I/O口P20到P27.要想led點亮只需控制單片機I/O口輸出低電平即可(單片機I/O口默認高電平)。接下來就是如何編寫程序並燒錄到單片機中了。
  • 51單片機利用LED宏,控制LED等的亮度
    今天嘗試控制燈的亮度. 先試試for循環控制,佔空比調節...c代碼//#include my51.h#includetypedef unsigned char u8;typedef unsigned short int u16;#ifndef _51LED_#define _51LED_#define led P1 //P1總線連8個led燈,燈連
  • 51單片機PWM的控制
    通過對連接和斷開時間的控制,只要帶寬足夠,可以輸出任意不大於最大電壓值的模擬電壓。輸出電壓=(接通時間/脈衝時間)*最大二、51單片機的Timer作者用的單片機是STC89C52,其內部有3個16位Timer,分別為T/C0,T/C1,T/C2,通過配置相關寄存器即可實現Timer的功能控制
  • 單片機小製作,LED小燈瓶
    控制原理為什麼6個I/O能控制12個LED呢?它們之間會不會相互影響呢?其實,這樣的連接方式不僅能控制每個LED,還能控制其亮度呢!之所以能這樣連接,是因為AVR單片機的每個I/O都是3態輸出。如果用普通51單片機,這樣連接是不行的。那麼又是如何控制LED的亮度呢?控制亮度的關鍵是ATtiny13的兩路PWM,它們可以分別設置連接到PB0和PB1引腳上。
  • 51單片機玩轉物聯網基礎篇05-控制繼電器
    前言本節我們開始學習如何使用51單片機控制繼電器,有了繼電器,我們可以使用單片機輸出的低電平控制高電平期間工作,比如繼電器接到220V用電器上,可通過單片機智能控制用電器。從上圖可知,給繼電器模塊供電後,紅色LED燈就會被點亮,當給IO引腳輸入第電平後,單片機IO輸出的電流經過S8550放大後,驅動繼電器SRD-05V,繼電器中5
  • 51單片機之計時器與計數器
    =~led; } } 關鍵字:51單片機  計時器  計數器 編輯:什麼魚 引用地址:http://news.eeworld.com.cn/mcu/ic494675.html
  • 51單片機與esp8266例程實現的LED無線控制
    一、關於51單片機和無線WIFI模塊的接線方面   RXD、TXD、GND和51單片機的TXD、RXD、GND接好,模塊其他引腳均為高電平,電源VCC是3.3V左右(兩節1.5v乾電池),本人由於沒有穩壓模塊,偷懶了當時使用5V的直流源,測試結果目前沒有問題(不過不建議啊!)
  • 基於proteus的51單片機開發實例37-DAC0832
    基於proteus的51單片機開發實例37-DAC08321.1. 實驗目的之前我們學習了數模轉換晶片DAC0808,今天我們繼續學習另一種D/A轉換晶片DAC0832。設計思路圖1 DAC0832電路本例中使用51單片機控制D/A
  • 51單片機玩轉物聯網基礎篇02-點亮LED燈,實現跑馬燈效果
    前言上一節,我們完成了51單片機開發環境的搭建,本節我們正式學習51單片機,程式語言的學習,通常是從第一個&34;開始,而點燈實驗便是單片機學習的開始。RST引腳,只需要將此引腳保持一段時間高電平即可復位STC89C52單片機,當RESET案件按下瞬間,C9還未充電,兩端電壓為0,R4兩端電壓為5V,5V為高電平,作為復位信號經RST引腳送入單片機,對單片機進行復位,同時隨著電源對C9充電,C9電源不斷上升,R4兩端電壓不斷下降,當C9兩端電壓達到5V時,充電結束,此時R4兩端電壓為0,單片機RST引腳變為低電平,單片機進入正常工作裝填,復位完成。
  • 51單片機入門:LED燈實現不同頻率閃爍
    在上一篇文章中,我們用51單片機實現了單個LED燈的閃爍,但閃爍頻率固定的。下面我們實現LED燈不同頻率的閃爍!
  • 單片機C語言編程實現對舵機控制
    單片機通過控制舵機實現小車的轉向。本文主要介紹如何使用51單片機實現對舵機進行偏轉角度控制。所使用舵機型號為MG996R,使用晶片為STC89C52。51單片機開發板周期20ms主要藉助51單片機定時器1設置在0.5ms產生中斷,在中斷處理函數中設置高低電平。同時通過變量記錄中斷執行次數,當次數達到40時即為一個周期20ms。本例測試使用51單片機開發板,按鍵K2與K3控制舵機角度增加與減少,其中K2對應P3.4引腳,K3對應P3.5引腳。
  • 基於51單片機設計的簡易智慧機器人
    引言 隨著微電子技術的不斷發展,微處理器晶片的集成程度越來越高,單片機已可以在一塊晶片上同時集成cpu、存儲器、定時器/計數器、並行和串行接口、看門狗、前置放大器、a/d轉換器、d/a轉換器等多種電路,這就很容易將計算機技術與測量控制技術結合,組成智能化測量控制系統
  • 基於proteus的51單片機開發實例24-矩陣鍵盤(行列式鍵盤)
    基於proteus的51單片機開發實例24-矩陣鍵盤1.1.我們知道,51單片機總共只有4個8位I/O口,如果外部電路功能較多,I/O口就會不夠用,例如如果電路中接了一個8位數碼管,又接了16個按鍵,那麼即使數碼管採用動態掃描法 也需要佔用16個I/O口(8位I/O口用於連接數碼管8個段,另8位I/O口用於控制8位數碼管的每一位),這時如果按鍵還是採用獨立按鍵的接法
  • 「初識Arduino - 3」PWM控制LED燈
    是將模擬信號變為脈衝的一種技術(用數字來控制模擬輸出的一種手段)。PWM可以控制LED亮度、控制馬達速度、控制直流電動機的速度等正弦波、方波、三角波與鋸齒波Arduino數字引腳給我們提供了我們無法得到0-5V之間的電壓(串聯電阻可以),但是我們可以通過改變信號的開關時間來改變LED亮度(即控制佔空比)PWM是一種方波控制信號,方波高電平的寬度在一個周期裡的佔比被稱為佔空比(Duty Cycle)。改變PWM的佔空比,可以改變輸出信號的平均電壓,實現模擬電壓的輸出。
  • 51單片機改造LED燈管
    主要改動在關LED燈這個步驟,我需要增加一個功能,能夠通過遙控器來對LED燈管進行斷電操作。接著就是需求分析並確認方案對於上述需求的分析,考慮到自己手頭閒置很久模塊物料的最大化的利用(主要是為了省錢)最終定下來的方案如下(使用模塊基本都是以前自學使用的,後面基本都閒置了):主控晶片:STC90C516RD+遙控:紅外遙控器+紅外接收模塊通斷電:繼電器開關模塊啟動開關:無鎖開關東西都準備好了,接下來需要進行原理圖的設計和各模塊之間的連接
  • 單片機中PWM的原理與控制程序
    那為何它能對模擬電路進行控制呢?大家想一想,我們數字電路裡,只有 0 和 1 兩種狀態,比如我們第 2 章學會的點亮 LED 小燈那個程序,當我們寫一個 LED = 0;小燈就會長亮,當我們寫一個 LED = 1;小燈就會滅掉。當我們讓小燈亮和滅間隔運行的時候,小燈是閃爍。
  • 基於proteus的51單片機開發實例33-單片機的編程規範
    基於proteus的51單片機開發實例33-單片機程序的編程規範說明:本文中所說的編程規範只是我個人的一些想法和實踐,有些經驗可能並不能適合所有場合,當然也不可避免的有比較偏頗的看法,請大家多多批評指正。
  • 基於51系列單片機的智能照明控制系統設計方案
    目前我國高校的教學樓和學生宿舍的照明系統大多採用定時方式控制,存在電能的大量浪費和照明模式不靈活等問題。本文基於51單片機,通過設置時間、感應光照與聲音,針對教學樓和宿舍的不同需求設定照明狀態,實現對照明系統智能動態的控制。測試結果表明該系統可以在不同條件下改變照明狀態,適應不同場所的需求,達到智能控制的目的。