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

標(biāo)題: STC8單片機(jī)ws2812b驅(qū)動(dòng)程序 [打印本頁(yè)]

作者: 我是小五    時(shí)間: 2021-8-6 18:34
標(biāo)題: STC8單片機(jī)ws2812b驅(qū)動(dòng)程序
看見X寶 賣的ws2812燈帶覺(jué)得挺好玩,閑來(lái)無(wú)事買了一條1米60燈的。自己寫了個(gè)驅(qū)動(dòng) :功能 1 燈全亮(可調(diào)7色),2流水燈(可調(diào)7色),3 燈全亮閃爍(可調(diào)7色)
制作出來(lái)的實(shí)物圖如下:


單片機(jī)源程序如下:
  1. #include <ws2812b.h>

  2. bit BUS_1MS ;
  3. u8 RR=0XFE;
  4. u8 GG=0XFE;
  5. u8 BB=0XFE;
  6. u8 mode;
  7. u8 Loop_Speed=120; //流水燈延時(shí)變量
  8. unsigned char bdata LED_DAT; //可位操作的數(shù)據(jù)發(fā)送緩存變量
  9. sbit bit0=LED_DAT^0; //被發(fā)送數(shù)據(jù)的各位定義
  10. sbit bit1=LED_DAT^1;
  11. sbit bit2=LED_DAT^2;
  12. sbit bit3=LED_DAT^3;
  13. sbit bit4=LED_DAT^4;
  14. sbit bit5=LED_DAT^5;
  15. sbit bit6=LED_DAT^6;
  16. sbit bit7=LED_DAT^7;

  17.        

  18. /******************IO口初始化*************************/
  19. /* 功能 : 設(shè)置P1 P2 P3 口為雙向IO口*/

  20. void IO_init(void)
  21. {
  22.     P1M1 = 0;   P1M0 = 0;   //設(shè)置為準(zhǔn)雙向口
  23.     P3M1 = 0;   P3M0 = 0;   //設(shè)置為準(zhǔn)雙向口
  24.     P5M1 = 0;   P5M0 = 0;   //設(shè)置為準(zhǔn)雙向口
  25. }
  26. /*****************************************************/
  27. void Timer0Init(void)                //1毫秒@24.000MHz
  28. {
  29.         AUXR |= 0x80;                //定時(shí)器時(shí)鐘1T模式
  30.         TMOD &= 0xF0;                //設(shè)置定時(shí)器模式
  31.         TL0 = 0x40;                //設(shè)置定時(shí)初始值
  32.         TH0 = 0xA2;                //設(shè)置定時(shí)初始值
  33.         TF0 = 0;                //清除TF0標(biāo)志
  34.         TR0 = 1;                //定時(shí)器0開始計(jì)時(shí)
  35.         ET0 = 1;    //打開定時(shí)器0
  36.         EA =1 ;     //打開總中斷
  37. }

  38. void timer0() interrupt 1 //1毫秒@24.000MHz
  39. {
  40.         BUS_1MS = 1;
  41. }
  42. //*******************發(fā)送數(shù)據(jù)**********************//
  43. //數(shù)據(jù)格式G7-G0;R7-R0;B7-B0;//

  44. void SendData(u8 dat)
  45. {
  46.         LED_DAT = dat;
  47.         if(bit7==1){CODE_1} else{CODE_0}
  48.         if(bit6==1){CODE_1} else{CODE_0}
  49.         if(bit5==1){CODE_1} else{CODE_0}
  50.         if(bit4==1){CODE_1} else{CODE_0}
  51.         if(bit3==1){CODE_1} else{CODE_0}
  52.         if(bit3==1){CODE_1} else{CODE_0}
  53.         if(bit1==1){CODE_1} else{CODE_0}
  54.         if(bit0==1){CODE_1} else{CODE_0}

  55. }


  56. /******************流水燈函數(shù)******************************/
  57. /* 功能 : 流水燈函數(shù) */       

  58. void loop_LED()
  59. {
  60. unsigned char i,j,k;
  61.         if(++k>=Loop_Speed)
  62.         {
  63.                 k=0;
  64.                 if(++j<=60)
  65.                 {               
  66.                         for(i=j;i>0;i--)  //關(guān)閉所有燈
  67.                         {
  68.                                 SendData(0x00);
  69.                                 SendData(0x00);
  70.                                 SendData(0x00);
  71.                         }
  72.                                 SendData(RR);
  73.                                 SendData(GG);
  74.                                 SendData(BB);       
  75.                 }       
  76.                 if(j==60) j=0;
  77.         }
  78. }

  79. /******************七彩全亮閃爍模式函數(shù)******************************/
  80. /* 功能 :全部LED 間隔50毫秒閃爍 */       

  81. void twinkle_LED()
  82. {
  83. unsigned char j,k;
  84.         k++;
  85.         if(k>100) k=0;
  86.         if(k==0)//Loop_Speed)
  87.         {
  88.                 for(j=0;j<60;j++)
  89.                 {               
  90.                         SendData(RR);
  91.                         SendData(GG);
  92.                         SendData(BB);       
  93.                 }               
  94.         }
  95.         if(k==50)//Loop_Speed)
  96.         {
  97.                 for(j=0;j<60;j++)
  98.                 {               
  99.                         SendData(0x00);
  100.                         SendData(0x00);
  101.                         SendData(0x00);       
  102.                 }               
  103.         }       
  104. }
  105. /******************七彩全亮模式函數(shù)******************************/
  106. /* 功能 : 點(diǎn)亮60顆LED */       

  107. void ON_LED()
  108. {
  109. unsigned char j,k;
  110. if(++k>=100)
  111. {
  112.          k=0;
  113.                 for(j=0;j<60;j++)
  114.                 {               
  115.                         SendData(RR);
  116.                         SendData(GG);
  117.                         SendData(BB);       
  118.                 }               
  119.         }
  120. }
  121. /******************七彩全滅模式函數(shù)******************************/
  122. /* 功能 :關(guān)閉全部LED  */       

  123. void OFF_LED()
  124. {
  125. unsigned char j,k;
  126. if(++k>=250)
  127. {
  128.          k=0;
  129.                 for(j=0;j<250;j++)
  130.                 {               
  131.                         SendData(0x00);
  132.                         SendData(0x00);
  133.                         SendData(0x00);       
  134.                 }               
  135.         }
  136. }
  137. /******************按鍵掃描******************************/
  138. /* 功能 : 設(shè)置S6按鍵長(zhǎng)短按識(shí)別小于20MS短按 長(zhǎng)于3S長(zhǎng)按 */       
  139. void keyScan()
  140.         {
  141.                 static unsigned char i;
  142.     static unsigned int key_press_time = 0;  // ……請(qǐng)記得標(biāo)為靜態(tài)變量
  143.                 static unsigned int key_press_time2 = 0;  // ……請(qǐng)記得標(biāo)為靜態(tài)變量
  144.     if(s6==0)
  145.                         {
  146.         if(++key_press_time <=0 ) --key_press_time;//計(jì)量按鍵時(shí)間,并避免數(shù)據(jù)溢出
  147.         if(key_press_time==3000)
  148.                                 {
  149.             //在此寫下按鍵長(zhǎng)按3s時(shí)要做的事情
  150.                                         LED2_REV();
  151.                                 Loop_Speed=        Loop_Speed-15;                       
  152.                                 }
  153.                         }
  154.                         else
  155.                         {
  156.         if(10<=key_press_time && key_press_time < 3000)
  157.                                 {
  158.             //大于20ms小于3s,視為短按,在此寫下寫短按的處理代碼
  159.                                         LED1_REV();
  160.                                         i++;
  161.                                         switch(i)  //s6按鍵LED7色控制
  162.                                         {
  163.                                                 case 0 : {RR=0X00;GG=0X00;BB=0XFE; break;}
  164.                                                 case 1 : {RR=0X00;GG=0XFE;BB=0X00; break;}
  165.                                                 case 2 : {RR=0XFE;GG=0X00;BB=0X00; break;}
  166.                                                 case 3 : {RR=0XFE;GG=0XFE;BB=0X00; break;}
  167.                                                 case 4 : {RR=0X00;GG=0XFE;BB=0XFE; break;}
  168.                                                 case 5 : {RR=0XFE;GG=0X00;BB=0XFE; break;}
  169.                                                 case 6 : {RR=0XFE;GG=0XFE;BB=0XFE; break;}
  170.                                                 case 7 : {i=0;                                                                                 break;}
  171.                                         }
  172.         }
  173.         key_press_time=0;
  174.                         }
  175.                        
  176.                         if(s2==0)
  177.                         {
  178.         if(++key_press_time2 <=0 ) --key_press_time2;//計(jì)量按鍵時(shí)間,并避免數(shù)據(jù)溢出
  179.         if(key_press_time2==3000)
  180.                                 {
  181.             //在此寫下按鍵長(zhǎng)按3s時(shí)要做的事情
  182.                                         LED2_REV();
  183.                                                
  184.                                 }
  185. ……………………

  186. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有代碼51hei附件下載:
ws2812b驅(qū)動(dòng).7z (24.66 KB, 下載次數(shù): 397)


作者: cdiyy    時(shí)間: 2021-8-16 09:35
有原理圖嗎大師
作者: POWER-LED    時(shí)間: 2021-11-1 13:24
用STC哪個(gè)型號(hào)的單片機(jī)?
作者: huping137    時(shí)間: 2021-11-4 09:27
這個(gè)程序里是不是少了發(fā)送0和1的時(shí)序了
作者: gaochen15159    時(shí)間: 2021-11-10 08:48
有沒(méi)有原理圖可以借鑒一下,我也想自己做一個(gè)玩一下

作者: 快樂(lè)眼淚    時(shí)間: 2021-11-19 21:01
幾百個(gè)燈珠可以控制嗎?
作者: lhxr    時(shí)間: 2021-12-1 21:42
huping137 發(fā)表于 2021-11-4 09:27
這個(gè)程序里是不是少了發(fā)送0和1的時(shí)序了

時(shí)序在WS2812B.H里面
作者: lhxr    時(shí)間: 2021-12-1 22:08
謝謝樓主分享,難得的好資料,感謝,經(jīng)過(guò)編譯,正常點(diǎn)亮
作者: wufa1986    時(shí)間: 2021-12-2 13:41
gaochen15159 發(fā)表于 2021-11-10 08:48
有沒(méi)有原理圖可以借鑒一下,我也想自己做一個(gè)玩一下

這東西是串行控制,燈是成品,控制隨便啦個(gè)IO就行了
作者: a399288395    時(shí)間: 2022-1-8 16:13
別的我沒(méi)試  ,我主要是看到按鍵掃描沒(méi)有去抖 沒(méi)有延時(shí),就對(duì)這個(gè)按鍵掃描函數(shù)比較感興趣,我就試了按鍵掃描這個(gè)函數(shù),發(fā)現(xiàn)是有問(wèn)題的,根本就不工作!

/******************按鍵掃描******************************/
/* 功能 : 設(shè)置S6按鍵長(zhǎng)短按識(shí)別小于20MS短按 長(zhǎng)于3S長(zhǎng)按 */       
void keyScan()
        {
                static unsigned char i;
    static unsigned int key_press_time = 0;  // ……請(qǐng)記得標(biāo)為靜態(tài)變量
                static unsigned int key_press_time2 = 0;  // ……請(qǐng)記得標(biāo)為靜態(tài)變量
    if(s6==0)
                        {
        if(++key_press_time <=0 ) --key_press_time;//計(jì)量按鍵時(shí)間,并避免數(shù)據(jù)溢出
        if(key_press_time==3000)
                                {
            //在此寫下按鍵長(zhǎng)按3s時(shí)要做的事情
                                        LED2_REV();
                                Loop_Speed=        Loop_Speed-15;                       
                                }
                        }
                        else
                        {
        if(10<=key_press_time && key_press_time < 3000)
                                {
            //大于20ms小于3s,視為短按,在此寫下寫短按的處理代碼
                                        LED1_REV();
                                        i++;
                                        switch(i)  //s6按鍵LED7色控制
                                        {
                                                case 0 : {RR=0X00;GG=0X00;BB=0XFE; break;}
                                                case 1 : {RR=0X00;GG=0XFE;BB=0X00; break;}
                                                case 2 : {RR=0XFE;GG=0X00;BB=0X00; break;}
                                                case 3 : {RR=0XFE;GG=0XFE;BB=0X00; break;}
                                                case 4 : {RR=0X00;GG=0XFE;BB=0XFE; break;}
                                                case 5 : {RR=0XFE;GG=0X00;BB=0XFE; break;}
                                                case 6 : {RR=0XFE;GG=0XFE;BB=0XFE; break;}
                                                case 7 : {i=0;                                                                                 break;}
                                        }
        }
        key_press_time=0;
                        }




下面這段話大家來(lái)討論看看 這完全行不通啊,24M的單片機(jī)跑起來(lái)
++key_press_time; key_press_time==3000,需要3秒鐘?即使是6M的時(shí)鐘跑起來(lái) 加到3000也不要3秒鐘吧!




        if(++key_press_time <=0 ) --key_press_time;//計(jì)量按鍵時(shí)間,并避免數(shù)據(jù)溢出
        if(key_press_time==3000)
                                {
            //在此寫下按鍵長(zhǎng)按3s時(shí)要做的事情
作者: 大風(fēng)吹過(guò)啊    時(shí)間: 2022-1-10 15:20
a399288395 發(fā)表于 2022-1-8 16:13
別的我沒(méi)試  ,我主要是看到按鍵掃描沒(méi)有去抖 沒(méi)有延時(shí),就對(duì)這個(gè)按鍵掃描函數(shù)比較感興趣,我就試了按鍵掃 ...

下載完整程序好好看看再說(shuō)話。。。。。。就看了一段直接判斷程序不能用也是絕了。。。。。。。
作者: forest-float    時(shí)間: 2022-3-23 13:48
我看了下代碼,發(fā)現(xiàn)好多變量都沒(méi)初始化就開始累加計(jì)算了,真的無(wú)語(yǔ),確定不會(huì)出錯(cuò)嗎
作者: yanyun    時(shí)間: 2022-9-15 08:28
一上電變?nèi)书W爍,mode初始化為0應(yīng)該是關(guān)閉的狀態(tài),燈不亮,通過(guò)按下按鍵才亮的吧
作者: THFW    時(shí)間: 2022-12-15 11:43
謝謝樓主分享,難得的好資料。
作者: THFW    時(shí)間: 2022-12-15 11:45
有原理圖么
作者: hai2369513    時(shí)間: 2024-3-11 17:10
非常感謝,終于找到想要的了。
作者: hai2369513    時(shí)間: 2024-3-11 18:32
師傅,測(cè)試的時(shí)候沒(méi)有單色藍(lán)光,檢查下哪里出了問(wèn)題?
作者: 新鄉(xiāng)家電維修    時(shí)間: 2024-3-11 18:42
THFW 發(fā)表于 2022-12-15 11:45
有原理圖么

服了,就一個(gè)IO端口,要啥原理圖,要啥自行車?
作者: wuyibin2003    時(shí)間: 2024-3-14 14:17
這個(gè)挺好的,我正想編輯這個(gè)程序驅(qū)動(dòng)自己的彩燈,感謝樓主提供,我可以參考一下
作者: zys0797    時(shí)間: 2024-5-3 16:11
大家都說(shuō)有問(wèn)題?那我只好下載下來(lái)研究和驗(yàn)證一下了。
作者: 烈火    時(shí)間: 2025-3-4 21:05
參考了一下,單色沒(méi)有實(shí)現(xiàn)。是什么原因?
作者: lkc8210    時(shí)間: 2025-3-5 09:20
烈火 發(fā)表于 2025-3-4 21:05
參考了一下,單色沒(méi)有實(shí)現(xiàn)。是什么原因?

30塊包郵的邏輯分析儀,你值得擁有




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久成人一区 | 国产色婷婷久久99精品91 | 在线国产中文字幕 | 日韩精品一区二区三区中文字幕 | 人人叉 | 成人在线播放网站 | 国产成人在线一区二区 | 亚洲精品国产第一综合99久久 | 中文在线a在线 | 久草视| 久热久 | 一区二区三区四区av | 欧美综合在线视频 | 中文字幕精品一区 | 9久久婷婷国产综合精品性色 | 色伊人网 | 国产美女一区二区三区 | 亚洲三区在线观看 | 99re在线视频 | 久久久婷 | 99视频精品 | v亚洲 | 狠狠婷婷综合久久久久久妖精 | 国产伦一区二区三区久久 | 久久久久91 | 精品一区免费 | 毛片免费看 | 国产95在线| 视频一二三区 | 久久丁香| 特黄特色大片免费视频观看 | 日韩一级精品视频在线观看 | 蜜臀av日日欢夜夜爽一区 | 久久伊人在 | 国产福利一区二区 | 精品欧美一区二区三区久久久 | 在线观看中文字幕dvd播放 | 日本小视频网站 | 日本久久网 | 日本二区在线观看 | 国产粉嫩尤物极品99综合精品 |