標(biāo)題: 單片機(jī)PWM控制LED增減光實(shí)驗(yàn) Proteus仿真加源程序 [打印本頁(yè)]

作者: 51黑電子happy    時(shí)間: 2017-3-29 23:26
標(biāo)題: 單片機(jī)PWM控制LED增減光實(shí)驗(yàn) Proteus仿真加源程序
用51單片機(jī)的PWM控制實(shí)現(xiàn)LED增減光的仿真原理圖(proteus工程文件可到本帖附件下載):


51單片機(jī)源程序:
  1. //---------------------------------------------------------------------
  2. //程序名:PWM7-2.c
  3. //程序功能:PWM控制LED增減光。
  4. //---------------------------------------------------------------------
  5. #include <reg51.h>
  6. sbit OUT=P2^7;                                 //PWM輸出
  7. sbit INC=P2^0;                                 //增加亮度按鈕K1接口
  8. sbit DEC=P2^1;                                 //減小亮度按鈕K2接口

  9. //--------------------------- 定時(shí)器0中斷函數(shù) ------------------------
  10. //頻率
  11. void Timer0(void) interrupt 1                  //定時(shí)器0中斷
  12.   {
  13.      OUT=1;                                     //關(guān)LED
  14.      TL0=0;
  15.      TR1=1;                                     //打開(kāi)脈寬定時(shí)
  16.   }

  17. //-------------------------- 定時(shí)器1中斷函數(shù) -------------------------

  18. //脈寬
  19. void Timer1(void) interrupt 3                  //定時(shí)器1中斷
  20.   {
  21.      OUT=~OUT;                                  //開(kāi)LED
  22.      TR1=0;                                     //脈寬調(diào)節(jié)結(jié)束
  23.   }   

  24. //--------------------------- 消抖延時(shí)函數(shù) ----------------------------

  25. delay()
  26. {
  27.   unsigned int i;
  28.   for(i=0;i<2000;i++);
  29. }
  30. //---------------------------- 定時(shí)器設(shè)置函數(shù) ---------------------------
  31. INIT_TIMER()
  32.    {
  33.      TMOD=0x22;                                  //設(shè)置T1、T0為模式2方式,自動(dòng)重裝
  34.      TH1=0;                                      //脈寬寬度
  35.      TL1=0;
  36.      TH0=0;                                      //頻率調(diào)節(jié)=0頻率最低
  37.      TL0=0;   
  38.      TR0=1;                                      //啟動(dòng)T0定時(shí)
  39.      EA=1;                                       //允許總中斷
  40.      ET1=1;                                      //允許定時(shí)器1中斷
  41.      ET0=1;                                      //允許定時(shí)器0中斷
  42.    }

  43. //------------------------------- 主函數(shù) -------------------------------

  44. main()
  45. {
  46.    
  47.    INIT_TIMER();

  48. // 無(wú)限循環(huán)       
  49.         while(1)
  50.      {
  51.        INC=1;DEC=1;
  52.        if (INC==0)
  53.           { delay();
  54.            if (INC==0)  
  55.                {
  56.                 if (TH1<240) TH1++;
  57.                }
  58.           }
  59.        else if (DEC==0)
  60.           { delay();
  61.            if (DEC==0)  
  62.                {
  63.                 if (TH1>0) TH1--;
  64.                }
  65.           }

復(fù)制代碼




該系列源碼包含有很多非常經(jīng)典,代碼風(fēng)格十分規(guī)范,而且注釋詳細(xì)的單片機(jī)例程,還帶仿真,對(duì)于MCU學(xué)習(xí)特別是初學(xué)者是很有幫助的,全部源碼下載(共25個(gè)項(xiàng)目):http://www.torrancerestoration.com/bbs/dpj-79328-1.html

本例程下載(含proteus仿真工程文件與源碼):
7-2單片機(jī)PWM控制LED增減光實(shí)驗(yàn).rar (31.54 KB, 下載次數(shù): 148)




作者: aa1209459220    時(shí)間: 2017-8-4 21:53
謝謝樓主 好資料,51黑有你更精彩!!!

作者: 飲冰人    時(shí)間: 2017-12-19 17:05
謝謝樓主
作者: 小白帆    時(shí)間: 2018-3-13 17:20
為什么我使用了你的程序,但是仿真的時(shí)候LED根本不會(huì)亮,雖然有脈沖,但是寬度也太小了,可能就是這個(gè)原因,LED不會(huì)亮~難過(guò)(ಥ﹏ಥ)
作者: 小白帆    時(shí)間: 2018-3-14 13:52
還有,程序第59行怎么感覺(jué)怪怪的,按鍵在一開(kāi)始就讓它的值為1?什么情況?
作者: raymondau    時(shí)間: 2018-3-15 20:16
這個(gè)能控制LED臺(tái)燈的嗎?電路要怎么改?
作者: llly    時(shí)間: 2018-7-10 10:56
這個(gè)可以實(shí)現(xiàn)燈光可調(diào)的智能化
作者: lsjet    時(shí)間: 2021-6-21 14:49
求教如何實(shí)現(xiàn)




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1