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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2003|回復: 12
收起左側

求指導個簡單的WS2812的單片機程序編寫,萬分感謝

[復制鏈接]
ID:977079 發表于 2023-7-2 19:34 | 顯示全部樓層 |閱讀模式

由于本論壇禁止直接求程序,禁止伸手黨,所以向大家請教一下大致的實現方法與思路,理清頭緒后我自己來寫程序去實現,謝謝大家

急需一個STC15W204S的單片機驅動WS2812的驅動程序,要求是:需要帶按鍵切換,紅綠藍白四個顏色,有懂的師傅們抽空幫個忙!十分感謝!還有就是如何我要學習如何寫這個WS2812的驅動程序需要學習什么直接一點的資料能快速入門?
回復

使用道具 舉報

ID:213173 發表于 2023-7-3 07:48 | 顯示全部樓層
如果樓主略懂一點編程,可以參考壇友的代碼添加按鍵操縱即可,否則還是買個學習板,老老實實從流水燈學起。
《WS2812的極簡驅動程序,控制芯片為STC15 1T系列單片機》
http://www.zg4o1577.cn/bbs/dpj-170852-1.html
回復

使用道具 舉報

ID:899081 發表于 2023-7-3 08:31 | 顯示全部樓層
首先看規格書。
回復

使用道具 舉報

ID:136485 發表于 2023-7-3 08:36 | 顯示全部樓層
這個論壇里一搜一大把,你這個功能更簡單
回復

使用道具 舉報

ID:899081 發表于 2023-7-3 08:43 | 顯示全部樓層
#include  "reg52.h"
#include  "intrins.h"



unsigned char   green,red,biue;

bit   oneep;
sbit  out=P1^2;

void Delay2us()                //@11.0592MHz
{
        unsigned char i;

        i = 3;
        while (--i);
}



void Delay500ms()                //@11.0592MHz
{
        unsigned char i, j, k;

        _nop_();
        _nop_();
        i = 10;
        j = 3;
        k = 50;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}







/////發送1碼///////////////////

void   one()
{
  out=1;
  Delay2us();
  out=0;
  _nop_();
        _nop_();
}


//////發送0碼////////////
void zero()
{
  out=1;
   _nop_();
        _nop_();
  out=0;
  Delay2us();

}



  





//復位碼//////////////

void convert()
{

  unsigned char i,g,b,r;
   g=green;
   r=red;
   b=biue;
  for(i=0;i<8;i++)
      {oneep=(r>>1);
      
          if(oneep==1)
           one();
          if(oneep==0)
            zero();
        }
    for(i=0;i<8;i++)
      {oneep=(g>>1);
      
          if(oneep==1)
           one();
          if(oneep==0)
            zero();
        }   
   for(i=0;i<8;i++)
      {oneep=(b>>1);
          if(oneep==1)
           one();
          if(oneep==0)
            zero();
        }
   
}

//////////////發送5組數函數/////////////////
void   fasong()
{
  
  unsigned  char i;

  for(i=0;i<15;i++)
     { convert();
      }
}


////////////發送//////////////////////////
void   reddd()
{
  unsigned  char i;
   
   red=0;
  green=0;
  biue=0;
  for(i=0;i<15;i++)
     { convert();
      }
   red=200;
   convert();
}


///////////////發送4組數////////////////////////////////
void  fasongsirun()
{  unsigned   char i;
   red=0;
  green=0;
  biue=0;
  for(i=0;i<3;i++)
    { convert();
      }
     red=200;
   convert();
}
///////////////發送3組數//////////////////////
void  fasong3()
{ unsigned   char i;
   red=0;
  green=0;
  biue=0;
  for(i=0;i<2;i++)
    { convert();
      }
      red=200;
   convert();
}
//////////////發送2組數/////////////////
void faone()
{
  unsigned   char i;
  red=0;
  green=0;
  biue=0;
  for(i=0;i<1;i++)
   { convert();
      }
     red=200;
     convert();
}

////////////////////////////
void  oeoo()
{    red=200;
     convert();
}


//////////////////////////////////
void   greengg()
{

  unsigned  char i;
   
   red=0;
  green=0;
  biue=0;
  for(i=0;i<4;i++)
     { convert();
      }
   green=200;
   convert();
   out=0;
   Delay500ms();
   green=0;
   for(i=0;i<3;i++)
     { convert();
      }
   green=200;
   convert();
   out=0;
   Delay500ms();
     green=0;
    for(i=0;i<2;i++)
     { convert();
      }
   green=200;
   convert();
   out=0;
   Delay500ms();
    green=0;
   for(i=0;i<1;i++)
     { convert();
      }
   green=200;
   convert();
   out=0;
   Delay500ms();
   green=200;
     convert();
      out=0;
   Delay500ms();

}

void   lanlan()
{

  unsigned  char i;
   
   red=0;
  green=0;
  biue=0;
  for(i=0;i<4;i++)
     { convert();
      }
   biue=200;
   convert();
   out=0;
   Delay500ms();
   biue=0;
   for(i=0;i<3;i++)
     { convert();
      }
   biue=200;
   convert();
   out=0;
   Delay500ms();
     biue=0;
    for(i=0;i<2;i++)
     { convert();
      }
   biue=200;
   convert();
   out=0;
   Delay500ms();
    biue=0;
   for(i=0;i<1;i++)
     { convert();
      }
   biue=200;
   convert();
   out=0;
   Delay500ms();
   biue=200;
     convert();
      out=0;
   Delay500ms();

}

void   baibai()
{

  unsigned  char i;
   
   red=0;
  green=0;
  biue=0;
  for(i=0;i<4;i++)
     { convert();
      }
   red=200;
   biue=200;
   green=200;
   convert();
   out=0;
   Delay500ms();
   biue=0;
  green=0;
  biue=0;
   for(i=0;i<3;i++)
     { convert();
      }
    red=200;
   biue=200;
   green=200;

   convert();
   out=0;
   Delay500ms();
    biue=0;
  green=0;
  biue=0;


    for(i=0;i<2;i++)
     { convert();
      }
    red=200;
   biue=200;
   green=200;
   convert();
   out=0;
   Delay500ms();
     biue=0;
  green=0;
  biue=0;


   for(i=0;i<1;i++)
     { convert();
      }
     red=200;
   biue=200;
   green=200;
   convert();
   out=0;
   Delay500ms();
    biue=200;
  green=200;
  biue=200;
     convert();
      out=0;
   Delay500ms();

}



/////////////////紅 綠 藍 白////////////
void  rgb()

{
   red=100;
    fasong();
   out=0;
  Delay500ms();
    red=0;
    green=100;
   fasong();
    out=0;
   Delay500ms();
   green=0;
   biue=100;
   fasong();
     out=0;
   Delay500ms();
    red=100;
   green=100;
   biue=100;
    fasong();
     out=0;
   Delay500ms();
}
//////////////////////////////////////
void   shunn()
{

  unsigned  char i;
   red=200;
   convert();
   out=0;
   Delay500ms();
  for(i=0;i<2;i++)
     {convert();}
   out=0;
   Delay500ms();
  for(i=0;i<3;i++)
     {convert();}
   out=0;
   Delay500ms();
  for(i=0;i<4;i++)
     {convert();}
   out=0;
   Delay500ms();
   
  for(i=0;i<5;i++)
     {convert();}
   out=0;
   Delay500ms();
    red=0;
   green=0;
   biue=0;
   for(i=0;i<5;i++)
     {convert();}
   out=0;
   Delay500ms();

}
void   shunng()
{

  unsigned  char i;
   green=200;
   convert();
   out=0;
   Delay500ms();
  for(i=0;i<2;i++)
     {convert();}
   out=0;
   Delay500ms();
  for(i=0;i<3;i++)
     {convert();}
   out=0;
   Delay500ms();
  for(i=0;i<4;i++)
     {convert();}
   out=0;
   Delay500ms();
   
  for(i=0;i<5;i++)
     {convert();}
   out=0;
   Delay500ms();
   red=0;
   green=0;
   biue=0;

   for(i=0;i<5;i++)
     {convert();}
   out=0;
   Delay500ms();

}
void   shunnl()
{

  unsigned  char i;
   biue=200;
   convert();
   out=0;
   Delay500ms();
  for(i=0;i<2;i++)
     {convert();}
   out=0;
   Delay500ms();
  for(i=0;i<3;i++)
     {convert();}
   out=0;
   Delay500ms();
  for(i=0;i<4;i++)
     {convert();}
   out=0;
   Delay500ms();
   
  for(i=0;i<5;i++)
     {convert();}
   out=0;
   Delay500ms();
    red=0;
   green=0;
   biue=0;
   for(i=0;i<5;i++)
     {convert();}
   out=0;
   Delay500ms();

}

void   shunnlv()
{

  unsigned  char i;
   biue=200;
   green=200;
   convert();
   out=0;
   Delay500ms();
  for(i=0;i<2;i++)
     {convert();}
   out=0;
   Delay500ms();
  for(i=0;i<3;i++)
     {convert();}
   out=0;
   Delay500ms();
  for(i=0;i<4;i++)
     {convert();}
   out=0;
   Delay500ms();
   
  for(i=0;i<5;i++)
     {convert();}
   out=0;
   Delay500ms();
  
    red=0;
   green=0;
   biue=0;
   for(i=0;i<5;i++)
     {convert();}
   out=0;
   Delay500ms();

}
void   shunnhl()
{

  unsigned  char i;
   red=200;
   green=200;
   convert();
   out=0;
   Delay500ms();
  for(i=0;i<2;i++)
     {convert();}
   out=0;
   Delay500ms();
  for(i=0;i<3;i++)
     {convert();}
   out=0;
   Delay500ms();
  for(i=0;i<4;i++)
     {convert();}
   out=0;
   Delay500ms();
   
  for(i=0;i<5;i++)
     {convert();}
   out=0;
   Delay500ms();
   red=0;
   green=0;
   biue=0;
   for(i=0;i<5;i++)
     {convert();}
   out=0;
   Delay500ms();

}







void main()
{
  red=0;
  green=0;
  biue=0;
while(1)
  {
   red=0;
   rgb();
   fasong();
    out=0;
   Delay500ms();
    reddd();
    out=0;
   Delay500ms();
    fasongsirun();
    out=0;
   Delay500ms();
   fasong3();
    out=0;
   Delay500ms();
    faone();
   out=0;
   Delay500ms();
   oeoo();
   out=0;
   Delay500ms();
   fasong();
    out=0;
   Delay500ms();
   
    lanlan();  
    baibai();
     shunn();
      shunng();
       shunnl;  
     shunnlv();
      shunnhl();
      
   }


}

ws2812b-mini-v3規格書_cn_v3.1.pdf

953.33 KB, 下載次數: 15

回復

使用道具 舉報

ID:899081 發表于 2023-7-3 08:44 | 顯示全部樓層
這個是很久以前搞來玩的,你可以先跑跑看在修改。
回復

使用道具 舉報

ID:688692 發表于 2023-7-3 08:56 | 顯示全部樓層
void sendbyte(unsigned char byte)
{
        unsigned char i;
        i=8;
        EA=0;
                do
                {
                        WS2812DAT=1;nop();
                        WS2812DAT=byte&0x80;nop();
                        WS2812DAT=0;nop();
                        byte=(byte<<1);                 //左移位
                }while(--i);
        EA=1;
}

發三個byte對應RGB的值就行了
燈不受控全白就把nop刪掉
還是全白說明單片機太慢,提高單片機的運行速度比如24MHz,直到能控制LED
回復

使用道具 舉報

ID:977079 發表于 2023-7-3 10:28 | 顯示全部樓層
wulin 發表于 2023-7-3 07:48
如果樓主略懂一點編程,可以參考壇友的代碼添加按鍵操縱即可,否則還是買個學習板,老老實實從流水燈學起。 ...

好的,謝謝!
回復

使用道具 舉報

ID:977079 發表于 2023-7-3 10:30 | 顯示全部樓層

我們公司就是生產幻彩WS2812LED的,主要想入門如何學習C語言,利用C語言自己能夠把LED點亮!
回復

使用道具 舉報

ID:977079 發表于 2023-7-3 10:31 | 顯示全部樓層
螞蟻上樹 發表于 2023-7-3 08:43
#include  "reg52.h"
#include  "intrins.h"

感謝師傅百忙抽空,我學習下!
回復

使用道具 舉報

ID:977079 發表于 2023-7-3 10:33 | 顯示全部樓層
cnos 發表于 2023-7-3 08:56
void sendbyte(unsigned char byte)
{
        unsigned char i;

好的,真心感謝!
回復

使用道具 舉報

ID:1053359 發表于 2023-7-3 12:48 | 顯示全部樓層
#include "stm32f4xx.h"

#define LED_COUNT 8     // WS2812 LED數量
#define RGB_BYTES 3     // 每個LED的RGB字節數
#define FRAME_BYTES (LED_COUNT * RGB_BYTES)    // 每幀的字節數

// 定義WS2812燈帶顏色緩沖區
uint8_t leds[FRAME_BYTES] = {0};

// 定義函數:發送WS2812數據位
void sendBit(uint8_t bitValue) {
    // TODO: 發送邏輯高或邏輯低到WS2812上
    // 可以通過控制GPIO輸出來實現

    // 延時一段時間以用于控制數據傳輸速度
    // 根據WS2812的時序要求來設置延時時間
}

// 定義函數:發送WS2812數據字節
void sendByte(uint8_t byteValue) {
    for (int i = 0; i < 8; i++) {
        uint8_t bit = (byteValue & (1 << (7 - i))) >> (7 - i);
        sendBit(bit);
    }
}

// 定義函數:發送WS2812數據幀
void sendFrame() {
    for (int i = 0; i < FRAME_BYTES; i++) {
        sendByte(leds[i]);
    }
}

// 初始化WS2812燈帶
void initWS2812() {
    // TODO: 初始化GPIO引腳為輸出模式,用于控制WS2812數據總線
    // 根據單片機型號和開發環境的不同,具體實現方式會有所不同
}

int main(void) {
    // 初始化WS2812燈帶
    initWS2812();
   
    while (1) {
        // 設置燈帶顏色
        // 假設將前4個LED設置為紅色,后4個LED設置為綠色
        for (int i = 0; i < LED_COUNT; i++) {
            if (i < LED_COUNT/2) {
                leds[i * RGB_BYTES] = 255;     // 紅色亮度(0-255)
                leds[i * RGB_BYTES + 1] = 0;   // 綠色亮度(0-255)
                leds[i * RGB_BYTES + 2] = 0;   // 藍色亮度(0-255)
            } else {
                leds[i * RGB_BYTES] = 0;       // 紅色亮度(0-255)
                leds[i * RGB_BYTES + 1] = 255; // 綠色亮度(0-255)
                leds[i * RGB_BYTES + 2] = 0;   // 藍色亮度(0-255)
            }
        }
        
        // 發送數據幀到WS2812燈帶
        sendFrame();
        
        // 延時一段時間,控制燈帶刷新速度
        // 根據需求和單片機的時鐘頻率設置適當的延時時間
    }
}
這個示例程序初始化了WS2812數據總線的GPIO引腳,并在一個無限循環中設置燈帶的顏色并發送數據幀。您可以根據需要修改LED_COUNT來適應實際連接的WS2812 LED數量,并根據需求修改設置燈帶顏色的代碼段。

請注意,該示例程序只是非常簡單的演示,真正的實現可能需要考慮更多的細節,例如定時器的使用和精確的時序控制,以確保WS2812數據的正確傳輸。此外,請確保按照您所使用的單片機型號和開發環境的要求進行設置和操作。

希望這個示例能對您有所幫助!如有任何問題,請隨時向我提問。
回復

使用道具 舉報

ID:977079 發表于 2023-7-3 20:50 | 顯示全部樓層
real8799190 發表于 2023-7-3 12:48
#include "stm32f4xx.h"

#define LED_COUNT 8     // WS2812 LED數量

好的,感謝師傅!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品入口久久 | 亚洲精品短视频 | 久久久久久国产精品免费免费男同 | 午夜精品视频 | 狠狠色网 | 欧美一级片在线观看 | 久久精品国产一区 | 男人的天堂久久 | 亚洲一区 中文字幕 | 免费在线观看黄视频 | 中文字幕亚洲视频 | 亚洲国产一区二区在线 | 国产成人jvid在线播放 | 一区二区三区在线看 | 成人国产精品视频 | 免费精品视频一区 | 日韩一级精品视频在线观看 | 91精品久久久久久久99 | 国产高清精品网站 | 成人久久 | 国产欧美一区二区三区日本久久久 | 精品少妇一区二区三区日产乱码 | 中文字幕加勒比 | 一区二区不卡 | 日韩高清一区 | 日本一区不卡 | 一区二区三区四区国产 | 99精品视频在线观看免费播放 | 午夜在线影院 | 日韩高清在线 | 久久久久久久久久久久久久国产 | 久草久| 色综合久久天天综合网 | 在线成人免费av | 亚洲黄色av | 国产做a爱免费视频 | www.日韩| 亚洲一区在线播放 | 久久精品国产v日韩v亚洲 | 日韩电影中文字幕在线观看 | 日韩av成人在线 |