用单片机控制LED灯带的问题

2019-07-15 11:35发布

最近在研究单片机控制ws2812b灯带 我用的是1T的单片机STC12c2052AD  晶振11.0592M  
但是控制有问题 我想亮10个灯 但是只亮一个 颜 {MOD}还不对  有了解的大神吗  指导一下 感激之至
资料如下 简介 时序 数据结构
代码如下:
  1. #include "STC12C2052AD.H"
  2. #include <intrins.h>

  3. #define uchar unsigned char
  4. sbit Din=P3^5;      //数据端口

  5. uchar bdata LED_DAT;
  6. sbit bit0 = LED_DAT^0;
  7. sbit bit1 = LED_DAT^1;
  8. sbit bit2 = LED_DAT^2;
  9. sbit bit3 = LED_DAT^3;
  10. sbit bit4 = LED_DAT^4;
  11. sbit bit5 = LED_DAT^5;
  12. sbit bit6 = LED_DAT^6;
  13. sbit bit7 = LED_DAT^7;

  14. uchar RR,GG,BB;

  15. void delayus(uchar z)
  16. {
  17.         uchar i;
  18.         for (i=0;i<z;i++)
  19.         {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}
  20. }

  21. void CODE1()
  22. {
  23.         Din= 1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();                       
  24.         Din= 0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();                                                                       
  25. }

  26. void CODE0()
  27. {
  28.         Din= 1;_nop_();_nop_();_nop_();_nop_();                                                                                                       
  29.         Din= 0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();                       
  30. }

  31. void Reset()
  32. {
  33.   Din = 0;
  34.   delayus(60);       
  35. }

  36. void SendData()
  37. {
  38.   LED_DAT = GG;
  39.         if(bit7==1) {CODE1();} else {CODE0();}   
  40.         if(bit6==1) {CODE1();} else {CODE0();}   
  41.         if(bit5==1) {CODE1();} else {CODE0();}   
  42.         if(bit4==1) {CODE1();} else {CODE0();}   
  43.         if(bit3==1) {CODE1();} else {CODE0();}   
  44.         if(bit2==1) {CODE1();} else {CODE0();}   
  45.         if(bit1==1) {CODE1();} else {CODE0();}   
  46.         if(bit0==1) {CODE1();} else {CODE0();}
  47.   LED_DAT = RR;
  48.         if(bit7==1) {CODE1();} else {CODE0();}   
  49.         if(bit6==1) {CODE1();} else {CODE0();}   
  50.         if(bit5==1) {CODE1();} else {CODE0();}   
  51.         if(bit4==1) {CODE1();} else {CODE0();}   
  52.         if(bit3==1) {CODE1();} else {CODE0();}   
  53.         if(bit2==1) {CODE1();} else {CODE0();}   
  54.         if(bit1==1) {CODE1();} else {CODE0();}   
  55.         if(bit0==1) {CODE1();} else {CODE0();}
  56.   LED_DAT = BB;
  57.          if(bit7==1) {CODE1();} else {CODE0();}   
  58.          if(bit6==1) {CODE1();} else {CODE0();}   
  59.          if(bit5==1) {CODE1();} else {CODE0();}   
  60.          if(bit4==1) {CODE1();} else {CODE0();}   
  61.          if(bit3==1) {CODE1();} else {CODE0();}   
  62.          if(bit2==1) {CODE1();} else {CODE0();}   
  63.          if(bit1==1) {CODE1();} else {CODE0();}   
  64.          if(bit0==1) {CODE1();} else {CODE0();}
  65. }

  66. void send_string_data(uchar num)
  67. {
  68.         uchar i;
  69.         for (i=0;i<num;i++)
  70.         {
  71.            SendData();
  72.                    Reset()         ;
  73.         }
  74. }

  75. void main()
  76. {  
  77.   // P3M0=0x00;    //强推挽输出 配置P3^5口
  78.   // P3M1=0x20;     //强推挽输出 配置P3^5口

  79.    RR=25;GG=25;BB=112;   //深蓝 {MOD}
  80.    delayus(50);       
  81.    
  82.    send_string_data(10);
  83.            while(1);
  84. }
复制代码


看看什么地方出错了  谢谢大家



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。