找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3330|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

如何用51單片機(jī)實(shí)現(xiàn)呼吸燈(2秒變亮,4秒變暗)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:613250 發(fā)表于 2020-10-4 15:56 來自手機(jī) | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
是利用占空比嗎?比如我把初始占空比設(shè)為50%,每次增加2%,到90%時,再每次減少1%,到50%.這樣可行嗎?還有pwm的周期一般設(shè)為多少合適。再者,利用proteus如何看到呼吸燈的效果。初學(xué)51,求各路大佬賜教!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:138956 發(fā)表于 2020-10-4 18:50 | 只看該作者

//包含該文件可以使用_nop_()函數(shù)
#include <intrins.h>

unsigned int Num=0;         //聲明遞增 遞減變量
unsigned int Clock=3000;  //聲明變量 這個變量就是肉眼看到的變快變慢的參數(shù)

/***********************************************
函數(shù)名稱:Delay_us
功    能:
入口參數(shù):us:延時
返 回 值:無        
備    注:內(nèi)部時鐘:24MHz           
************************************************/
void Delay_us(unsigned int i) //這個延時就是PWM的頻率了 太大眼睛能看到閃來閃去
{
        for(;i>0;i--)               
                _nop_();        
}
/***********************************************
函數(shù)名稱:husi_led
功    能:呼吸燈
入口參數(shù):us:延時數(shù)量
返 回 值:無        
備    注:
************************************************/
void husi_led(void)
{
while(1)
   {
      for(Num=Clock;Num>0;Num--) //led逐漸變暗
          {                        
       P05=1;                       //測試LED燈                        
       Delay_us(Num);         //3000慢慢減 慢慢變暗
       P05=0;                       //測試LED燈                                         
       Delay_us(Clock-Num);     
          }                                       
       P05=0;                  //測試LED燈
//**************************************//                                       
      for(Num=0;Num<Clock;Num++)  //led逐漸變亮
         {
       P05=1;                     //測試LED燈
       Delay_us(Num);       //0慢慢加 慢慢變亮
       P05=0;                     //測試LED燈            
       Delay_us(Clock-Num);                                                   
         }                                       
       P05=1;                    //測試LED燈
         }
}
大致是變亮3秒,變暗3秒,你看看吧!
回復(fù)

使用道具 舉報

板凳
ID:825447 發(fā)表于 2020-10-4 21:28 | 只看該作者
你在延時函數(shù)上稍加改動即可
聲明延時函數(shù)void delay(uint)
然后主函數(shù)
void main()
{}
在主函數(shù)里加上延時函數(shù)delay(m)//此處m值你可以直接改,m值改變延時用的時間也隨之改變了
最后再寫下具體的延時函數(shù)
void delay(uint m)
{
  uint x , y ;
  for(x = m ; x > 0 ; x-- )
     for(y = 110 ; y > 0 ; y--);
}
想要具體調(diào)時間可以用keil里面的調(diào)試器,設(shè)置斷點(diǎn)執(zhí)行
回復(fù)

使用道具 舉報

地板
ID:337139 發(fā)表于 2020-10-5 20:43 | 只看該作者
有多種方法的呀!占空比是其中一種,頻率在nHz比較好?吹们宄恍6龢堑姆椒ㄒ彩强扇〉。樓主你試一下。多調(diào)試就OK了。
回復(fù)

使用道具 舉報

5#
ID:613250 發(fā)表于 2020-10-5 21:40 | 只看該作者
長風(fēng)007 發(fā)表于 2020-10-5 20:43
有多種方法的呀!占空比是其中一種,頻率在nHz比較好?吹们宄恍。二三樓的方法也是可取的。樓主你試一 ...

嗯,nHz大概是多少
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表