找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11769|回复: 18
收起左侧

ws2812b彩灯带室内自动系统单片机源程序

  [复制链接]
ID:213730 发表于 2017-6-22 15:33 | 显示全部楼层 |阅读模式
  基于51单片机12c5a60s2的彩灯带流水,可调节亮度,可用手机进行控制,手动调节pwm,自动调节
0.png

调光基于12c5a60s2程序:
  1. /*********************************************************************************************************

  2. *********************************************************************************************************/
  3. #include<STC12C5A60S2.h>
  4. //#include<LCD1602.h>
  5. #include<PWM.h>
  6. #include<ADC.h>
  7. #include<intrins.h>
  8. #define uchar        unsigned char
  9. #define uint        unsigned int
  10. #define FSCLK        11059200
  11. #define   Number  29

  12. unsigned char Receive,i;
  13. unsigned int n,flag;
  14. unsigned char Receive_table[15];
  15. #define RELOAD_COUNT 0xFA
  16.        
  17. sbit LED0=P0^2;
  18. sbit DAI = P3^2;
  19. sbit k1=P2^0;
  20. sbit k2=P2^1;
  21. sbit k3=P2^2;
  22. sbit k4=P2^3;
  23. sbit k5=P2^4;
  24. sbit k6=P2^5;
  25. sbit k7=P2^6;
  26. sbit k8=P2^7;
  27. sbit p13=P1^3;
  28. uint speed = 0;
  29.         uchar flag_clr = 0;
  30.         uchar Table_R[8]={        0,        0,255,        0,255,255,255,0};
  31.     uchar Table_G[8]={255,        0,        0,255,        0,255,255,0};
  32.     uchar Table_B[8]={        0,255,        0,255,255,        0,255,0};
  33. uchar code Table[256] = {
  34.   0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,
  35.         20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,
  36.         40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,
  37.         60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,
  38.         80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,
  39.   100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,
  40.         120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,
  41.         140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
  42.         160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,
  43.         180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,
  44.   200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,
  45.         220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
  46.         240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
  47. };
  48. unsigned char CCAPOH,ID;
  49. float res0,res1;

  50. /*********************************************************************************************************
  51. ** 函数功能 :延时函数
  52. ** 函数说明 :利用软件延时,占用CPU,经调试最小单位大约为1ms
  53. ** 入口参数 :time:需要延时的时间,单位ms
  54. ** 出口参数 :无
  55. *********************************************************************************************************/
  56. void Delay_ms(uint time)
  57. {
  58.         uint i,j;
  59.         for(i = 0;i < time;i ++)
  60.                 for(j = 0;j < 930;j ++);
  61. }

  62. void ms_delay(unsigned int t)
  63.      {
  64.    unsigned int i,j;
  65.     for(i=t;i>0;i--)
  66.     for(j=110;j>0;j--);
  67.      }

  68. void us_delay(unsigned int t)
  69. {
  70.    while(t--);
  71. }

  72. void rst()
  73. {
  74.           uint s;
  75.           DAI=0;
  76.           for(s=0;s<1000;s++);
  77.           {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}
  78. }
  79. void Delay_Fash (uint x)  // 1ms Delay
  80. {
  81.     uint t;
  82.     t = 0;
  83.     while (x--)
  84.                 {
  85.                           for (t = 0; t < 5000; t++);
  86.     }
  87. }
  88. void Delay(uint x)  // 1ms Delay
  89. {
  90.     uint t;
  91.     t = 0;
  92.     while (x--)
  93.         {
  94.      for (t = 0; t < 330; t++);
  95.     }
  96. }
  97. /*uart初始化*/
  98.   void Uart_Init()//使用独立的波特率发生器(STC12C560S2或带有独立波特率发生器//、//的单片机均可)
  99. {
  100.       SCON=0x50;     //设置为串行口以方式1工作,8位异步通讯,允许接收中断。
  101.       PCON=0x80;     //SMOD波特率选择位为1,SMOD=1.
  102.       BRT=0xfa;//波特率9600 256-晶振频率/波特率x16=BRT
  103.       AUXR=0x11;     //T0、T1不12分频,速度是89C51的12倍,启动独立波特率//发生器,每个时钟计数一次
  104. //设置串口1的波特率发生器为独立波特率发生器,
  105.    //   AUXR1=0x80;    //切换到P1口
  106.       ES=1;         //开启串口中断
  107.       EA=1;         //开启总中断
  108. }
  109. void Send_Uart(unsigned char value){//向WIFI模块发送数据
  110.         ES=0;
  111.         TI=0;
  112. SBUF=value;//发送完后TI变1
  113. while(!TI);
  114. TI=0;
  115. ES=1;
  116. }
  117.   /*给esp8266发送指令*/
  118. void ESP8266_Set(unsigned char *puf)
  119. {
  120.         while(*puf){
  121.         Send_Uart(*puf);
  122.         us_delay(5);
  123.         puf++;
  124.         }
  125.         us_delay(5);
  126.         Send_Uart('\r');
  127.         us_delay(5);
  128.         Send_Uart('\n');
  129.         ms_delay(20000);
  130. }
  131. void code0()
  132. {
  133.   DAI=1;
  134.         _nop_();
  135.    DAI=0;
  136.    _nop_(); _nop_();_nop_();_nop_();
  137.          _nop_();_nop_();_nop_();_nop_();
  138.          _nop_();_nop_();_nop_();_nop_();
  139. }
  140.                  
  141.   void code1()
  142. {
  143.   DAI=1;
  144. _nop_(); _nop_();_nop_();_nop_();
  145.          _nop_();_nop_();_nop_();_nop_();
  146.          _nop_();_nop_();_nop_();_nop_();

  147.   DAI=0;
  148.   _nop_();_nop_(); _nop_(); _nop_();
  149. }
  150.   //打开灯
  151. void bright()
  152. {        unsigned int j;
  153.     for(j=0;j<720;j++)code1();
  154. }
  155. //关闭灯函数
  156.   void dark()
  157. {        unsigned int j;
  158.    
  159.     for(j=0;j<720;j++)code0();
  160. }
  161. void send_2811_24bits(uchar dat1,uchar dat2,uchar dat3)
  162. {       
  163.     uchar a;
  164. //        uchar b;
  165.           for(a=0;a<8;a++)         //dat1
  166.           {
  167.                     if(dat1&0x80)
  168.                     {
  169.                             code1();                       
  170.                     }
  171.                     else
  172.                     {                
  173.                             code0();
  174.                     }
  175.                     dat1=dat1<<1;               
  176.           }
  177.           for(a=0;a<8;a++)                       //dat2
  178.           {       
  179.                     if(dat2&0x80)
  180.                     {                  
  181.                               code1();                       
  182.                     }
  183.                     else
  184.                     {       
  185.                         code0();
  186.                     }
  187.                     dat2=dat2<<1;       
  188.           }                                                 
  189.           for(a=0;a<8;a++)                      //dat3
  190.           {       
  191.                     if(dat3&0x80)
  192.                     {               
  193.                               code1();
  194.                     }
  195.                     else
  196.                     {       
  197.                             code0();
  198.                     }
  199.                     dat3=dat3<<1;               
  200.           }
  201. }





  202. void Jump()
  203. {
  204.           uint i;
  205.           uchar Colour = 0;             //这个参数值域:0~7
  206.           uchar Count  = 0;  //跳变次数 //这个参数值域:0~1
  207.           speed        = 150;
  208.           while(1)
  209.           {                      if(k5==0)
  210.                  {
  211.                  Delay_ms(5);
  212.                  if(k5==0)
  213.                   {
  214.                    return;
  215.                    ID=0;       
  216.                   }
  217.                   }
  218.                     for(i=0;i<50;i++) //Number = 50
  219.                     {
  220.                               send_2811_24bits(Table_R[Colour],Table_G[Colour],Table_B[Colour]);
  221.                     }
  222.                     rst();
  223.                     Delay(speed);
  224.                
  225.                     Colour++;
  226.                     if(Colour>=7)
  227.                     {
  228.                               Colour = 0;
  229.                               Count++;
  230.                               if(Count>1)
  231.                               {
  232.                                         Count = 0;
  233.                                         return;
  234.                               }
  235.                     }
  236.           }
  237. }


  238. void Flow()
  239. {
  240.           uint  i,Stack;
  241.           uchar Colour1,Colour2;
  242.           Stack   = 0;
  243.           Colour1 = 0;
  244.           Colour2 = 6;
  245.        
  246.           speed=5;     //17
  247.        
  248. while(1)
  249.           {               if(k5==0)
  250.                  {
  251.                  Delay_ms(5);
  252.                  if(k5==0)
  253.                   {
  254.                    return;
  255.                    ID=0;       
  256.                   }
  257.                   }
  258.                     for(i=0;i<Number;i++)
  259.                     {
  260.                               if(i<Stack)
  261.                               {
  262.                                         send_2811_24bits(Table_R[Colour1],Table_G[Colour1],Table_B[Colour1]);
  263.                               }
  264.                                else
  265.                               {
  266.                                         send_2811_24bits(Table_R[Colour2],Table_G[Colour2],Table_B[Colour2]);
  267.                               }
  268.                     }
  269.                     rst();
  270.                     Delay_Fash(speed);
  271.                     Stack++;
  272.                     
  273.                                 if(Stack>Number)
  274.                     {
  275.                               Stack = 1;
  276.                               Colour2 = Colour1;
  277.                               Colour1++;
  278.                               if(Colour1>6)
  279.                               {
  280.                                         return;
  281.                               }
  282.                     }
  283.           }
  284. }
  285. void Pass()
  286. {
  287.           int   i,Stack,Stack_Buf;
  288.           uchar Pass_Sec;
  289.           char  Colour,Colour_Buf;
  290.           uchar TIMES=0;
  291.        
  292.           Pass_Sec   = 12;
  293.           Colour_Buf = 0;
  294.           Stack_Buf  = 0;
  295.           speed      = 5;
  296.           while(1)
  297.           {                 if(k5==0)
  298.                  {
  299.                  Delay_ms(5);
  300.                  if(k5==0)
  301.                   {
  302.                    return;
  303.                    ID=0;       
  304.                   }
  305.                   }
  306.                     Stack  = Stack_Buf;
  307.                     Colour = Colour_Buf;
  308.                     for(i=0;i<Number;i++)
  309.                     {
  310.                               send_2811_24bits(Table_R[Colour],Table_G[Colour],Table_B[Colour]);
  311.                               Stack++;
  312.                               if(Stack > Pass_Sec)
  313.                               {
  314.                                         Stack = 0;
  315.                                         Colour++;
  316.                                         if(Colour>6)
  317.                                         {
  318.                                                   Colour=0;
  319.                                         }
  320.                               }
  321.         }
  322.                     rst();
  323.                     Delay_Fash(speed);
  324.                     Stack_Buf--;
  325.                     {
  326.                               if(Stack_Buf<0)
  327.                                {
  328.                                         Stack_Buf = Pass_Sec;
  329.                                         Colour_Buf--;
  330.                                         if(Colour_Buf<0)
  331.                                         {
  332.                                                   Colour_Buf = 6;
  333.                                         }
  334.                                         if(Colour_Buf==0)
  335.                                         {
  336.                                                   TIMES++;
  337.                                                   if(TIMES>1)
  338.                                                   {
  339.                                                             return;
  340.                                                   }
  341.                                         }
  342.                               }
  343.                     }
  344.           }
  345. }


  346. void Case()
  347. {
  348.         int   i,Stack,Stack_Buf,TIMES;
  349.         uchar Pass_Sec;
  350.         char  Colour,Colour_Buf;

  351.         TIMES=0;
  352.         Pass_Sec=7;
  353.         Colour_Buf=0;
  354.         Stack_Buf=0;
  355.         speed=10;
  356.         while(1)
  357.         {
  358.      if(k5==0)
  359.                  {
  360.                  Delay_ms(5);
  361.                  if(k5==0)
  362.                   {
  363.                    return;
  364.                    ID=0;       
  365.                   }
  366.                   }
  367.                 Stack=Stack_Buf;
  368.                 Colour=Colour_Buf;
  369.                 for(i=0;i<Number;i++)
  370.                 {
  371.                         if(Stack<4)
  372.                         {
  373.                                 send_2811_24bits(Table_R[Colour],Table_G[Colour],Table_B[Colour]);
  374.                         }
  375.                         else
  376.                         {
  377.                                 send_2811_24bits(255,255,255);
  378.                         }
  379.                         Stack++;
  380.                         if(Stack>Pass_Sec)
  381.                         {
  382.                                 Stack=0;
  383.                         }
  384.                 }
  385.                 rst();
  386.                 Delay_Fash(speed);
  387.                 Stack_Buf--;
  388.                 {
  389.                         if(Stack_Buf<0)
  390.                         {
  391.                                 Stack_Buf=Pass_Sec;
  392.                         }
  393.                 }
  394.                 TIMES++;
  395.                 if(TIMES>120)
  396.                 {
  397.                         TIMES=0;
  398.                         Colour_Buf++;
  399.                         if(Colour_Buf>5)
  400.                         {
  401.                                 return;
  402.                         }
  403.                 }
  404.         }
  405. }

  406. void adchange()
  407. {
  408. res0=GetADCResult(ADC_CH0);       

  409.    CCAP0H =256-ADC_RES;                       
  410. res1=GetADCResult(ADC_CH1);       
  411. }

  412. void key()
  413. {
  414.             if(CCAP0H<255)
  415.                  {
  416.                  if(k1==0)
  417.                  {
  418.                  Delay_ms(5);
  419.                  if(k1==0)
  420.                   {
  421.                   CCAP0H++;                 
  422.                   }
  423.                   }
  424.                   }               
  425.                
  426.                    if( CCAP0H>0)
  427.                    {
  428.                   if(k2==0)
  429.                  {
  430.                   Delay_ms(5);
  431.                   if(k2==0)
  432.                   {
  433.                   CCAP0H--;                                    
  434.                   }
  435.                  }
  436.                    }                 
  437. }

  438. void changecolour1()
  439. {unsigned char i;
  440.   rst();
  441. for(i=0;i<30;i++)
  442. {        
  443.   if(k5==0)
  444.                  {
  445.                  Delay_ms(5);
  446.                  if(k5==0)
  447.                   {
  448.                    return;
  449.                    ID=0;       
  450.                   }
  451.                   }       
  452. send_2811_24bits(0,255,0);

  453. }
  454. }
  455. void changecolour2()
  456. {unsigned char i;
  457.   rst();
  458. for(i=0;i<30;i++)
  459. {        
  460.   if(k5==0)
  461.                  {
  462.                  Delay_ms(5);
  463.                  if(k5==0)
  464.                   {
  465.                    return;
  466.                    ID=0;       
  467.                   }
  468.                   }       
  469. send_2811_24bits(0,0,255);

  470. }
  471. }
  472. void changecolour3()
  473. {unsigned char i;
  474.   rst();
  475. for(i=0;i<30;i++)
  476. {        
  477.   if(k5==0)
  478.                  {
  479.                  Delay_ms(5);
  480.                  if(k5==0)
  481.                   {
  482.                    return;
  483.                    ID=0;       
  484.                   }
  485.                   }       
  486. send_2811_24bits(255,0,0);

  487. }
  488. }

  489. void shouji()
  490. {       
  491.   if(Receive=='0')
  492.                 {
  493.                  ID=6;
  494.                  CCAP0H=30;
  495.              }                  


  496.                 if(Receive=='1')
  497.                 {
  498.                  ID=6;
  499.                  CCAP0H=60;
  500.              }
  501.                 if(Receive=='2')
  502.                 {
  503.                   ID=6;
  504.                   CCAP0H=90;
  505.             }
  506.                         if(Receive=='3')
  507.                 {
  508.                   ID=6;
  509.                   CCAP0H=120;
  510.             }
  511.                 if(Receive=='4')
  512.                 {
  513.                   ID=6;
  514.                   CCAP0H=150;
  515.             }
  516.                 if(Receive=='5')
  517.                 {
  518.                   ID=6;
  519.                   CCAP0H=180;
  520.             }
  521.                 if(Receive=='6')
  522.                 {
  523.                   ID=6;
  524.                   CCAP0H=210;
  525.             }
  526.                         if(Receive=='7')
  527.                 {
  528.                   ID=6;
  529.                   CCAP0H=254;
  530.             }
  531.                         if(Receive=='d')
  532.                 {
  533.                   ID=6;
  534.                   CCAP0H=0;
  535.             }                                                                                                               
  536. }          
  537. void main()
  538. {       
  539.           CCAP0H=254;
  540.           ID=0;
  541.        TMOD|=0X10;
  542.            TH1=0XFC;        //给定时器赋初值,定时1ms
  543.               TL1=0X18;
  544.            EA=1;
  545.            TR1=1;
  546.            ET1=1;
  547.                                                                                                                                                               
  548.     Uart_Init();
  549.         PCA_init();
  550.         Timer0_init();
  551.         ADC_Init(ADC_PORT0 | ADC_PORT1); //配置通道P1^0 ,P1^1 为AD采集口,如要配置其他其他口,直接用或运算加进初始化函数中
  552.                                        
  553.          ESP8266_Set("AT+CWMODE=3");//选择wifi应用模式,此时为STA模式
  554.         ms_delay(3000);
  555. //        ESP8266_Set("AT+RST");  
  556.         ESP8266_Set("AT+CWJAP=\"WIFI\",\"12345678\"");//连接网络
  557.         ms_delay(15000);
  558.         ESP8266_Set("AT+CIPMUX=0");//设置单连接模式,透传只能在单连接模式下进行
  559.         ms_delay(5000);
  560.         ESP8266_Set("AT+CIPMODE=1");//设置透传模式
  561.                   ms_delay(5000);
  562.         ESP8266_Set("AT+CIPSTART=\"TCP\",\"10.50.84.160\",8080");//连接到服务器

  563.          while(1)
  564.          {
  565.                    shouji();
  566.            switch(ID)
  567.                      {
  568.                   case(0):bright();key();break;
  569.                   case(1):bright();adchange();break;       
  570.                   case(2):Flow();Case();Pass();Jump();break;
  571.                    case(3):changecolour1();break;
  572.                    case(4):changecolour2();break;
  573.                    case(5):changecolour3();break;
  574.                     case(6):bright();break;
  575.                       }

  576.      }       
  577. }

  578. void timer1() interrupt 3
  579. {
  580.     if(k3==0)
  581.                  {
  582.                  Delay_ms(5);
  583.                  if(k3==0)
  584.                   {
  585.                   ID=1;       
  586.                   }
  587. ……………………

  588. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

全部资料下载地址:
调光基于12c5a60s2.zip (60.05 KB, 下载次数: 301)

评分

参与人数 1黑币 +1 收起 理由
zp980305 + 1 绝世好帖!

查看全部评分

回复

使用道具 举报

ID:231650 发表于 2017-9-7 20:33 | 显示全部楼层
請問ESP8266是用AT COMMAND嗎
回复

使用道具 举报

ID:235359 发表于 2017-11-4 15:29 | 显示全部楼层
非常谢谢你
回复

使用道具 举报

ID:269439 发表于 2018-1-17 21:44 | 显示全部楼层
有图没有啊
回复

使用道具 举报

ID:228939 发表于 2018-1-22 17:19 | 显示全部楼层
16个灯一直是白色,不能调
回复

使用道具 举报

ID:290081 发表于 2018-5-14 11:07 | 显示全部楼层
搞不定
回复

使用道具 举报

ID:318462 发表于 2018-5-15 12:00 | 显示全部楼层
哪位大侠能发给我一个包,我积分不够下载的。学习一下 46196428@qq.com
回复

使用道具 举报

ID:336959 发表于 2018-5-23 23:12 | 显示全部楼层
好东西  我现在刚好用到试试
回复

使用道具 举报

ID:276151 发表于 2018-7-12 00:15 | 显示全部楼层
下载学习一下,多谢
回复

使用道具 举报

ID:86020 发表于 2018-9-29 16:24 | 显示全部楼层
下载学习学习,多谢
回复

使用道具 举报

ID:138247 发表于 2018-10-12 22:59 | 显示全部楼层
感谢分享。。。。
回复

使用道具 举报

ID:447343 发表于 2018-12-16 22:06 | 显示全部楼层
厉害了我的哥
回复

使用道具 举报

ID:445653 发表于 2018-12-19 09:35 | 显示全部楼层
挺好的,功能可以实现,但是感觉细节需要控制
回复

使用道具 举报

ID:385912 发表于 2019-3-28 23:55 | 显示全部楼层
太好了,谢谢大神分享
回复

使用道具 举报

ID:432307 发表于 2019-5-1 09:11 | 显示全部楼层

太好了,谢谢大神分享
回复

使用道具 举报

ID:299054 发表于 2019-9-5 16:03 | 显示全部楼层
谢谢大神分享
回复

使用道具 举报

ID:226316 发表于 2020-5-13 09:20 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:791100 发表于 2020-11-10 16:44 | 显示全部楼层
非常实用值得学习,非常感谢
回复

使用道具 举报

ID:180919 发表于 2020-11-10 21:36 | 显示全部楼层
好东西,非常实用值得学习,谢谢大神分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表