找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 11441|回復(fù): 6
收起左側(cè)

[求助]呼吸燈的編程思路(C語言)

[復(fù)制鏈接]
ID:43384 發(fā)表于 2012-7-29 00:59 | 顯示全部樓層 |閱讀模式
 呼吸燈的代碼怎么寫呀,燈的狀態(tài)不是只有亮和滅兩種么?難道還可以設(shè)置不同的亮度?
回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2012-7-29 01:00 | 顯示全部樓層

用pwm啊   脈寬調(diào)制

回復(fù)

使用道具 舉報(bào)

ID:27916 發(fā)表于 2012-7-29 12:46 | 顯示全部樓層

忽明忽暗

 

 

 

 

回復(fù)

使用道具 舉報(bào)

ID:134288 發(fā)表于 2016-7-30 21:55 | 顯示全部樓層
admin 發(fā)表于 2012-7-29 01:00
用pwm啊   脈寬調(diào)制

雖說可以用pwm,但就是不理解原理,脈寬調(diào)制他的輸出也只有高電平和低電平啊,是不是還得加da轉(zhuǎn)換
回復(fù)

使用道具 舉報(bào)

ID:94554 發(fā)表于 2016-7-31 08:18 | 顯示全部樓層
/***************************************************************  
* 程序說明:使用P3.2和P3.4來控制P0端口的LED燈,達(dá)到手動(dòng)調(diào)節(jié)漸亮或漸滅(也可一直按著),  
            到最亮或最暗時(shí)蜂鳴器發(fā)出提示聲音;  
////////////////////////////////////////////////////////////////
晶振 11.0592M
* 利用定時(shí)器控制產(chǎn)生占空比可變的 PWM 波  
* 按int0鍵,PWM值增加,則占空比減小,LED 燈漸暗。  
* 按t0鍵,PWM值減小,則占空比增加,LED 燈漸亮。  


什么是PWM技術(shù)?簡(jiǎn)而言之,PWM是一種對(duì)模擬信號(hào)電平進(jìn)行數(shù)字編碼的方法。通過計(jì)
數(shù)器的使用,方波的占空比被調(diào)制用來對(duì)一個(gè)具體模擬信號(hào)的電平進(jìn)行編碼。PWM信號(hào)仍然
是數(shù)字的,因?yàn)樵诮o定的任何時(shí)刻,滿幅值的直流供電要么完全有(ON),要么完全無(OFF)。
電壓或電流源是以一種通(ON)或斷(OFF)的重復(fù)脈沖序列被加到模擬負(fù)載上去的。通的時(shí)候即
是直流供電被加到負(fù)載上的時(shí)候,斷的時(shí)候即是供電被斷開的時(shí)候。只要帶寬足夠,任何模擬
值都可以使用PWM進(jìn)行編碼。
MCS-51系列單片機(jī)本身無PWM輸出功能, 但可以采用定時(shí)器配合軟件的方法對(duì)輸出脈沖進(jìn)行調(diào)
寬來模擬實(shí)現(xiàn),對(duì)精度要求不是太高的場(chǎng)合是非常實(shí)用的。
****************************************************************/   
   
#include  <reg52.h >   
#include  <intrins.h >   
sbit S1 =P3^2;  //定義P3.2為增加鍵   
sbit S2 =P3^4;  //定義P3.3為減少鍵   
sbit leds =P1^4;  //定義P3.3為減少鍵
sbit  BELL =P2^2;   //定義蜂鳴器   
unsigned char PWM=0x7f; //PWM賦初值   
void Bee();   
void delayms(unsigned char ms);   
void delay(unsigned char t);   
   
/*--------------------------------------------------*/   
void main() //主程序   
{     
    leds =0;
    P0=0xff;   
    TMOD=0x21;   
    TH0=0xfc;   //1ms延時(shí)常數(shù)   
    TL0=0x66;   //頻率調(diào)節(jié)   
   
    TH1=PWM ;   //脈寬調(diào)節(jié)   
    TL1=0 ;   
   
     EA=1;   
     ET0=1;   
     ET1=1;   
      
     TR0=1 ;   
   
   while(1)   
   {   
     do{   
            if(PWM!=0xff)   
           {PWM++ ;delayms(10);}   
           else Bee();   
         }   
     while(S1==0);   
   
     do{   
           if(PWM!=0x02)   
          {PWM-- ;delayms(10);}   
           else Bee() ;   
          }   
     while(S2==0);   
   }   
}   
   
// ---------------------------定時(shí)器0中斷服務(wù)程序   
void timer0() interrupt 1   
{     
    TR1=0;   
    TH0=0xfc;   
    TL0=0x66;   
    TH1=PWM;   
    TR1=1;   
    P0=0x7f ;   //啟動(dòng)輸出   
}   
   
//---------------------------- 定時(shí)器1中斷服務(wù)程序   
void timer1() interrupt 3   
{   
    TR1=0 ;   
    P0=0xff ;   //結(jié)束輸出   
}   
   
//-------------------------------蜂鳴器子程序   
void Bee()        
  {   
      unsigned char i  ;   
      for (i=0  ;i<100  ;i++)   
        {   
          delay(100)  ;   
          BELL=!BELL  ;//BeLL取反   
        }   
     BELL=1  ;                            //關(guān)閉蜂鳴器   
     delayms(100);   
  }   
   
//-------------------------------- 延時(shí)子程序1   
void delay(unsigned char t)   
{   
    while(t--);   
}   
   
//--------------------------------- 延時(shí)子程序2   
void delayms(unsigned char ms)   
   
{   
    unsigned char i;   
    while(ms--)   
     {   
        for(i=0;i<120;i++);   
     }   
}  
回復(fù)

使用道具 舉報(bào)

ID:180018 發(fā)表于 2017-3-24 21:47 | 顯示全部樓層
沒用呀
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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