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

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

QQ登錄

只需一步,快速開(kāi)始

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

可定義亮度的PWM調(diào)光LED燈制作 附pic單片機(jī)源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
一直想打造一個(gè)自己的調(diào)光臺(tái)燈,于是動(dòng)手焊接硬件,編寫(xiě)自己的單片程序,經(jīng)過(guò)調(diào)試初步達(dá)到要求,沒(méi)有條件打板,自己用萬(wàn)能板焊接的電路,用來(lái)控制12V的長(zhǎng)條LED實(shí)際效果還行!
主要功能:
1、  關(guān)機(jī)時(shí)短按一次開(kāi)燈,亮度為關(guān)機(jī)時(shí)的檔位,開(kāi)機(jī)時(shí)長(zhǎng)按三秒關(guān)燈,關(guān)燈時(shí)為漸滅燈的效果;
2、  開(kāi)機(jī)時(shí)單按為亮度檔位切換,分為1,2,3檔;
3、  開(kāi)機(jī)時(shí)連按三次按鍵,可進(jìn)入當(dāng)前檔位的亮度PWM值設(shè)定,此時(shí)led閃爍,單擊按鍵為亮度增加,雙擊按鍵為亮度減小,長(zhǎng)按則快速增加亮度(類(lèi)似呼吸燈的效果),再次三擊為保存PWM值退出亮度設(shè)置;
4、  可以分別對(duì)三個(gè)檔位的PWM亮度值進(jìn)行設(shè)定,以適合不同的LED組合;
5、  增加了7805穩(wěn)壓,輸入電壓為6~30V;
6、  TIP31加散熱片后電子負(fù)載測(cè)試電流800mA有微熱,基本可滿(mǎn)足常用臺(tái)燈的要求;

焊接完成的圖片:
線(xiàn)路圖:
測(cè)試效果:

如下程序主要體現(xiàn)為PWM調(diào)光的部分,按鍵功能部分請(qǐng)參考我的另一個(gè)貼子:
PIC單片機(jī)單個(gè)按鍵實(shí)現(xiàn)多功能:長(zhǎng)按、短按次數(shù)識(shí)別程序

單片機(jī)源程序如下:
  1.     PWM程序部分:
  2.     #include<pic.h>
  3.     //PIC16F690 PWM三檔自定議臺(tái)燈
  4.     voidmain(void)

  5.     {
  6.          IRQ_init();
  7.          port_init();
  8.          RC4            =0;
  9.          pwm_cnt     =0;
  10.          CCPR1        =pwm_hz+5;  //開(kāi)機(jī)的瞬間LED輸出最大亮,設(shè)為65可以改善為開(kāi)機(jī)即為程序默認(rèn)亮度級(jí)
  11.          dan            =1;
  12.          
  13.          
  14.         pwm_1=    eeprom_read(0x01); if(pwm_1>pwm_hz+5 ||pwm_1 <0) pwm_1 = 115;
  15.         pwm_2=    eeprom_read(0x02); if(pwm_2>pwm_hz+5 ||pwm_2 <0) pwm_2 = 60;
  16.         pwm_3=    eeprom_read(0x03); if(pwm_3>pwm_hz+5 ||pwm_3 <0) pwm_3 = 10;
  17.         dan =     eeprom_read(0x04);if(dan> 3 ||dan <1) dan = 1;


  18.       
  19.     while(1)
  20.     {
  21.           key_scan();    //對(duì)應(yīng)按次處理
  22.          write_eeprom();
  23.     }
  24.     }  

  25.     ////////////////////////////////////////////////////////////////
  26.     voidinterrupt init1(void)
  27.     {
  28.     /***用TIMER0中斷作的24H計(jì)時(shí)程序***/
  29.         if(T0IF)
  30.         {            
  31.       TMR0=61;
  32.       T0IF=0;
  33.            ss_2++;if(ss_2>5){ss_2=0;}   //1/4秒 2500ms
  34.            ss_4++;if(ss_4>80){ss_4=0;}  //1/2秒 5000ms
  35.        ss++;if(ss>80) s_led=1;
  36.       if(ss>=160){s_led=0;
  37.                 ss=0;
  38.                 s++;
  39.                 if(s>=60) {
  40.                          s=0;
  41.                          m++;
  42.                   if(m>=60){
  43.                                   m=0;
  44.                                   h++;
  45.                                   if(h>=24)h=0;}
  46.                          }
  47.                       }
  48.     /***用TIMER0中斷作的24H計(jì)時(shí)程序***/


  49.     /******設(shè)置時(shí)的快亮度加效果******/
  50.     if(set_mode==1)
  51.     {
  52.                 if(key_long_flag&&sw1==0)
  53.                 {
  54.                 if(ss_2==0) CCPR1++;
  55.                 if(CCPR1>pwm_hz+5)CCPR1=0;
  56.                
  57.                 } elseif(sw1==1&&key_long_flag) {key_long_flag=0;save_flag=1;}  
  58.     }
  59.     /******設(shè)置時(shí)的快亮度加效果******/
  60.                            
  61.     /**********關(guān)機(jī)漸滅控制**********/

  62.             if(on_flag){//if(CCPR1>50&&CCPR1<64){if(s%6==0){CCPR1++;}}
  63.                         if(CCPR1<pwm_hz+5){if(ss_2==0){CCPR1++;}
  64.                         }
  65.     /**********關(guān)機(jī)漸滅控制**********/
  66.       
  67.        }
  68.          
  69.          }

  70.     //////////////////////////////////////////////////////////////
  71.            


  72.     //**************************************//
  73.     //Write eeprom
  74.     //**************************************//
  75.     void write_eeprom()
  76.     {
  77.       if(save_flag)
  78.        {
  79.                         if(dan==1){pwm_1=CCPR1;}
  80.                else if(dan==2){pwm_2=CCPR1;}
  81.                else if(dan==3){pwm_3=CCPR1;}
  82.        eeprom_write(0x01,pwm_1);
  83.        eeprom_write(0x02,pwm_2);
  84.        eeprom_write(0x03,pwm_3);
  85.        eeprom_write(0x04,dan  );
  86.         delay_ms(1);
  87.         save_flag=0;
  88.       
  89.        }
  90.     }
  91.     //**************************************//



  92.     //////長(zhǎng)短按鍵處理end///////

  93.     void key_scan()
  94.     {
  95.        push_scan();
  96.       
  97.        //----開(kāi)關(guān)機(jī)鍵處理-----//
  98.       if(set_mode==0){
  99.        se_flag=key_long_flag; key_long_flag=0; //長(zhǎng)按開(kāi)關(guān)機(jī)鍵
  100.       if((yao_se_flag||se_flag)&&on_lock_flag==0)
  101.       {
  102.          //////////關(guān)機(jī)前先滅下燈
  103.           CCPR1=pwm_hz+5;delay_ms(30);

  104.           if(dan==1)CCPR1=pwm_1;
  105.           else if(dan==2)CCPR1=pwm_2;
  106.           else if(dan==3)CCPR1=pwm_3;
  107.             on_flag=~on_flag;
  108.           on_lock_flag=1;
  109.               se_flag=0;
  110.               yao_se_flag=0;
  111.       }else if(se_flag==0&&on_lock_flag==1) on_lock_flag=0;
  112.     }
  113.     //---------------------//

  114.     if(on_flag)//關(guān)機(jī)狀態(tài)下
  115.     {
  116.     set_mode=0;
  117.     if(key_num==1) { up_flag=1;key_num=0;}   //單擊加鍵識(shí)別
  118.     //關(guān)機(jī)狀態(tài)單按即開(kāi)機(jī)
  119.     if(up_flag)
  120.     {
  121.     up_flag=0;
  122.     //dn_flag=0;
  123.     on_flag=0;
  124.     }
  125.     }

  126.     //---------------------//
  127.     else if(on_flag==0)  //開(kāi)機(jī)狀態(tài)下 進(jìn)下如下按鍵操作
  128.     {
  129.        if(key_num==1) { up_flag=1;key_num=0;}   //單擊加鍵識(shí)別
  130.        if(key_num==2) { dn_flag=1;key_num=0;}   //雙擊減鍵識(shí)別
  131.        if(key_num==3) {thr_flag=1;key_num=0;}   //三擊設(shè)置識(shí)別
  132.        //---------------------//
  133.        //三按在正常工作模式與設(shè)置模式切換
  134.         if((yao_thr_flag||thr_flag)&&set_sw_flag==0/*&&dismode==0*/)  
  135.         {
  136.           set_mode++;
  137.           if(set_mode>1)set_mode=0;
  138.           set_sw_flag=1;
  139.           thr_flag=0;yao_thr_flag=0;
  140.           } else if(thr_flag==0&&set_sw_flag==1) set_sw_flag=0;
  141.        //---------------------//
  142.       
  143.        //---------------------//
  144.       
  145.        if(set_mode==0)//檔位加處理
  146.        {
  147.           if((yao_dn_flag||yao_up_flag||up_flag||dn_flag)&&short_temp_flag==0)
  148.           {
  149.           dan++;
  150.           if(dan>3)dan=1;
  151.           short_temp_flag=1;
  152.           up_flag=0;
  153.           dn_flag=0;
  154.           yao_up_flag=0;
  155.           yao_dn_flag=0;
  156.           save_flag=1;
  157.          
  158.          } else {if(up_flag==0&&short_temp_flag==1) short_temp_flag=0;}  
  159.          
  160.                    if(dan==1) CCPR1=pwm_1;
  161.                 else if(dan==2)CCPR1=pwm_2;
  162.                 else if(dan==3)CCPR1=pwm_3;
  163.                
  164.       
  165.        }
  166.         //---------------------//
  167.       
  168.         //---------------------//
  169.        else if(set_mode==1)//設(shè)置各檔位的PWM值
  170.        {

  171.          
  172.          
  173.             if(up_flag||yao_up_flag)
  174.                 {
  175.                 CCPR1++;
  176.                 up_flag=0;
  177.                 yao_up_flag=0;
  178.                 if(CCPR1>pwm_hz+5)CCPR1=0;
  179.                 save_flag=1;
  180.                 }        
  181.               if(dn_flag||yao_dn_flag)
  182.                 {
  183.                 CCPR1--;
  184.                 dn_flag=0;
  185.                 yao_dn_flag=0;
  186.                 if(CCPR1<1)CCPR1=pwm_hz+5;
  187.                 save_flag=1;
  188.                 }   
  189.       
  190.        else{if(s_led){
  191.                      pwm_stop=0;
  192.                      if(dan==1){pwm_1=CCPR1;}
  193.                else if(dan==2){pwm_2=CCPR1;}
  194.                else if(dan==3){pwm_3=CCPR1;}
  195.              }
  196.       
  197.        else if(key_long_flag==0){pwm_stop=1;}SCR_OUT=0;}
  198.        }
  199.       
  200.        //---------------------//
  201.       

  202.     }   
  203.       /////////////////////  

  204.     }

  205.     void port_init(void)
  206.     {

  207.        TRISA=0b00010100; //RA0,1為PWM設(shè)置鍵
  208.        TRISB=0x01;       //RBO為中斷輸入
  209.        TRISC=0b00000000;

  210.        ANSEL=0b00000000;
  211.        ANSELH=0X00;

  212.        PORTA=0X00;
  213.        PORTB=0X00;
  214.        PORTC=0X00;

  215.     }
  216.     ///////////////////////////
復(fù)制代碼

//------------------------------------------------------------------------------------------------------------   void IRQ_init(void)//定時(shí)A和外部中斷1初始化   {   GIE=0;      //關(guān)總中斷   //RBIE=0;     //RB口電平變化中斷禁止   //---------CPU頻率配置-------  //IRCF<2:0>:內(nèi)部振蕩器頻率選擇位  IRCF2= 1 ;  IRCF1= 1 ;  IRCF0= 1 ;   //000 = 31 kHz  //001 = 125 kHz  //010 = 250 kHz  //011 = 500 kHz  //100 = 1 MHz  //101 = 2 MHz  //110 = 4 MHz (缺省值)  //111 = 8 MHz   RABPU=0; //AB口上拉起動(dòng)  WPUA0=1;  WPUA1=1;  //WPUA4=1;  //WPUA5=1;  WPUA2=1;   //-------定時(shí)器time0的配置-----  T0IF=0;     //清中斷標(biāo)志  T0IE=1;     //允許Time0中斷    TMR0=61;    //256-61    T0CS=0;     //Time0選擇內(nèi)部時(shí)鐘  T0SE=0;     //外部電平低至高變化遞增  PSA =0;     //預(yù)分頻給Time0  PS2 =1;     //111為1:256分頻   PS1 =0;  PS0 =1;  //PS<2:0>:預(yù)分頻器比選擇位  //000 1 : 2  //001 1 : 4  //010 1 : 8  //011 1 : 16  //100 1 : 32  //101 1 : 64  //110 1 : 128  //111 1 : 256 //----------------------------  PEIE=1; //允許外圍中斷   GIE=1; //開(kāi)總中斷    }

臺(tái)燈Layout-3.jpg (129.63 KB, 下載次數(shù): 128)

臺(tái)燈Layout-3.jpg

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美一二精品 | 久久精品亚洲一区二区三区浴池 | 欧美一区二区三区久久精品视 | 欧美日韩在线一区二区 | 久久精品一区二区 | 一区二区三区免费在线观看 | 亚洲精品日日夜夜 | 羞羞的视频在线观看 | 免费在线性爱视频 | 四虎最新 | 国产精品呻吟久久av凹凸 | 一区二区三区精品视频 | 男人影音 | 羞羞视频网站免费看 | 欧美亚洲国产日韩 | 亚洲九九| 91精品国产乱码久久久久久久 | 视频一区二区中文字幕 | 久久久婷 | 成人精品视频99在线观看免费 | 韩日一区二区 | 国产一区 | h在线看| 成人在线精品 | 欧美极品一区二区 | 日本精品久久久久 | 国产精品免费一区二区三区四区 | 成人免费视频久久 | 亚洲天堂av网 | 99爱国产| 亚洲日日操 | 亚洲免费在线观看 | 久久福利电影 | 日韩一区二区三区在线看 | 国产人免费人成免费视频 | 国产精品高潮呻吟久久av黑人 | 毛片视频观看 | 日韩不卡三区 | 天堂中文字幕av | 国产一区二区在线视频 | 成人精品久久 |