VECENT_LIN 发表于 2024-2-3 15:16:49

STC8H8K64U,驱动960颗16x60段WS2812,制作动感音频FFT

STC8H8K64U,驱动960颗16x60段WS2812,效果展示!{:4_174:}{:4_174:}{:4_174:}

VECENT_LIN 发表于 2024-3-15 16:26:02

用自制的STC8H8K64U核心板加MIC也可以驱动

VECENT_LIN 发表于 2024-2-3 15:18:12

有兴趣欢迎沟通交流{:4_186:{:4_186:}{:4_186:}

VECENT_LIN 发表于 2024-2-3 15:22:07

颜色和动态效果都可以根据自己想法改进

VECENT_LIN 发表于 2024-2-3 15:32:22

6X150的音柱

VECENT_LIN 发表于 2024-2-3 15:43:10

VECENT_LIN 发表于 2024-2-3 15:32
6X150的音柱

谢谢!

380091044 发表于 2024-2-19 16:47:23

这个有动感

VECENT_LIN 发表于 2024-2-19 16:48:25

380091044 发表于 2024-2-19 16:47
这个有动感

音频同步

380091044 发表于 2024-2-19 16:51:51

VECENT_LIN 发表于 2024-2-19 16:48
音频同步

分享出来,大家一起玩,可玩出不同的花样来,与粉同乐,

VECENT_LIN 发表于 2024-2-19 17:01:21

void showbar()
{                               
   
          
    u16 i,j,f;
          u8 i2,high;//,f2,f3;
          
          for(i2=0;i2<16;i2++)          //读取FFT转换数据
        {
                float t0=0;
                t0=sqrt(pow((s.real+s.real),2)+pow((s.imag+s.imag),2))/2;
                dis_rdata=(u8)t0;
        }
///**************************************************************/
///*****************写入下屏,i:0~16,表示16列**************/
///***************************high:表示列的高度*********/
       
      for (i=0;i<16;i++) //在显示下屏显存必须清0,后面有操作是或运算
          {
      for (j=0;j<60;j++)
                {
                       dis_data=0;
                }        
    }
   for(i=0;i<16;i++)
       {   
               high=dis_rdata;
                // high=15;
               if(high<4)high=0;//判断小于2时,为0/
               if(high>60)high=56;        //判断高于60时,为62***/
                  
                          
                               for(j=0;j<high;j++)
                        {

                 if(i==1||i==3||i==5||i==7||i==9||i==11||i==13||i==15)
                                                        {dis_data=dis_RGB;//0,2,4,6,8,10,12,14倒相
                                                        }
                                                        else
                                                        {dis_data=dis_RGB;
                     
                                                }                                                
                     
                                                }                                                
       
                                                                if(high>0)               
                                {       

                        switch(i)
      {case 0:dis_data=0x00ff00;dis_data=0x00ff00;break;//R
                       case 1:dis_data=0x0000ff;dis_data=0x0000ff;break;//G
                       case 2:dis_data=0xff0000;dis_data=0xff0000;break;//B
                       case 3:dis_data=0xffff00;dis_data=0xffff00;break;//BR
                       case 4:dis_data=0xff00ff;dis_data=0xff00ff;break;//BG
                       case 5:dis_data=0x00ffff;dis_data=0x00ffff;break;//RG
                       case 6:dis_data=0xffffff;dis_data=0xffffff;break;//RGB
                       case 7:dis_data=0x00ff00;dis_data=0x00ff00;break;//R
                       case 8:dis_data=0x0000ff;dis_data=0x0000ff;break;//G
                       case 9:dis_data=0xff0000;dis_data=0xff0000;break;//B
                       case 10:dis_data=0x00ff00;dis_data=0x00ff00;break;//R
                       case 11:dis_data=0x0000ff;dis_data=0x0000ff;break;//G
                       case 12:dis_data=0xff0000;dis_data=0xff0000;break;//B
                       case 13:dis_data=0x00ff00;dis_data=0x00ff00;break;//R
                       case 14:dis_data=0x0000ff;dis_data=0x0000ff;break;//G
                       case 15:dis_data=0xff0000;dis_data=0x0000ff;break;//B
                        }                               
                               
      }
      
   
       
       
       }   
        for(i=0;i<60;i++)                        //数据合并
      {               
         
                                                
                                                        data1=TC<<8|TC;                                                       
               for (f1=0; f1<16; f1++)
    {
      
      if (data1&0x8000)            // 发送数据
                                {
                                switch(f1)
      {case 0:dis_data=dis_data|0x00ff00;break;//R
                       case 1:dis_data=dis_data|0x00ffff;break;//G
                       case 2:dis_data=dis_data|0x00ff00;break;//B
                       case 3:dis_data=dis_data|0x00ffff;break;//BR
                       case 4:dis_data=dis_data|0x00ff00;break;//BG
                       case 5:dis_data=dis_data|0x00ffff;break;//RG
                       case 6:dis_data=dis_data|0x00ff00;break;//RGB
                       case 7:dis_data=dis_data|0x00ffff;break;//R
                       case 8:dis_data=dis_data|0x00ff00;break;//G
                       case 9:dis_data=dis_data|0x00ffff;break;//B
                       case 10:dis_data=dis_data|0x00ff00;break;//R
                       case 11:dis_data=dis_data|0x00ffff;break;//G
                       case 12:dis_data=dis_data|0x00ff00;break;//B
                       case 13:dis_data=dis_data|0x00ffff;break;//R
                       case 14:dis_data=dis_data|0x00ff00;break;//G
                       case 15:dis_data=dis_data|0x00ffff;break;//B
                        }                               
                                        }
      data1=data1<<1;
                       
                                       
                                }
//   
//         
      }       
                                for(i=0;i<60;i++)                        //数据合并
      {               
         
                                        for(f3=0;f3<2;f3++)
            {               
         
                                                        data1=TC;                                                       
               for (f1=0; f1<8; f1++)
    {
      f2=f3*8+f1;
      if (data1&0x80)            // 发送数据
                                {
                                if(f1==0||f1==2||f1==4||f1==6)
                                                        {
                                                               
                                                                dis_data=dis_data|0x0000ff;//0,2,4,6倒相
                                                        }
                                                        else
                                                        {dis_data=dis_data|0x00ff00;   //1,3,5,7
                     
                                                }
                                        }
      data1=data1<<1;
                       
                                       
                                }
   
            }
      }       
   
       for(f=0;f<16;f++)                              //数据转存
      {               
            for(i=0;i<60;i++)
            {                       
      
                                                DisP_Color(        dis_data);
            }
      }       

                delay_ms(100);
                reset();
   
       
}

VECENT_LIN 发表于 2024-2-19 17:04:54

380091044 发表于 2024-2-19 16:51
分享出来,大家一起玩,可玩出不同的花样来,与粉同乐,

分享显示子程序,硬件的接法都不一样,只能按你的原理图重新修改就好,用音频的FFT修改就好
页: [1] 2 3 4
查看完整版本: STC8H8K64U,驱动960颗16x60段WS2812,制作动感音频FFT