欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 我想用單片機進行pwm分級調整改變LED亮度 [打印本頁]

作者: 汪巖    時間: 2020-1-2 21:24
標題: 我想用單片機進行pwm分級調整改變LED亮度
最后進行調試時候,為什么這個發光二極管led就總是一閃一閃的,加1時候,led閃得越來越快?
這算是調整亮度嗎?我要是亮和暗那種樣子。

程序都編輯好了
sbit led1=P2^0;
sbit led2=P2^2;
sbit PWM=P3^7;
sbit key1=P2^6;//A加
sbit key2=P2^7;
u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值
u8 fenpin=1;                       
u16 chuzhi=500;        
u16 timer0;                                       
void delay(u16 i)
{
        while(i--);        
}

void key()
{
  if(key1==0)   //A加
        {
          delay(100);
                 if(key1==0)
           {
                          if(fenpin<16)
                                {
                     fenpin++;
                                        beep=0;
                                }else
                                {
                                 beep=1;
                                }
                 }
                 while(!key1);
        }
        if(key2==0)     //A減
        {
          delay(100);
                 if(key2==0)
           {
                         if(fenpin>=2)
                         {
                           fenpin--;
                                  beep=0;
                         }else
                         {
                            beep=1;
                         }
                 }
                 while(!key2);
        }
}
void timer_init(void)  //定時器初始化函數
{
        TMOD=0X51;          //設置定時器工作模式
        PT0=1;     
        TH0 = (65536 -chuzhi)/256;//給定時器賦初值
        TL0 = (65536 -chuzhi)%256;
        TH1=0;              //不設初值
        TL1=0;
        ET0=1;              //開中斷
        ET1=1;
        TR0=1;              //開定時器
        TR1=1;
        EA=1;               //開總中斷
}
void main()
{        
        timer_init();
         beep=0;
        while(1)
        {
                        key();
               
        }
}


void timer() interrupt 1          //定時器0中斷函數
{
        TH0 = (65536 - chuzhi)/256;//給定時器賦初值
        TL0 = (65536 - chuzhi)%256;
        timer0=!timer0;          //時間變量
        if(TL1>=fenpin)
                {
                  TL1=0;
                        PWM=!PWM;
                }
  if(timer0)
        {
                P1=0x00;
          led1=0;
    led2=1;        
                P1=smgduan[fenpin/10];
        }else
        {
                P1=0x00;
          led1=1;
    led2=0;               
                P1=smgduan[fenpin%10];
        }
}         

51hei圖片_20200102211904.png (147.7 KB, 下載次數: 41)

51hei圖片_20200102211904.png

作者: hantu    時間: 2020-1-3 09:16
仿真的只能這樣閃了,你要用實物單片機的led燈才能真正展現亮度的變化
作者: 汪巖    時間: 2020-1-3 10:10
hantu 發表于 2020-1-3 09:16
仿真的只能這樣閃了,你要用實物單片機的led燈才能真正展現亮度的變化

但是 我用實物焊接單片機led燈,其他什么沒問題,就這個led燈,我加1時候最后,它就是閃閃閃著閃爍,感覺沒有亮度調整。
作者: 還有誰?    時間: 2020-1-3 10:46
將你后面PWM如下圖這樣接就能看到仿真的亮度變化

pwm.jpg (29.18 KB, 下載次數: 48)

pwm.jpg

作者: Y_G_G    時間: 2020-1-4 11:04
我在這總能看到很多人先花很大精力去解決好仿真的問題,總感覺仿真OK了就萬事大吉了一樣,然后拼命的解決好了仿真的問題,實物卻又是另外一回事,何苦呢?
這原本是一個很簡單的項目:
1,把PWM頻率設定為1KHZ,不管是延時,定時器還是片上自帶的PWM功能都行,這1KHZ是大多LED調光都用的頻率,可以適應90%以上的LED
2,LEDVF值(就是LED的正向導通壓降)不同,它對PWM占空比的亮度變化也不同,所以,你就設定9個等級,占空比從10%到90%,每次調節占空比加1,然后你就可以大概知道這個LED要怎么調節了。
3,如果你連占空比都不知道怎么調節。…。……。…。…。…。……。…。…。……

作者: 笑看天下    時間: 2020-1-4 20:32
仿真玩的好,實物做起來才更簡單!有些個人自以為隨便說說就是解決了問題,其實是沒有入到精髓!




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