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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2618|回復: 4
打印 上一主題 下一主題
收起左側

20燈WS2812控制板單片機代碼 添加炫彩流動效果 原理圖PCB

  [復制鏈接]
跳轉到指定樓層
樓主
stc單片機控制WS2812燈

立創EDA標準版直接導入,無需解壓。

GERBER文件可以直接打樣。

燈珠擺放角度:燈珠綠色端為GND端,當PCB正放時,GND端在下邊,VCC在上邊

電路原理圖如下:



單片機源程序如下:
  1. /*
  2. 代碼內容:STC8單片機-WS2812控制板V1代碼
  3. 增加一個燈效,炫彩流動。

  4. 代碼效果:使用WS2812控制板,直接驅動WS2812模塊。
  5. 1,控制板有兩個按鍵,
  6. 按鍵單擊,可以選擇上/下一個效果
  7. 按鍵雙擊,可以選擇上/下兩個效果
  8. 按鍵三擊,單片機直接復位(任意按鍵)
  9. 2,EEPROM保存效果序號
  10. 按鍵更改效果后,會把效果序號保存至EEPROM,
  11. 下次上電時,直接運行上次保存的效果。

  12. ***************特別注意****************
  13. 1,下載程序時,選擇24M主頻,同時復位引腳作為IO口(默認的設置就是)
  14. */


  15. #include "all.h"
  16. void GPIO_Init()//GPIO設置為準雙向
  17. {
  18.         P0M0 = 0x00;
  19.         P0M1 = 0x00;
  20.         
  21.         P1M0 = 0x00;
  22.         P1M1 = 0x00;
  23.         
  24.         P2M0 = 0x00;        
  25.         P2M1 = 0x00;
  26.         
  27.         P3M0 = 0x00;
  28.         P3M1 = 0x00;
  29.         
  30.         P4M0 = 0x00;
  31.         P4M1 = 0x00;
  32.         
  33.         P5M0 = 0x00;
  34.         P5M1 = 0x00;
  35. }
  36. //定時器0中斷,掃描按鍵
  37. void Timer0_Rountine(void)  interrupt 1
  38. {
  39.         KEY1_Scan();
  40.         KEY2_Scan();
  41. }
  42. void main()
  43. {
  44.         GPIO_Init();
  45.         Timer0_Init();
  46.         EEPROM_Init();
  47.         WS2812_RST();
  48.         color_code_init();
  49.         EA=1;
  50.         while(1)
  51.         {
  52.                 WS2812_main();
  53.         }
  54. }
復制代碼
  1. #include "all.h"
  2. u8 xdata RGB_One[3];//存儲一個燈的顏色
  3. u8 xdata color_code[COLOR_BUFFER_LEN][3];
  4. void color_code_init()
  5. {
  6.         u8 i;
  7.         u8 cnt=0;//記錄當前寫入位置
  8.         u8 k;
  9.         for(i=0;i<COLOR_BUFFER_LEN;i++)//第一步,全部寫0
  10.         {
  11.                 color_code[i][0]=0;
  12.                 color_code[i][1]=0;
  13.                 color_code[i][2]=0;
  14.         }
  15.         //第二步,寫RG,0-10,11個數據
  16.         for(i=0;i<=COLOR_LEN;i++)
  17.         {
  18.                 k=i*COLOR_ADD;
  19.                 color_code[cnt][0]=k;//G
  20.                 color_code[cnt][1]=COLOR_MAX-k;//R
  21.                 color_code[cnt][2]=0;//B
  22.                 cnt++;
  23.         }
  24.         //第二步,寫GB,1-10,10個數據
  25.         for(i=1;i<=COLOR_LEN;i++)
  26.         {
  27.                 k=i*COLOR_ADD;
  28.                 color_code[cnt][0]=COLOR_MAX-k;//G
  29.                 color_code[cnt][1]=0;//R
  30.                 color_code[cnt][2]=k;//B
  31.                 cnt++;
  32.         }
  33.         //第三步,寫BR,1-9,9個數據
  34.         for(i=1;i<COLOR_LEN;i++)
  35.         {
  36.                 k=i*COLOR_ADD;
  37.                 color_code[cnt][0]=0;//G
  38.                 color_code[cnt][1]=k;//R
  39.                 color_code[cnt][2]=COLOR_MAX-k;//B
  40.                 cnt++;
  41.         }
  42. }
  43. void Delay1ms()                //@24.000MHz
  44. {
  45.         unsigned char i, j;

  46.         _nop_();
  47.         i = 32;
  48.         j = 40;
  49.         do
  50.         {
  51.                 while (--j);
  52.         } while (--i);
  53. }
  54. void Delay_xms(u16 i)
  55. {
  56.         while(i--)
  57.         {
  58.                 Delay1ms();        
  59.         }
  60. }
  61. void WS2812_Write_RGB()
  62. {
  63.         u8 i,j,a;
  64.         EA=0;
  65.         for(j=0;j<3;j++)//每個燈需要傳輸次數
  66.         {
  67.                 a=RGB_One[j];
  68.                 for(i=0;i<8;i++)
  69.                 {
  70.                         WS2812_PIN=1;
  71.                         _nop_();_nop_();_nop_();_nop_();
  72.                         WS2812_PIN=(a&0x80);        
  73.                         _nop_();_nop_();_nop_();_nop_();
  74.                         _nop_();_nop_();_nop_();_nop_();
  75.                         a<<=1;
  76.                         WS2812_PIN=0;
  77.                 }
  78.                 WS2812_PIN=0;
  79.         }
  80.         EA=1;
  81. }
  82. void WS2812_RST()
  83. {
  84.         WS2812_PIN=0;
  85.         Delay1ms();
  86. }
  87. void WS2812_DIS_1()//效果1,顏色切換,所有LED顏色一樣,共7種基本色
  88. {
  89.         static u8 j=1;
  90.         u16 i=0;
  91.         if(j&0X01) RGB_One[1]=10;else RGB_One[1]=0;
  92.         if(j&0X02) RGB_One[0]=10;else RGB_One[0]=0;
  93.         if(j&0X04) RGB_One[2]=10;else RGB_One[2]=0;
  94.         j%=7;
  95.         j++;
  96.         for(i=0;i<WS2812_NUM;i++)
  97.         WS2812_Write_RGB();
  98.         WS2812_RST();
  99.         Delay_xms(1000);
  100. }
  101. void WS2812_DIS_2()//效果2,單色追個點亮
  102. {
  103.         static u16 j=0;
  104.         u16 i;

  105.         j%=WS2812_NUM;
  106.         j++;

  107.         for(i=0;i<WS2812_NUM;i++)
  108.         {
  109.                 if(i<j)
  110.                 {
  111.                         RGB_One[1]=10;RGB_One[0]=0;RGB_One[2]=0;
  112.                         WS2812_Write_RGB();
  113.                 }
  114.                 else
  115.                 {
  116.                         RGB_One[1]=0;RGB_One[0]=0;RGB_One[2]=0;
  117.                         WS2812_Write_RGB();
  118.                 }
  119.         }
  120.         WS2812_RST();
  121.         Delay_xms(50);
  122. }
  123. void WS2812_DIS_3()//效果3,多個點亮流動
  124. {
  125.         static u16 j=0;
  126.         u16 i;

  127.         j%=WS2812_NUM;
  128.         j++;

  129.         for(i=0;i<WS2812_NUM;i++)
  130.         {
  131.                 if(i>j&&(i<j+10))
  132.                 {
  133.                         RGB_One[1]=00;RGB_One[0]=10;RGB_One[2]=0;
  134.                         WS2812_Write_RGB();
  135.                 }
  136.                 else
  137.                 {
  138.                         RGB_One[1]=0;RGB_One[0]=0;RGB_One[2]=0;
  139.                         WS2812_Write_RGB();
  140.                 }
  141.         }
  142.         
  143.         WS2812_RST();
  144.         Delay_xms(50);
  145. }
  146. void WS2812_DIS_4()//效果4,單色呼吸燈
  147. {
  148.         static u8 j=1;
  149.         u16 i=0;
  150.         
  151.         j%=100;
  152.         
  153.         if(j<50)//0-49
  154.         {
  155.                 RGB_One[1]=0;RGB_One[0]=0;RGB_One[2]=j;        
  156.         }
  157.         else//50-1
  158.         {
  159.                 RGB_One[1]=0;RGB_One[0]=0;RGB_One[2]=100-j;        
  160.         }
  161.         j++;
  162.         
  163.         for(i=0;i<WS2812_NUM;i++)
  164.         WS2812_Write_RGB();
  165.         
  166.         WS2812_RST();
  167.         Delay_xms(100);
  168. }
  169. void WS2812_DIS_5()//效果5,兩邊向中間流
  170. {
  171.         static u16 j=0;
  172.         u16 i;

  173.         j%=WS2812_NUM/2;
  174.         j++;

  175.         for(i=0;i<WS2812_NUM;i++)
  176.         {
  177.                 if(i<j)
  178.                 {
  179.                         RGB_One[1]=10;RGB_One[0]=0;RGB_One[2]=0;
  180.                         WS2812_Write_RGB();
  181.                 }
  182.                 else if(i>WS2812_NUM-j)
  183.                 {
  184.                         RGB_One[1]=0;RGB_One[0]=0;RGB_One[2]=10;
  185.                         WS2812_Write_RGB();
  186.                 }
  187.                 else
  188.                 {
  189.                         RGB_One[1]=0;RGB_One[0]=0;RGB_One[2]=0;
  190.                         WS2812_Write_RGB();
  191.                 }
  192.         }
  193.         
  194.         WS2812_RST();
  195.         Delay_xms(100);
  196. }
  197. void WS2812_DIS_6()//效果6,彩色流動
  198. {
  199.         u8 i=0;u8 j;
  200.         static u8 cnt=30;
  201.         
  202.         for(i=0;i<WS2812_NUM;i++)//燈數
  203.         {
  204.                 j=(cnt+i)%COLOR_BUFFER_LEN;
  205.                 RGB_One[0]=color_code[j][0];
  206.                 RGB_One[1]=color_code[j][1];
  207.                 RGB_One[2]=color_code[j][2];
  208.                 WS2812_Write_RGB();        
  209.         }
  210.         cnt++;cnt%=COLOR_BUFFER_LEN;
  211.         WS2812_RST();
  212.         Delay_xms(30);
  213.         
  214. }
  215. void WS2812_main()
  216. {
  217.         switch(WS2812_menu)
  218.         {
  219.                 case 0:WS2812_DIS_1();break;//顏色全一樣,7種顏色變換
  220.                 case 1:WS2812_DIS_2();break;//單一顏色,逐個點亮
  221.                 case 2:WS2812_DIS_3();break;//10個LED點亮,流動
  222.                 case 3:WS2812_DIS_4();break;//單色呼吸燈
  223.                 case 4:WS2812_DIS_5();break;//兩邊向中間流
  224.                 case 5:WS2812_DIS_6();break;//炫彩流動
  225.         }
  226. }
復制代碼

代碼和原理圖 立創格式的PCB 資料下載: WS2812X20燈條.7z (508.92 KB, 下載次數: 126)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏11 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:297903 發表于 2023-10-25 15:16 | 只看該作者
感謝分享,程序測試可用,謝謝!!
回復

使用道具 舉報

板凳
ID:1093862 發表于 2024-1-19 15:39 | 只看該作者
大佬,程序經測可用,就是亮度太暗了,怎么調亮呢
回復

使用道具 舉報

地板
ID:1093862 發表于 2024-1-19 20:09 | 只看該作者
程序可用就是亮度太暗了,怎么才能調亮點呢
回復

使用道具 舉報

5#
ID:97300 發表于 2024-1-19 23:30 | 只看該作者
感謝分享,有空時試試
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品成人一区二区三区 | 精品福利一区 | 成人a视频 | 国产亚洲精品精品国产亚洲综合 | 久草资源在线 | 亚洲精品一 | 一区二区三区四区在线 | 一级免费毛片 | xx性欧美肥妇精品久久久久久 | 成人片免费看 | 天天色综网 | 在线视频国产一区 | av色噜噜 | 国精品一区| 国产精品久久久久影院色老大 | 久久99精品国产自在现线小黄鸭 | 日韩成人精品一区 | 精品视频一区二区三区 | 久久久久国产 | 久久99精品久久久久久 | 精品三级在线观看 | 免费看黄色小视频 | 欧美mv日韩mv国产网站91进入 | 亚洲网站免费看 | 国产一区在线看 | 国产精品揄拍一区二区 | 国产视频久久 | 国产成人精品一区二 | 一级黄色生活视频 | 色综合桃花网 | 黄色日批视频 | av国产精品毛片一区二区小说 | 日韩欧美在线一区 | 国产精品区一区二 | 欧美二区三区 | 浴室洗澡偷拍一区二区 | 国产精品亚洲成在人线 | 91欧美激情一区二区三区成人 | 成人在线视频网址 | 日韩精品一区二区三区免费视频 | 国产精品视频网站 |