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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

led RGB彩燈控制器單片機(jī)程序及電路和說明

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
led control for rgb use stc12c56
新型L ED 彩燈分為2 部分, 即彩燈控制器(主控模塊) 和管內(nèi)L ED 板模塊(受控模塊)。彩燈控制器可直接與220 V 交流市電相連接, 經(jīng)過開關(guān)電源變換, 輸出直流工作電壓, 一方面為管內(nèi)L ED 模塊提供12 V 工作電源,另一方面為主控模塊單片機(jī)系統(tǒng)(彩燈控制器) 提供5 V工作電源。整個系統(tǒng)工作由軟件程序控制運(yùn)行, 根據(jù)需要, 用戶可以在L ED 彩燈工作通過主控模塊上的按鍵來設(shè)定亮燈時間和燈光閃動頻率。
上電后系統(tǒng)經(jīng)過初始化, 查詢是否有功能切換鍵按下: , 則進(jìn)入用戶設(shè)定模式狀態(tài); , 則進(jìn)入默認(rèn)缺省工作狀態(tài)。在用戶設(shè)定模式狀態(tài)下, 用戶可以根據(jù)個人愛好及不同場合的需要來指定調(diào)用哪些模式, 并且可以改變每種模式的時間T i、頻率F i 參數(shù), 如果用戶想進(jìn)入缺省狀態(tài)模式, 只需按一下功能切換鍵即可跳入缺省模式,程序會自動順序調(diào)用亮燈模式;在缺省工作狀態(tài)下, L ED彩燈控制器按照程序設(shè)定好的若干亮燈花樣模式程序Model_ i 順序調(diào)用往下走, 從第Model_ 1 模式開始工作,Model_ 1 Model_ 2⋯⋯Model_ n 為一個亮燈周期, 然后再回到Model_ 1 循環(huán)繼續(xù)工作, 同樣如果想進(jìn)入用戶設(shè)定模式狀態(tài), 只需按下功能切換鍵即可。整個n 種亮燈模式時間可以看作一個大周期T , 其中的每一種花樣工作模式Model_ i ( i=1, 2, , n) 時間為小周期T i, 對于每一個模式編寫一個獨(dú)立工作子程序Model_ i, 其中設(shè)定了L ED 三色燈(紅、綠、藍(lán)) 的點(diǎn)亮?xí)r刻(RED_ on,GREEN _ on, BLU E_ on) 和熄滅時刻(RED_ off, GREEN _ off, BLU E_ off) , 以及模式工作時間T i 和該模式L ED 閃爍頻率F i。
5 位七段碼顯示器的前2 (L 1, L 2) 顯示當(dāng)前工作模式的序號Model_ i; 3 (L 3, L 4, L 5) 七段碼顯示三色L ED 的工作狀態(tài), 若該顏色燈點(diǎn)亮則對應(yīng)七段碼顯示位為“1, 反之熄滅時則顯示位為“滅”即不顯示, 對系統(tǒng)工作狀態(tài)起到了很好的實(shí)時監(jiān)控作用。
下面是rgb彩燈的電路圖:

全部資料下載: RGB-CONTROL.zip (130.04 KB, 下載次數(shù): 80)

單片機(jī)程序如下:
  1. //STC 12C5608 DIP28*mcu//
  2. //DESIGN:scybytf@163.com//
  3. #include<REG52.H>
  4. #include<INTRINS.H>
  5. #define uchar unsigned char
  6. //ISP/AP EEPROM FUNCTION //
  7. sfr isp_data =0xe2;
  8. sfr isp_addh =0xe3;
  9. sfr isp_addl =0xe4;
  10. sfr isp_cmd  =0xe5;
  11. sfr isp_trig =0xe6;
  12. sfr isp_contr=0xe7;
  13. sfr wdt_contr=0xe1;
  14. sfr cmod=     0xd9;
  15. sfr ccon=     0xd8;
  16. sfr ccapm0=   0xda;
  17. sfr ccapm1=   0xdb;
  18. sfr ccapm2=   0xdc;
  19. sfr ccapm3=   0xdd;
  20. sbit ccon_cr= 0xd8^6; //   PCA計(jì)數(shù)器陣列運(yùn)行控制位
  21. sfr ccap0h=   0xfa;
  22. sfr ccap1h=   0xfb;
  23. sfr ccap2h=   0xfc;
  24. sfr ccap3h=   0xfd;

  25. #define isp_iap_byte_read 1
  26. #define isp_iap_byte_program 2
  27. #define isp_iap_sector_erase 3
  28. #define wait_time  4

  29. //*****infrared data*****/
  30. sbit dec_key=P3^0;
  31. sbit add_key=P3^1;
  32. sbit re_flag=P3^2;
  33. sbit keypressed=P3^3;
  34. sbit flag_b=P3^4; //指示燈
  35. sbit flag_g=P2^4; //
  36. sbit flag_r=P2^5; //
  37. sbit IE_EX0=IE^0;
  38. sbit IE_EX1=IE^2;
  39. sbit IP_PX0=IP^0;
  40. sbit IE_EA=IE^7;
  41. uchar keychang;
  42. uchar onoff=1,re_on=0;
  43. uchar set_1,set_0,key,key1=0,key2=0,je=0,ke=0;
  44. uchar new_key=0xff;
  45. uchar count1,count2;
  46. uchar DE;

  47. uchar key_model=2,key_model_temp=2,white_turn=0;//
  48. uchar pwm_w=0x70,pwm_r=0x70,pwm_g=0x70,pwm_b=0x70;

  49. uchar i_data;
  50. uchar i_addh,i_addl;

  51. void delay(uchar i);
  52. void pwm_white_add(void);
  53. void pwm_white_dec(void);
  54. void pwm_red(void);
  55. void pwm_green(void);
  56. void pwm_blue(void);
  57. void delay2(uchar i);
  58. //read&write&erase eeprom//////
  59. void read_eeprom(void)
  60. {
  61. isp_addh=i_addh;
  62. isp_addl=i_addl;
  63. isp_contr=wait_time;
  64. isp_contr|=0x80;
  65. isp_cmd=isp_iap_byte_read;
  66. isp_trig=0x46;
  67. isp_trig=0xb9;
  68. _nop_();
  69. i_data=isp_data;
  70. /////////////
  71. isp_contr=0x00;
  72. isp_cmd=0x00;
  73. isp_trig=0x00;
  74. isp_addh=0xff;
  75. isp_addl=0xff;
  76. }
  77. void write_eeprom(void)
  78. {
  79. isp_data=i_data;
  80. isp_addh=i_addh;
  81. isp_addl=i_addl;
  82. isp_contr=wait_time;
  83. isp_contr|=0x80;
  84. isp_cmd=isp_iap_byte_program;
  85. isp_trig=0x46;
  86. isp_trig=0xb9;
  87. _nop_();
  88. /////////////////
  89. isp_contr=0x00;
  90. isp_cmd=0x00;
  91. isp_trig=0x00;
  92. isp_addh=0xff;
  93. isp_addl=0x00;
  94. }
  95. void erase_eeprom(void)
  96. {
  97.   isp_addh=i_addh;
  98.   isp_addl=i_addl;
  99.   isp_contr=wait_time;
  100.   isp_contr|=0x80;
  101.   isp_cmd=isp_iap_sector_erase;
  102.   isp_trig=0x46;
  103.   isp_trig=0xb9;
  104.   _nop_();
  105.   ////////////////
  106.   isp_contr=0x00;
  107.   isp_cmd=0x00;
  108.   isp_trig=0x00;
  109.   isp_addh=0xff;
  110.   isp_addl=0xff;
  111.   }
  112. //******************************************//
  113. //*******,infrared delay******//
  114. void delay1(uchar DELAY)
  115. {  uchar delay,i;
  116.    for(delay=0;delay<DELAY;delay++)
  117.      {for(i=0;i<5;i++) //  4MHZ I=5;
  118.         _nop_();}
  119. }
  120. /******int0 interrput*****/
  121. void EXINT0(void) interrupt 0   //中斷處理程序0
  122. {   
  123.   IE_EA=0;                     //關(guān)閉中斷
  124.   IE_EX0=0;         //允許外部中斷0
  125. IE_EX1=0;
  126.   re_flag=1;
  127.   count1=0;
  128.   count2=0;
  129.   
  130.   for(je=0;re_flag==0;je++)  
  131.          { delay1(5);count1++;}  //用于delay 9m,判斷接收開始(9M的低電平)
  132.   if(count1>=100&&count1<=175) //150-175
  133.         {
  134.          for(je=0;re_flag==1;je++)
  135.             {delay1(5);count2++;}
  136.     if(count2>=35&&count2<=100)        //75-100
  137.      {
  138.           for(je=0;je<4;je++)                 //共包括四個數(shù)據(jù),只取后兩個數(shù)據(jù)
  139.          {set_1=0x01;
  140.             set_0=0xfe;
  141.                                 ke=0;
  142.                  do
  143.                       {while(re_flag==0)
  144.                                  {_nop_();}
  145.                                  delay1(60);//100//delay(6~11)ok晶振=4MHZ//準(zhǔn)確要求delay1.2ms(長1.2+)/2ms
  146.                 if(re_flag==1)
  147.                      {key|=set_1;}       //判斷該位為"1"
  148.                 else
  149.                      {key&=set_0;}       //判斷該位為"0"  
  150.                 set_1<<=1;        //接收控制標(biāo)志"1"左移
  151.                     set_0=~set_1;     //接收控制標(biāo)志"0"左移?
  152.                     while(re_flag==1)   //等待1位數(shù)據(jù)之結(jié)束   
  153.                              {_nop_();}
  154.                              }
  155.                    while(++ke<8);           //接收0~7共8個BIT的數(shù)據(jù)
  156.               if(je==2)              //取出第3個數(shù)據(jù)
  157.                      key1=key;
  158.                    if(je==3)
  159.                      key2=key;            //取出第4個數(shù)據(jù)
  160.           }
  161.               if(key1==~key2)    //if error do nothing then return
  162.                 {
  163.                          keychang=1;
  164.                          new_key=key2;
  165.                         //P1=new_key;
  166.                         if(new_key==0xf9)onoff=0;
  167.                         if(new_key==0xf8){onoff=1;keychang=0;}
  168.                         if((new_key==0xfa)&&(key_model!=0))keychang=0;
  169.                         if((new_key==0xfb)&&(key_model!=0))keychang=0;
  170.                         if((new_key==0xf6)&&(key_model!=0))keychang=0;
  171.                         if((new_key==0xf7)&&(key_model!=0))keychang=0;
  172.                         if((new_key==0xf5)&&(key_model!=0))keychang=0;
  173.                         if((new_key==0xf2)&&(key_model!=0))keychang=0;
  174.                         if((new_key==0xf3)&&(key_model!=0))keychang=0;
  175.                         if((new_key==0xf1)&&(key_model!=0))keychang=0;
  176.                         if((new_key==0xea)&&(key_model!=0))keychang=0;
  177.                         if((new_key==0xeb)&&(key_model!=0))keychang=0;
  178.                         if((new_key==0xe9)&&(key_model!=0))keychang=0;
  179.                         if((new_key==0xe5)&&(key_model!=0))keychang=0;
  180.                         if((new_key==0xe6)&&(key_model!=0))keychang=0;
  181.                         if((new_key==0xe7)&&(key_model!=0))keychang=0;
  182.                         if((new_key==0xee)&&(key_model!=0))keychang=0;
  183.                         if((new_key==0xef)&&(key_model!=0))keychang=0;
  184.                         if((new_key==0xed)&&(key_model!=0))keychang=0;

  185.                         if((new_key==0xf0)&&(key_model==1))keychang=0;
  186.                     if((new_key==0xe8)&&(key_model==2))keychang=0;
  187.                         if((new_key==0xe4)&&(key_model==3))keychang=0;
  188.                         if((new_key==0xec)&&(key_model==4))keychang=0;
  189.                  }
  190.            }         
  191.     }
  192.   IE_EX0=1;         //允許外部中斷0
  193. IE_EX1=1;
  194.   IE_EA=1;
  195. }
  196. /******int0 interrput*****/
  197. void EXINT1(void) interrupt 2   //中斷處理程序1
  198. {
  199. IE_EA=0;
  200. IE_EX0=0;         //允許外部中斷0
  201. IE_EX1=0;
  202. if(key_model>4)key_model=0;
  203. keypressed=1;
  204. delay2(10);
  205. if(keypressed==0)
  206.     {delay2(10);
  207.          if(keypressed==0)
  208.            {while(keypressed==0)wdt_contr=0x37;
  209.             if((key_model==0)&&(white_turn<3))
  210.                     white_turn++;
  211.                 else
  212.                    {
  213.             keychang=1;
  214.                         white_turn=0;
  215.             key_model++;
  216.             if(key_model==5)key_model=0;
  217.                    }
  218.            }
  219.     }
  220. IE_EX0=1;         //允許外部中斷0
  221. IE_EX1=1;
  222. IE_EA=1;
  223. }
  224. void delay2(uchar dex)
  225. {
  226. uchar de1,de2,de4;
  227. wdt_contr=0x37;
  228. for(de1=0;de1<dex;de1++)
  229.     {
  230.          for(de2=0;de2<100;de2++)
  231.                 { for(de4=0;de4<10;de4++);}
  232.         }
  233. }
  234. void delay(uchar dex)
  235. {
  236. uchar dee1,dee2,dee4;
  237. if(keychang==0)                          /////////////////////////////////////
  238.    {wdt_contr=0x37;
  239.     for(dee1=0;dee1<dex;dee1++)
  240.        {
  241.             for(dee2=0;dee2<100;dee2++)
  242.                    { for(dee4=0;dee4<10;dee4++); }
  243.            }
  244.    }
  245. }

  246. void write_data(uchar DA,uchar AD)
  247. {
  248.   IE_EA=0;
  249.   i_addh=AD;
  250.   i_addl=0x00;
  251.   erase_eeprom();
  252.   i_data=DA;
  253.   write_eeprom();
  254.   IE_EA=1;
  255. }
  256. uchar min(void)
  257. {
  258. uchar temp;
  259.   if(ccap0h<ccap1h)
  260.      temp=ccap0h;
  261.   else
  262.      temp=ccap1h;
  263.   if(temp<ccap2h)
  264.      return(temp);
  265.   else
  266.      return(ccap2h);
  267. }
  268. uchar max(void)
  269. {
  270. uchar temp;
  271.   if(ccap0h>ccap1h)
  272.      temp=ccap0h;
  273.   else
  274.      temp=ccap1h;
  275.   if(temp>ccap2h)
  276.      return(temp);
  277.   else
  278.      return(ccap2h);
  279. }
  280. void pwm_white(void)
  281. {
  282. if(white_turn==0)
  283.    {flag_r=flag_g=flag_b=1;}
  284. add_key=1;dec_key=1;//input

  285. if(add_key==0)         //add key
  286.    {
  287.     delay2(10);
  288.         if(add_key==0)
  289.           {
  290.            delay2(10);
  291.            if(add_key==0)
  292.              {while(add_key==0)wdt_contr=0x37;
  293.                   if(white_turn==0)
  294.                      pwm_white_add();
  295.                   if(white_turn==1)        //r
  296.                     {
  297.                          if(pwm_r>=0x10)
  298.                {
  299.                     pwm_r-=0x0f;
  300.                 ccap1h=pwm_r;
  301.                                 //do
  302.                 // {
  303.                     //  ccap1h--;
  304.                     //  delay(10);
  305.                     // }
  306.                 //while(pwm_r<ccap1h);
  307.                           }
  308.                    }
  309.                   if(white_turn==2)//g
  310.                      {
  311.                           if(pwm_g>=0x10)
  312.                {
  313.                     pwm_g-=0x0f;
  314.                 ccap0h=pwm_g;
  315.                             //do
  316.                 // {
  317.                     //  ccap0h--;
  318.                     //  delay(10);
  319.                     // }
  320.                 //while(pwm_g<ccap0h);
  321.                           }
  322.                          }
  323.               if(white_turn==3)//b
  324.                      {
  325.                           if(pwm_b>=0x10)
  326.                {
  327.                     pwm_b-=0x0f;
  328.                 ccap2h=pwm_b;
  329.                                 //do
  330.                 // {
  331.                     //  ccap2h--;
  332.                     //  delay(10);
  333.                     // }
  334.                 //while(pwm_b<ccap2h);
  335.                           }
  336.                          }
  337.                  }
  338.           }
  339.    }
  340. add_key=1;dec_key=1;//input
  341. if(dec_key==0)//dec key
  342.    {
  343.     delay2(10);
  344.         if(dec_key==0)
  345.           {
  346.            delay2(10);
  347.            if(dec_key==0)
  348.              {while(dec_key==0)wdt_contr=0x37;
  349.                   if(white_turn==0)
  350.                      pwm_white_dec();
  351.                   if(white_turn==1)        //r
  352.                      {
  353.                           if(pwm_r<=0xf0)
  354.                {
  355.                     pwm_r+=0x0f;
  356.                 ccap1h=pwm_r;
  357.                                 //do
  358.                 // {
  359.                     //  ccap1h++;
  360.                     //  delay(10);
  361.                     // }
  362.                 //while(pwm_r<ccap1h);
  363.                           }
  364.                          }
  365.                   if(white_turn==2)//g
  366.                      {
  367.                           if(pwm_g<=0xf0)
  368.                {
  369.                     pwm_g+=0x0f;
  370.                                 ccap0h=pwm_g;
  371.                 //do
  372.                 // {
  373.                     //  ccap0h++;
  374.                     //  delay(10);
  375.                     // }
  376.                 //while(pwm_g<ccap0h);
  377.                           }
  378.                          }
  379.               if(white_turn==3)//b
  380.                      {
  381.                           if(pwm_b<=0xf0)
  382.                {
  383.                     pwm_b+=0x0f;
  384.                                 ccap2h=pwm_b;
  385.                 //do
  386.                 // {
  387.                     //  ccap2h++;
  388.                       //delay(10);
  389.                     // }
  390.                // while(pwm_b<ccap2h);
  391.                           }
  392.                          }
  393.                  }
  394.           }
  395.    }                          
  396. ccap1h=pwm_r;
  397. ccap0h=pwm_g;
  398. ccap2h=pwm_b;
  399. //flag_r,flag_g,flag_b flash//
  400. if(white_turn==0)
  401.    {flag_r=flag_g=flag_b=0;}
  402. if(white_turn==1)
  403.    {flag_r=0;flag_g=flag_b=1;}
  404. if(white_turn==2)
  405.    {flag_r=1;flag_g=0;flag_b=1;}
  406. if(white_turn==3)
  407.    {flag_r=flag_g=1;flag_b=0;}       
  408.    
  409. //////////////////////////////
  410. }

  411. void pwm_white_dec(void)
  412. {
  413.   pwm_w=min();
  414.   ccap0h=ccap1h=ccap2h=pwm_w;
  415. if(pwm_w<=0xf0)
  416.     {
  417.          pwm_w+=0x0f;
  418.      do
  419.       {
  420.            ccap0h++;ccap1h++;ccap2h++;
  421.            delay(5);
  422.           }
  423.      while(ccap0h<pwm_w);
  424.          pwm_r=pwm_g=pwm_b=pwm_w;
  425.          write_data(pwm_w,0x02);
  426.      write_data(pwm_w,0x04);
  427.      write_data(pwm_w,0x06);
  428.     }
  429. }
  430. void pwm_white_add(void)
  431. {
  432. pwm_w=max();
  433. ccap0h=ccap1h=ccap2h=pwm_w;
  434. if(pwm_w>=0x10)
  435.     {
  436.          pwm_w-=0x0f;
  437.      do
  438.       {
  439.            ccap0h--;ccap1h--;ccap2h--;
  440.            delay(5);
  441.           }
  442.      while(pwm_w<ccap0h);
  443.          pwm_r=pwm_g=pwm_b=pwm_w;
  444.          write_data(pwm_w,0x02);
  445.      write_data(pwm_w,0x04);
  446.      write_data(pwm_w,0x06);
  447.     }

  448. }
  449. //turn_red//
  450. void pwm_red(void)
  451. {
  452.   
  453.   if(pwm_r<ccap1h)
  454.     {
  455.      do
  456.        {
  457.             ccap1h--;
  458.            delay(2);
  459.           }
  460.      while(pwm_r<ccap1h);
  461.         }
  462.   else
  463.    if(pwm_r>ccap1h)
  464.     {
  465.      do
  466.        {
  467.             ccap1h++;
  468.            delay(2);
  469.           }
  470.      while(pwm_r>ccap1h);
  471.         }
  472. write_data(pwm_r,0x02);                                 
  473. }
  474. //turn_green///
  475. void pwm_green(void)
  476. {

  477.   if(pwm_g<ccap0h)
  478.     {
  479.      do
  480.        {
  481.             ccap0h--;
  482.            delay(2);
  483.           }
  484.      while(pwm_g<ccap0h);
  485.         }
  486.   else
  487.    if(pwm_g>ccap0h)
  488.     {
  489.      do
  490.        {
  491.             ccap0h++;
  492.            delay(2);
  493.           }
  494.      while(pwm_g>ccap0h);
  495.         }
  496.   write_data(pwm_g,0x04);
  497. }         
  498. //turn_blue//
  499. void pwm_blue(void)
  500. {

  501.   if(pwm_b<ccap2h)
  502.     {
  503.      do
  504.        {
  505.             ccap2h--;
  506.            delay(2);
  507.           }
  508.      while(pwm_b<ccap2h);
  509.         }
  510.   else
  511.    if(pwm_b>ccap2h)
  512.     {
  513.      do
  514.        {
  515.             ccap2h++;
  516.            delay(2);
  517.           }
  518.      while(pwm_b>ccap2h);
  519.         }
  520. write_data(pwm_b,0x06);
  521. }
  522. void flash(void)
  523. {
  524. uchar temp;
  525. for(temp=0;temp<3;temp++)
  526.     {
  527.          if(keychang==0)
  528.        {
  529.         ccap1h=0x00;ccap0h=ccap2h=0xff;
  530.                 flag_r=0;flag_g=1;flag_b=1;
  531.         delay(200);
  532.             ccap1h=0xff;
  533.                 flag_r=1;
  534.             delay(100);
  535.         ccap0h=0x00;ccap1h=ccap2h=0xff;
  536.                 flag_r=1;flag_g=0;flag_b=1;
  537.         delay(200);
  538.                 flag_g=1;
  539.             ccap0h=0xff;
  540.             delay(100);
  541.         ccap2h=0x00;ccap1h=ccap0h=0xff;
  542.                 flag_r=1;flag_g=1;flag_b=0;
  543.         delay(200);
  544.             ccap2h=0xff;
  545.                 flag_b=1;
  546.             delay(100);
  547.            }
  548.         }
  549. for(temp=0;temp<3;temp++)
  550.     {
  551.          if(keychang==0)
  552.        {
  553.         ccap1h=0x00;ccap0h=ccap2h=0xff;
  554.                 flag_r=0;flag_g=1;flag_b=1;
  555.         delay(200);
  556.             ccap1h=0xff;
  557.                 flag_r=1;
  558.             delay(100);
  559.         ccap2h=0x00;ccap1h=ccap0h=0xff;
  560.                 flag_r=1;flag_g=1;flag_b=0;
  561.         delay(200);
  562.             ccap2h=0xff;
  563.                 flag_b=1;
  564.             delay(100);
  565.         ccap0h=0x00;ccap1h=ccap2h=0xff;
  566.                 flag_r=1;flag_g=0;flag_b=1;
  567.         delay(200);
  568.             ccap0h=0xff;
  569.                 flag_g=1;
  570.             delay(100);
  571.            }
  572.         }
  573. }

  574. void strobe(void)
  575. {
  576. uchar temp;
  577. if(keychang==0)
  578.     {flag_r=1;flag_g=1;flag_b=1;
  579.      ccap1h=ccap0h=ccap2h=0xff;
  580.      for(temp=0;temp<5;temp++)
  581.         {flag_r=0;
  582.          ccap1h=0x00;
  583.          delay(50);
  584.                  flag_r=1;
  585.          ccap1h=0xff;
  586.          delay(50);
  587.             }
  588.     }
  589. if(keychang==0)
  590.     {flag_r=1;flag_g=1;flag_b=1;
  591.      delay(250);
  592.      for(temp=0;temp<5;temp++)
  593.         {flag_g=0;
  594.          ccap0h=0x00;
  595.          delay(50);
  596.                  flag_g=1;
  597.          ccap0h=0xff;
  598.          delay(50);
  599.             }
  600.         }
  601. if(keychang==0)
  602.     {flag_r=1;flag_g=1;flag_b=1;
  603.      delay(250);
  604.      for(temp=0;temp<5;temp++)
  605.         {flag_b=0;
  606.          ccap2h=0x00;
  607.          delay(50);
  608.                  flag_b=1;
  609.          ccap2h=0xff;
  610.          delay(50);
  611.             }
  612.          }
  613. if(keychang==0)
  614.     {flag_r=1;flag_g=1;flag_b=1;
  615.      delay(250);
  616.      for(temp=0;temp<5;temp++)
  617.         {flag_r=0;flag_g=0;flag_b=0;
  618.          ccap0h=ccap1h=ccap2h=0x00;
  619.          delay(50);
  620.                  flag_r=1;flag_g=1;flag_b=1;
  621.          ccap0h=ccap1h=ccap2h=0xff;
  622.          delay(50);
  623.             }
  624.     delay(250);
  625.    }
  626. }
  627. void fade(void)
  628. {
  629. flag_r=1;flag_g=1;flag_b=1;
  630. if(keychang==0)
  631.     {flag_r=0;flag_g=0;
  632.      ccap1h=0x00;
  633.      ccap0h=ccap2h=0xff;
  634.      do
  635.       {ccap1h++;ccap0h--;delay(100);}
  636.      while(ccap1h<255);
  637.         }
  638. if(keychang==0)
  639.     {flag_r=1;flag_b=0;
  640.      delay(100);
  641.      do
  642.       {ccap0h++;ccap2h--;delay(100);}
  643.      while(ccap0h<255);
  644.         }
  645. if(keychang==0)
  646.     {flag_g=1;flag_b=0;flag_r=0;
  647.      delay(100);
  648.      do
  649.       {ccap2h++;ccap1h--;delay(100);}
  650.      while(ccap2h<255);
  651.      delay(100);
  652.         }
  653. }
  654. void smooth(void)
  655. {
  656.   flag_r=1;flag_g=1;flag_b=1;
  657.   if(keychang==0)
  658.     {flag_r=0;flag_g=0;
  659.      ccap1h=0x00;
  660.      ccap0h=ccap2h=0xff;
  661.      do
  662.       {ccap1h++;ccap0h--;delay(5);}
  663.      while(ccap1h<255);
  664.         }
  665.   if(keychang==0)
  666.     {flag_r=1;flag_b=0;
  667.      delay(250);
  668.      delay(250);
  669.      do
  670.        {ccap0h++;ccap2h--;delay(5);}
  671.      while(ccap0h<255);
  672.         }
  673.   if(keychang==0)
  674.     {flag_g=1;flag_b=0;flag_r=0;
  675.      delay(250);
  676.      delay(250);
  677.      do
  678.       {ccap2h++;ccap1h--;delay(5);}
  679.      while(ccap2h<255);
  680.      delay(250);
  681.      delay(250);
  682.         }
  683. }

  684. void main()
  685. {   
  686. IE_EA=0;          //關(guān)所有中斷
  687. IE_EX0=1;         //允許外部中斷0
  688. IE_EX1=1;
  689. IP_PX0=1;         //高優(yōu)先級

  690. /*pwm data*/
  691. cmod=0X00;
  692. ccon=0X00;
  693. ccapm0=0x42;
  694. ccapm1=0x42;
  695. ccapm2=0x42;
  696. ccon_cr=1;   

  697. DE=100;
  698. wdt_contr=0x37;
  699. //*****eeprom function*****//
  700. //0x0000:key_model///////
  701. //0x0200:pwm_r///////////
  702. //0x0400:pwm_g///////////
  703. //0x0600:pwm_b///////////
  704. i_addh=0x0a;
  705. i_addl=0x00;
  706. read_eeprom();
  707. if(i_data!=0xff)
  708.    {
  709.          key_model=i_data;
  710.          delay(10);
  711.         i_addh=0x02;
  712.     i_addl=0x00;
  713.         read_eeprom();
  714.         pwm_r=i_data;
  715.         i_addh=0x04;
  716.     i_addl=0x00;
  717.         read_eeprom();
  718.         pwm_g=i_data;
  719.         i_addh=0x06;
  720.     i_addl=0x00;
  721.         read_eeprom();
  722.         pwm_b=i_data;
  723.         }
  724. else
  725.    {
  726.         write_data(key_model,0x0a);
  727.         write_data(pwm_w,0x02);
  728.         write_data(pwm_w,0x04);
  729.         write_data(pwm_w,0x06);
  730.    }
  731. IE_EA=1;
  732. while(1)     
  733.        {
  734.             if(onoff==1)
  735.               {
  736.                    if(re_on==1)
  737.                      {ccap1h=pwm_r;ccap0h=pwm_g;ccap2h=pwm_b;re_on=0;}
  738.                          if((new_key==0xec)&&(keychang==1)){key_model=4;}//write_data(key_model,0x0a);keychang=0;
  739.                          if((new_key==0xe4)&&(keychang==1)){key_model=3;}//write_data(key_model,0x0a);keychang=0;
  740.                          if((new_key==0xe8)&&(keychang==1)){key_model=2;}//write_data(key_model,0x0a);keychang=0;
  741.                          if((new_key==0xf0)&&(keychang==1)){key_model=1;}//write_data(key_model,0x0a);keychang=0;
  742.                          if((new_key==0xf4)&&(keychang==1)){key_model=0;}//write_data(key_model,0x0a);keychang=0;

  743.                  if((new_key==0xfa)&&(key_model==0)&&(keychang==1))
  744.                             {keychang=0;
  745.                              pwm_white_add();
  746.                                  }
  747.                      if((new_key==0xfb)&&(key_model==0)&&(keychang==1))
  748.                            {keychang=0;
  749.                             pwm_white_dec();
  750.                           }
  751.                      if((new_key==0xf6)&&(key_model==0)&&(keychang==1))
  752.                            {keychang=0;
  753.                             pwm_r=0x00;
  754.                             pwm_red();
  755.                            }
  756.                      if((new_key==0xf7)&&(key_model==0)&&(keychang==1))
  757.                            {keychang=0;
  758.                             pwm_g=0x00;
  759.                             pwm_green();
  760.                            }
  761.                      if((new_key==0xf5)&&(key_model==0)&&(keychang==1))
  762.                            {keychang=0;
  763.                             pwm_b=0x00;
  764.                             pwm_blue();
  765.                            }
  766.                      /*************/
  767.                      if((new_key==0xf2)&&(key_model==0)&&(keychang==1))
  768.                            {keychang=0;
  769.                             pwm_r=0x3f;
  770.                             pwm_red();
  771.                            }
  772.                      if((new_key==0xf3)&&(key_model==0)&&(keychang==1))
  773.                            {keychang=0;
  774.                             pwm_g=0x3f;
  775.                             pwm_green();
  776.                            }
  777.                     if((new_key==0xf1)&&(key_model==0)&&(keychang==1))
  778.                            {keychang=0;
  779.                             pwm_b=0x3f;
  780.                             pwm_blue();         
  781.                            }
  782.                      /**************/
  783.                      if((new_key==0xea)&&(key_model==0)&&(keychang==1))
  784.                            {keychang=0;
  785.                             pwm_r=0x6f;
  786.                              pwm_red();
  787.                            }
  788.                      if((new_key==0xeb)&&(key_model==0)&&(keychang==1))
  789.                            {keychang=0;
  790.                             pwm_g=0x6f;
  791.                             pwm_green();
  792.                            }
  793.                      if((new_key==0xe9)&&(key_model==0)&&(keychang==1))
  794.                            {keychang=0;
  795.                             pwm_b=0x6f;
  796.                             pwm_blue();
  797.                            }
  798.                      /***********/
  799.                      if((new_key==0xe6)&&(key_model==0)&&(keychang==1))
  800.                            {keychang=0;
  801.                             pwm_r=0x9f;
  802.                              pwm_red();
  803.                            }
  804.                      if((new_key==0xe7)&&(key_model==0)&&(keychang==1))
  805.                            {keychang=0;
  806.                             pwm_g=0x9f;
  807.                             pwm_green();
  808.                            }
  809.                      if((new_key==0xe5)&&(key_model==0)&&(keychang==1))
  810.                            {keychang=0;
  811.                             pwm_b=0x9f;
  812.                             pwm_blue();
  813.                            }
  814.                      /********************/
  815.                      if((new_key==0xee)&&(key_model==0)&&(keychang==1))
  816.                            {keychang=0;
  817.                             pwm_r=0xdf;
  818.                              pwm_red();
  819.                            }
  820.                      if((new_key==0xef)&&(key_model==0)&&(keychang==1))
  821.                            {keychang=0;
  822.                             pwm_g=0xdf;
  823.                             pwm_green();
  824.                            }
  825.                      if((new_key==0xed)&&(key_model==0)&&(keychang==1))
  826.                            {keychang=0;
  827.                             pwm_b=0xdf;
  828.                             pwm_blue();
  829.                            }
  830.                      if(key_model!=key_model_temp){key_model_temp=key_model;write_data(key_model,0x0a);keychang=0;}
  831.                          /*************************/
  832.                          
  833.                     switch(key_model)
  834.                   {
  835.                            case 0:pwm_white();break;
  836.                            case 1:flash();break;
  837.                            case 2:strobe();break;
  838.                            case 3:fade();break;
  839.                            case 4:smooth();break;                                                                                     
  840.                            default: key_model_temp=0;break;
  841.                           }
  842.                   }
  843.            else
  844.                   if(re_on==0)
  845.                     {
  846.                      re_on=1;
  847.                          keychang=0;
  848.                          flag_r=flag_g=flag_b=1;
  849.                      ccap1h=ccap0h=ccap2h=0xff;
  850.                         }
  851.            delay(1);
  852.     }
  853. }
復(fù)制代碼


評分

參與人數(shù) 2黑幣 +102 收起 理由
天使深淵 + 2 壓縮包不能用
admin + 100 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:309659 發(fā)表于 2018-4-16 21:58 來自手機(jī) | 只看該作者
學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報

板凳
ID:134873 發(fā)表于 2018-8-20 09:24 | 只看該作者
學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報

地板
ID:451760 發(fā)表于 2019-1-4 14:53 | 只看該作者
我怎么沒有
回復(fù)

使用道具 舉報

5#
ID:243748 發(fā)表于 2019-1-8 22:29 來自手機(jī) | 只看該作者
沒注譯看不懂
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产成人av | 久久久毛片 | 国产精品18久久久久久白浆动漫 | 91视频亚洲 | 国产欧美日韩在线观看 | 欧美国产精品一区二区三区 | 性生生活大片免费看视频 | 高清视频一区二区三区 | xxxxxx国产| 成人福利在线观看 | 美女视频黄色的 | 国产亚洲区 | 久久伊人精品 | 91麻豆精品一区二区三区 | 亚洲人在线播放 | 国产一级片在线播放 | 久久久久久久综合 | 日韩福利视频 | 欧美精品在线一区二区三区 | 一区二区精品 | 成人国产在线视频 | 中文字幕 国产 | 成人免费av在线 | 国产欧美一区二区三区国产幕精品 | 久久国产精99精产国高潮 | 羞羞网站在线观看 | 成年精品 | 成人av高清在线观看 | 亚洲国产精品一区二区第一页 | 成人在线观看免费视频 | 国产视频一区在线观看 | 91美女在线观看 | 日韩欧美国产综合 | 国产伦精品一区二区三区视频金莲 | 亚洲精品福利在线 | 5060网一级毛片 | 久久久精品一区 | 自拍偷拍亚洲视频 | 成人黄色电影在线播放 | 欧美freesex黑人又粗又大 | 黄网站在线播放 |