久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4014|回復: 21
打印 上一主題 下一主題
收起左側

單片機控制LED燈怎樣從暗到亮?

  [復制鏈接]
跳轉到指定樓層
樓主
ID:826754 發表于 2021-9-3 08:10 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位大佬,如題怎樣編寫LED燈可以從暗到亮的起動。用P3.7來控制PMOS管。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:10947 發表于 2021-9-3 11:06 | 只看該作者
輸出占空比可調的PWM脈沖
回復

使用道具 舉報

板凳
ID:514901 發表于 2021-9-3 11:57 | 只看該作者
pwm調壓
回復

使用道具 舉報

地板
ID:668693 發表于 2021-9-3 14:41 | 只看該作者
好家伙  我程序都給你發出來
#include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義

sbit LED0=P1^0;// 用sbit 關鍵字 定義 LED到P1.0端口,LED是自己任意定義且容易記憶的符號

void Delay(unsigned int t); //函數聲明
/*------------------------------------------------
                    主函數
------------------------------------------------*/
void main (void)
{
                                                                               
        unsigned int CYCLE=600,PWM_LOW=0;        //定義周期并賦值
        while (1)                                                                         //主循環
                        {
                                 LED0=1;
                                 Delay(60000);                                //特意加延時,可以看到熄滅的過程
                                 for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)//PWM_LOW表示低
                                        {
                                 //電平時間,這個循環中低電平時長從1累加到CYCLE(周期)的值,即600次
                                                        LED0=0;        //點亮LED  
                                                        Delay(PWM_LOW);//延時長度,600次循環中從1加至599
                                                        LED0=1;        //熄滅LED
                                                        Delay(CYCLE-PWM_LOW);//延時長度,600次循環中從599減至1
                                        }
                                        LED0=0;
                                        for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)
                                        { //與逐漸變亮相反的過程
                                                LED0=0;
                                                Delay(PWM_LOW);
                                                LED0=1;
                                                Delay(CYCLE-PWM_LOW);
                                        }                                                 
                        }
}
/*------------------------------------------------
延時函數,含有輸入參數 unsigned int t,無返回值
unsigned int 是定義無符號整形變量,其值的范圍是
0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
while(--t);
}
回復

使用道具 舉報

5#
ID:136485 發表于 2021-9-3 16:01 | 只看該作者
在簡單一點網上有專門調光的IC賣,用555都可以搭個調光電路
回復

使用道具 舉報

6#
ID:149799 發表于 2021-9-3 18:30 | 只看該作者
林神經 發表于 2021-9-3 14:41
好家伙  我程序都給你發出來
#include //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定 ...

謝謝,你是最快的,最直接的幫忙,
回復

使用道具 舉報

7#
ID:420836 發表于 2021-9-4 08:14 | 只看該作者
使用PWM控制應該很容易,在這個論壇上尋找一些示例項目。
回復

使用道具 舉報

8#
ID:267932 發表于 2021-9-4 11:27 | 只看該作者
PWM 控制占空比,或者定時器,模擬PWM改變占空比。
回復

使用道具 舉報

9#
ID:417092 發表于 2021-9-5 19:45 | 只看該作者
100Hz   PWM占空比5%----90%每200ms增加5%
回復

使用道具 舉報

10#
ID:57657 發表于 2021-9-5 20:15 | 只看該作者
例如亮度30%頻率100Hz,10毫秒內3毫秒點亮,7毫秒熄滅,頻率高就會產生視覺暫留,這就叫PWM調光的原理,懂?
回復

使用道具 舉報

11#
ID:956872 發表于 2021-9-5 21:32 | 只看該作者
最簡單的調亮度的
void timer1() interrupt 12
{       zq++;       //周期
      if(zq == 250)
              zq = P1 = 0;
      if(zkb == zq)      //調zkb就能調亮暗   
     P1 = 0xff;   
回復

使用道具 舉報

12#
ID:890186 發表于 2021-9-6 06:50 來自觸屏版 | 只看該作者
用定時器模擬pwm,調占空比,占空比越大越亮
回復

使用道具 舉報

13#
ID:950946 發表于 2021-9-6 11:07 | 只看該作者
利用PWM調占空比,用定時器控制從0%一直到100%。你就能看到led的亮度變化
回復

使用道具 舉報

14#
ID:826754 發表于 2021-9-6 12:02 | 只看該作者
F:\單片機文件\銳志流光燈\銳志轉向流光燈
回復

使用道具 舉報

15#
ID:826754 發表于 2021-9-7 17:08 | 只看該作者
  1. /***使用STC8F1K08S2-SOP16為主控轉向流光燈
  2. 1、上電掃描藍光從兩邊向中間流光一次——藍光從L6流向L1一次——黃光從L1流向L1一次——藍光呼吸燈兩次后滅。
  3. 2、雙閃時,左右同時接到信號,左右跟隨信號同時流光。
  4. 3、接收到左或右轉向信號時相應方向流光一次常亮,中斷滅。
  5. 4、斷開左或右轉向信號時,延時2秒日行燈LED11 100%亮度。
  6. *****/

  7. #include <STC8.H>  
  8. typedef unsigned char u8;
  9. typedef unsigned int u16;
  10. /********端口引腳定義*****/  
  11. sbit KEYL=P5^4;    //設置左方向觸發信號

  12. sbit LED1=P3^2;    //左方向流光燈設定
  13. sbit LED2=P3^3;
  14. sbit LED3=P3^4;
  15. sbit LED4=P3^5;
  16. sbit LED5=P3^6;
  17. sbit LED6=P3^7;   

  18. sbit YU=P1^3;
  19. sbit BU=P1^2;

  20. bit signl=0;       //觸發狀態標志
  21. //bit signk=0;
  22. u16 count3=0,num;

  23. /******函數聲明*******/

  24. void Delay(unsigned int t); //延時函數
  25. void keyScan();                           //觸發子程序函數
  26. void Led_YU();             //呼吸燈函數

  27. /*********定時器0初始化函數***********/
  28. void Timer0Init()                //5毫秒@11.0592MHz
  29. {
  30.         AUXR |= 0x80;                //定時器時鐘1T模式
  31.         TMOD &= 0xF0;                //設置自動重裝模式
  32.         TL0 = 0x00;                        //設置定時初值
  33.         TH0 = 0x28;                        //設置定時初值
  34.         TF0 = 0;                                //清除TF0標志
  35.         TR0 = 1;                                //定時器0開始計時
  36.         EA  = 1;                                //開總中斷
  37.         ET0 = 1;                                //開T0中斷
  38. }
  39. /********左流光函數*********/
  40. void Led_L()
  41. {
  42. YU=1;
  43.         if(num>50)              {LED1=1;LED2=0;LED3=0;LED4=0;LED5=0;LED6=0;}
  44.         else if(num<=50&&num>40){LED1=1;LED2=1;LED3=0;LED4=0;LED5=0;LED6=0;}
  45.         else if(num<=40&&num>30){LED1=1;LED2=1;LED3=1;LED4=0;LED5=0;LED6=0;}
  46.         else if(num<=30&&num>20){LED1=1;LED2=1;LED3=1;LED4=1;LED5=0;LED6=0;}
  47.         else if(num<=20&&num>10){LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;LED6=0;}
  48.         else if(num>0&&num==10) {LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;LED6=1;}
  49. }
  50. /*******右流光函數******/
  51. /**void Led_R()
  52. {
  53.         if(num>50)              {LED6=1;LED7=0;LED8=0;LED9=0;LEDA=0;}
  54.         else if(num<=50&&num>40){LED6=1;LED7=1;LED8=0;LED9=0;LEDA=0;}
  55.         else if(num<=40&&num>30){LED6=1;LED7=1;LED8=1;LED9=0;LEDA=0;}
  56.         else if(num<=30&&num>20){LED6=1;LED7=1;LED8=1;LED9=1;LEDA=0;}
  57.         else if(num<=20&&num>10){LED6=1;LED7=1;LED8=1;LED9=1;LEDA=1;}
  58.        // else if(num>0&&num==10)    {LED6=0;LED7=0;LED8=0;LED9=0;LEDA=0;}
  59. }
  60. /*****掃描流光函數*****/
  61. void Led_BU()
  62. {               

  63.                 if(num>590)                                        {BU=1;P3=0X84;       }
  64.                 else if(num<=590&&num>570)        {BU=1;P3=0X48;       }
  65.                 else if(num<=570&&num>550)        {BU=1;P3=0X30;       }

  66.                 else if(num<=550&&num>530)        {BU=1;P3=0X30;       }
  67.                 else if(num<=530&&num>510)        {BU=1;P3=0X48;       }
  68.                 else if(num<=510&&num>490)        {BU=1;P3=0X84;       }

  69.                 else if(num<=490&&num>480)        {BU=1;P3=0X80;       }
  70.                 else if(num<=480&&num>470)        {BU=1;P3=0X40;       }
  71.                 else if(num<=470&&num>460)        {BU=1;P3=0X60;       }
  72.                 else if(num<=460&&num>450)        {BU=1;P3=0X10;       }
  73.                 else if(num<=450&&num>440)        {BU=1;P3=0X08;       }
  74.                 else if(num<=440&&num>430)        {BU=1;P3=0X04;       }                     
  75.                 else if(num<=430&&num>420)        {BU=1;P3=0X84;       }
  76.                 else if(num<=420&&num>410)        {BU=1;P3=0X44;       }
  77.                 else if(num<=410&&num>400)        {BU=1;P3=0X24;       }
  78.                 else if(num<=400&&num>390)        {BU=1;P3=0X14;       }
  79.                 else if(num<=390&&num>380)        {BU=1;P3=0X0C;       }
  80.                 else if(num<=380&&num>370)        {BU=1;P3=0X8C;       }
  81.                 else if(num<=370&&num>360)        {BU=1;P3=0X4C;       }
  82.                 else if(num<=360&&num>350)        {BU=1;P3=0X2C;       }
  83.                 else if(num<=350&&num>340)        {BU=1;P3=0X1C;       }
  84.                 else if(num<=340&&num>330)        {BU=1;P3=0X9C;       }
  85.                 else if(num<=330&&num>320)        {BU=1;P3=0X5C;       }
  86.                 else if(num<=320&&num>310)        {BU=1;P3=0X3C;       }
  87.                 else if(num<=310&&num>300)        {BU=1;P3=0XBC;       }
  88.                 else if(num<=300&&num>290)        {BU=1;P3=0X7C;       }
  89.                 else if(num<=290&&num>280)        {BU=1;P3=0XFC;       }
  90.                 else if(num<=280&&num>270)        {BU=0;P3=0X00;       }
  91.    
  92.                 else if(num<=270&&num>260)        {YU=1;P3=0X04;       }
  93.                 else if(num<=260&&num>250)        {YU=1;P3=0X08;       }
  94.                 else if(num<=250&&num>240)        {YU=1;P3=0X10;       }
  95.                 else if(num<=240&&num>230)        {YU=1;P3=0X20;       }
  96.                 else if(num<=230&&num>220)        {YU=1;P3=0X40;       }
  97.                 else if(num<=220&&num>210)        {YU=1;P3=0X80;       }                     
  98.                 else if(num<=210&&num>200)        {YU=1;P3=0X84;       }
  99.                 else if(num<=200&&num>190)        {YU=1;P3=0X88;       }
  100.                 else if(num<=190&&num>180)        {YU=1;P3=0X90;       }
  101.                 else if(num<=180&&num>170)        {YU=1;P3=0XA0;       }
  102.                 else if(num<=170&&num>160)        {YU=1;P3=0XC0;       }
  103.                 else if(num<=160&&num>150)        {YU=1;P3=0XC4;       }
  104.                 else if(num<=150&&num>140)        {YU=1;P3=0XC8;       }
  105.                 else if(num<=140&&num>130)        {YU=1;P3=0XD0;       }
  106.                 else if(num<=130&&num>120)        {YU=1;P3=0XE0;       }
  107.                 else if(num<=120&&num>110)        {YU=1;P3=0XE4;       }
  108.                 else if(num<=110&&num>100)        {YU=1;P3=0XE8;       }
  109.                 else if(num<=100&&num>90)        {YU=1;P3=0XF0;       }
  110.                 else if(num<=90&&num>80)        {YU=1;P3=0XF4;       }
  111.                 else if(num<=80&&num>70)        {YU=1;P3=0XF8;       }
  112.                 else if(num<=70&&num>60)        {YU=1;P3=0XFC;       }

  113.                 else if(num<=60&&num>50)        {YU=1;P3=0X7C;       }               
  114.                 else if(num<=50&&num>40)        {YU=1;P3=0X3C;       }
  115.                 else if(num<=40&&num>30)        {YU=1;P3=0X1C;       }
  116.                 else if(num<=30&&num>20)        {YU=1;P3=0X0C;       }
  117.                 else if(num<=20&&num>10)        {YU=1;P3=0X04;       }
  118.                 else if(num<=10&&num>0)            {YU=0;P3=0X00;       }
  119.                        
  120. }
  121. /******主函數區******/  
  122. void main()
  123. {
  124.         u8 i;
  125.         P3M0=0xFC;//設P3.1~3口為推挽輸出,P3.0為準雙向口。      
  126.         P3M1=0x00;
  127.         P1M0=0xFF;//設P1口為推挽輸出,
  128.         P1M1=0x00;         
  129.         P5M0=0x00;//設P5.4、P5.5為準雙向口.        
  130.         P5M1=0xCF;
  131.         P3=0X03;
  132.         P1=0X00;
  133.                 P5=0X30;  //不可設為底電平   
  134.         Timer0Init();
  135.                 if(KEYL==0)
  136.           {
  137.            
  138.                    keyScan(); //把觸發部分的代碼打包成函數放在這里執行

  139.           }
  140.         else
  141.          {      
  142.         for(i=0;i<1;i++)//上電掃描流光1次
  143.                 {
  144.               num=590;//1.秒
  145.             // if(num==460)
  146.                           while(num)
  147.                {
  148.                                
  149.                  Led_BU();
  150.                                
  151.                                        
  152.                      
  153.                }
  154.                             Led_YU();
  155.                                 Led_YU();
  156.                 //        if(num==0)
  157.                 //         {LED11=1;}
  158.                 }  
  159.          }       
  160.                   
  161.     while(1)         
  162.         {      
  163.                 if(KEYL==0)
  164.                  {                         
  165.                         keyScan();
  166.                  }
  167.         }         
  168. }
  169. /*********定時器0中斷服務函數*************/
  170. void timer0() interrupt 1      
  171. {
  172.         /* static unsigned char i=0;
  173.         if(i<3)PWM=1;//占空比75%
  174.         else PWM=0;
  175.         i++;
  176.         i%=4;             */
  177.     //    PWM=~PWM;//PWM周期10ms,占空比50%
  178.                                   
  179.                 if(num>0)
  180.                
  181.                 num--;          
  182.         //if(num==0)
  183.                 if(KEYL!=0)
  184.         {
  185.                         YU=0;
  186.                 LED1=0;LED2=0;LED3=0;LED4=0;LED5=0;LED6=0;
  187.                                
  188.                                 signl=0;
  189.                
  190.              //   signk=0;
  191.                         if(++count3>=150)//3秒延時
  192.               {
  193.                  count3=150; //保持
  194.                  BU=1;
  195.                                   P3=0XFC;              //日行燈亮
  196.                }  
  197.         }
  198. }

  199. /********觸發子程序函數*********/

  200. void keyScan()
  201. {
  202.                             
  203.              if(KEYL==0  && signl==0  )//左轉流光
  204.                 {
  205.                                                 count3=0;        //計數3清0
  206.                         signl=1;
  207.                         num=60;
  208.                         while(num)
  209.                         {
  210.                          BU=0;   
  211.                          Led_L();

  212.                         }
  213.                        
  214.                 }
  215.      
  216. }         


  217. /*------------------------------------------------
  218. 延時函數,含有輸入參數 unsigned int t,無返回值
  219. unsigned int 是定義無符號整形變量,其值的范圍是
  220. 0~65535
  221. ------------------------------------------------*/
  222. void Delay(unsigned int t)
  223. {
  224. while(--t);
  225. }


  226. /*****掃描呼吸燈函數*****/
  227. void Led_YU()
  228. {
  229.                                                                               
  230.         unsigned int CYCLE=1500,PWM_LOW=0;        //定義周期并賦值
  231.          
  232.                                                                                     
  233.                         {
  234.                                  BU=0;
  235.                                  Delay(60000);                                //特意加延時,可以看到熄滅的過程
  236.                                  for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)//PWM_LOW表示低電平時間,這個循環中低電平時長從1累加到CYCLE(周期)的值,即600次
  237.                                         {                                P3=0XFC;
  238.                                                                 BU=1;        //點亮LED  
  239.                                                         Delay(PWM_LOW);//延時長度,600次循環中從1加至599
  240.                                                         BU=0;        //熄滅LED
  241.                                                         Delay(CYCLE-PWM_LOW);//延時長度,600次循環中從599減至1
  242.                                         }
  243.                                      //   BU=1;
  244.                                      //  for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)
  245.                                      //   {                       //與逐漸變亮相反的過程
  246.                                      //          BU=1;
  247.                                      //          Delay(PWM_LOW);
  248.                                      //          BU=0;
  249.                                      //          Delay(CYCLE-PWM_LOW);
  250.                                      //  }                                                
  251.                         }
  252. }
復制代碼


以上是按大神的修改后的程序,但還有一個地方不理想,就是上電流光掃描還沒有完成時,
                        if(++count3>=150)//3秒延時
              {
                 count3=150; //保持
                 BU=1;
                                  P3=0XFC;              //日行燈亮
               }  
        }
}
這一部份就亮了,我想要的效果是掃描完成后才亮。轉向中斷后1秒也要亮。
各位大神幫看看需要怎樣修改一下。
回復

使用道具 舉報

16#
ID:99987 發表于 2021-9-7 21:04 | 只看該作者
用pwm方式實現
回復

使用道具 舉報

17#
ID:280000 發表于 2021-9-8 08:56 | 只看該作者
單片機定時器輸出不同大小的PWM即可實現
回復

使用道具 舉報

18#
ID:859245 發表于 2021-9-8 18:28 | 只看該作者
呼吸燈用PWM調占空比呀,STM32和51都是這樣做的
回復

使用道具 舉報

19#
ID:280000 發表于 2021-9-15 09:01 | 只看該作者
單片機定時器輸出不同大小的PWM即可
回復

使用道具 舉報

20#
ID:966227 發表于 2021-9-15 12:02 | 只看該作者
就是找準控制IO開關頻率,這個開關頻率里面又要去按照一定時間去調整占空比從0-100%。找到一個最佳的顯示效果
回復

使用道具 舉報

21#
ID:161164 發表于 2021-9-15 14:42 | 只看該作者
川蜀浪子 發表于 2021-9-7 17:08
以上是按大神的修改后的程序,但還有一個地方不理想,就是上電流光掃描還沒有完成時,
                        if(++count3 ...

加一個標置位Init_Done
在上電流光的后面置1
在中斷里
if(Init_Done)
{
行195~209
}
回復

使用道具 舉報

22#
ID:966294 發表于 2021-9-15 16:23 | 只看該作者
用TIM來制造PWM波,然后調節PWM的占空比就可能實現它的亮暗變化
回復

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产九九精品视频 | 伊人色综合久久久天天蜜桃 | 欧洲在线视频 | 久久综合国产 | 91在线视频在线观看 | 国产精品久久久久久久久久免费看 | 亚洲黄色一级 | 国产大毛片 | 亚洲天堂久久新 | 少妇无套高潮一二三区 | 精品一二三区在线观看 | 欧美激情国产日韩精品一区18 | 国产成人免费网站 | 亚洲97 | 免费黄色av网站 | a级网站 | 久久久精品一区二区 | 国产精品视频一 | 久久www免费人成看片高清 | 一本色道精品久久一区二区三区 | 欧美性生活视频 | 成人亚洲网站 | 亚洲男女视频在线观看 | 日韩图区 | 亚洲天天干 | 午夜精品一区二区三区在线观看 | 国产成人精品一区二 | 国产精品一级在线观看 | 国产区在线看 | 人人做人人澡人人爽欧美 | 自拍亚洲 | 久久国产欧美日韩精品 | 成人在线电影网站 | 日韩影院在线观看 | 亚洲人成在线观看 | 免费视频成人国产精品网站 | 久久久99国产精品免费 | 国产成人精品一区二区三区在线 | a级片在线观看 | 懂色av色香蕉一区二区蜜桃 | 成人免费福利视频 |