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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

成功挑戰 89C52驅動WS2812

  [復制鏈接]
跳轉到指定樓層
樓主
本帖最后由 人人學會單片機 于 2019-10-6 19:11 編輯

https://v.youku.com/v_show/id_XNDM1MDczMDc0OA==.html

WS2812是一個通信速度比較快的芯片,而89單片機是比較慢的單片機。
89單片機使用32M晶振、12T模式,用IO口直接驅動WS2812燈珠。
以下視頻是驅動WS2812的效果
部分源代碼:
#ifndef WS2812B_Drive                //如果沒有找到這個標簽
#define WS2812B_Drive                //那么就打一個這個標簽
sbit WS2812_GPIO=P2^0;
u8 data WS2812_Write_Buffer[25];
void WS2812_Write_Data(u8 *Point,u8 len)
{
        u8 data i,j,k;
        u8 bdata Value;
        for(i=0;i<len;i++)
        {
                for(j=0;j<3;j++)
                {
                        switch(j)
                        {
                                case 0:Value=*(Point+1);break;
                                case 1:Value=*(Point);break;
                                case 2:Value=*(Point+2);break;                        
                        }
                        k=0x80;
                        while(k)
                        {
                                if(Value&k)
                                {
                                        WS2812_GPIO=1;
                                }
                                WS2812_GPIO=1;
                                WS2812_GPIO=0;
                                k>>=1;
                        }
                }
                Point+=3;
        }
}
void WS2812_Display_Ser()
{
        static xdata u8 count=0;
        if(count<100)
        {
                WS2812_GPIO=0;
                count++;
        }
        else
        {
                EA=0;
                WS2812_Write_Data(WS2812_Write_Buffer+1,8);
                EA=1;
                count=0;
        }
}
#endif

51hei截圖20191006190645.jpg (26.49 KB, 下載次數: 200)

51hei截圖20191006190645.jpg

12 WS2812B彩燈.zip

38.57 KB, 下載次數: 428, 下載積分: 黑幣 -5

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

使用道具 舉報

沙發
ID:334047 發表于 2020-8-12 22:53 | 只看該作者
點贊!正要學習這個內容!
回復

使用道具 舉報

板凳
ID:724172 發表于 2020-8-20 15:29 | 只看該作者
太厲害了,一直都在找這個教程來做個模型加燈
回復

使用道具 舉報

地板
ID:230742 發表于 2021-1-7 18:13 | 只看該作者
大師,如果用STC8H1K這種1T的單片機,是不是速度就夠快了?
回復

使用道具 舉報

5#
ID:390416 發表于 2021-1-7 18:33 | 只看該作者
啤酒瓶子老大 發表于 2021-1-7 18:13
大師,如果用STC8H1K這種1T的單片機,是不是速度就夠快了?

是的,分享這個代碼 主要是挑戰一下89系列的性能。小馬拉著火車皮跑。測試的是89能不能拉得動
回復

使用道具 舉報

6#
ID:885138 發表于 2021-2-21 14:09 來自手機 | 只看該作者
啤酒瓶子老大 發表于 2021-1-7 18:13
大師,如果用STC8H1K這種1T的單片機,是不是速度就夠快了?

我用了另一種1T的單片機,4MHZ就可以了。參看http://www.zg4o1577.cn/bbs/dpj-202768-1.html

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

7#
ID:885138 發表于 2021-2-21 14:20 來自手機 | 只看該作者
人人學會單片機 發表于 2021-1-7 18:33
是的,分享這個代碼 主要是挑戰一下89系列的性能。小馬拉著火車皮跑。測試的是89能不能拉得動

試試左移位和CY位直送IO口,應該運行周期會小一點,這樣晶振頻率可能會小一點。我用的函數可以參考一下:
void ws2812_write_byte( u8 dat)
{        
        u8 i = 8;
        dat <<= 1;         //最高位進入CY
        while(i)
        {
                 //高電平時間小于0.45uS為邏輯0,大于時為邏輯1
                WS2812_IO = 1;
                //如果主頻較高可在此處適當增加_nop_();
                WS2812_IO = CY;
                //如果主頻較高可在此處適當增加_nop_();
                _nop_();
        WS2812_IO = 0;
                dat <<= 1;         //最高位進入CY
                i--;                        
        }
}
回復

使用道具 舉報

8#
ID:390416 發表于 2021-2-23 16:56 | 只看該作者
xxd0708 發表于 2021-2-21 14:20
試試左移位和CY位直送IO口,應該運行周期會小一點,這樣晶振頻率可能會小一點。我用的函數可以參考一下:
...

嗯 CY 主要是匯編的指令 初學者容易看蒙圈
回復

使用道具 舉報

9#
ID:615170 發表于 2021-4-12 10:16 | 只看該作者
精彩,剛好遇到了不知道如何調PWM的問題,學習下!
回復

使用道具 舉報

10#
ID:977831 發表于 2022-3-24 18:40 | 只看該作者
在哪里修改燈珠數量
回復

使用道具 舉報

11#
ID:47286 發表于 2022-3-25 00:55 來自手機 | 只看該作者
牛人 膜拜下
回復

使用道具 舉報

12#
ID:390416 發表于 2022-4-19 12:39 | 只看該作者
1111513 發表于 2022-3-24 18:40
在哪里修改燈珠數量

WS2812_Write_Data(WS2812_Write_Buffer+1,8);  括號里面數字8 表示8個燈
回復

使用道具 舉報

13#
ID:212904 發表于 2022-7-19 13:37 | 只看該作者
試試看好用不
回復

使用道具 舉報

14#
ID:27642 發表于 2022-9-12 22:14 | 只看該作者
感謝,剛好有這燈帶
回復

使用道具 舉報

15#
ID:1050867 發表于 2022-11-8 14:44 | 只看該作者
大神,求電路連接圖
回復

使用道具 舉報

16#
ID:1055167 發表于 2022-12-2 10:37 | 只看該作者
12分頻是375ns吧,不是整數啊
回復

使用道具 舉報

17#
ID:390416 發表于 2023-1-8 10:32 | 只看該作者
1111513 發表于 2022-3-24 18:40
在哪里修改燈珠數量

WS2812_Write_Data(WS2812_Write_Buffer+1,8);  這個8 就是8顆燈
回復

使用道具 舉報

18#
ID:390416 發表于 2023-1-8 10:32 | 只看該作者
hgig 發表于 2022-11-8 14:44
大神,求電路連接圖

WS2812燈帶 電路超級簡單
回復

使用道具 舉報

19#
ID:1057863 發表于 2023-1-13 09:43 | 只看該作者
這個我之前弄就沒弄好,感謝UP主
回復

使用道具 舉報

20#
ID:256110 發表于 2023-10-18 10:35 | 只看該作者
WS2812燈帶 控制
回復

使用道具 舉報

21#
ID:317998 發表于 2023-12-16 22:49 | 只看該作者
這個程序最多只能點亮255個燈珠,請問:想點更多燈珠要改哪一項?
回復

使用道具 舉報

22#
ID:1105362 發表于 2023-12-20 14:11 | 只看該作者
牛啊,小馬拉大車
回復

使用道具 舉報

23#
ID:433219 發表于 2023-12-20 15:47 | 只看該作者
只要 注意50us 為時間處理間隙處理,,,
回復

使用道具 舉報

24#
ID:1120202 發表于 2024-6-7 16:33 | 只看該作者
點贊!正要學習這個內容!
回復

使用道具 舉報

25#
ID:85743 發表于 2024-6-11 09:42 | 只看該作者
static xdata u8 count=0;   為什么一定要用XDATA?不用會怎么樣?
回復

使用道具 舉報

26#
ID:390416 發表于 2024-12-4 14:11 | 只看該作者
發表于 2024-6-11 09:42
static xdata u8 count=0;   為什么一定要用XDATA?不用會怎么樣?

如果其他的存儲空間夠用 那就不用xdata空間  
回復

使用道具 舉報

27#
ID:579397 發表于 2024-12-4 18:28 | 只看該作者


  1. /**********接口說明**********/
  2. sbit led_in=P2^0;

  3. /**********全局變量**********/
  4. #define led_max 256
  5. xdata unsigned char Buff[led_max][3];

  6. /******************************
  7.                 發送比特到WS2812
  8. ******************************/
  9. void WS2812_Send(bit DI)
  10.         {
  11.                 if(DI)                //發送1碼
  12.                         {
  13.                                 led_in=1;NOP25();                //580ns~1000ns
  14.                                 led_in=0;NOP12();                //220ns~420ns
  15.                                 }
  16.                         else                //發送0碼
  17.                                 {
  18.                                         led_in=1;NOP12();                //220ns~380ns
  19.                                         led_in=0;NOP25();                //580ns~1000ns
  20.                                         }
  21.         }
  22.         
  23. /******************************
  24.                 發送字節到WS2812
  25. ******************************/
  26. void WS2812_SendByte(unsigned char dat)
  27.         {
  28.                 unsigned char i;
  29.     for (i=0;i<8;i++)
  30.                 {
  31.                         dat<<=1;                //左移一位
  32.                         WS2812_Send(CY);                //發送最高位
  33.                         }
  34.         }
  35.         
  36. /******************************
  37.                 發送RGB顏色到WS2812
  38. ******************************/
  39. void WS2812_SendColor(unsigned char red,unsigned char green,unsigned char blue)
  40.         {
  41.     WS2812_SendByte(green);
  42.     WS2812_SendByte(red);
  43.     WS2812_SendByte(blue);
  44.         }
  45.         
  46. /******************************
  47.                 刷新LED顯示
  48. ******************************/
  49. void WS2812_Display(unsigned char red,unsigned char green,unsigned char blue)
  50.         {
  51.                 unsigned int i;
  52.     for (i=0;i<led_max;i++)
  53.                 {
  54.                         WS2812_SendColor(red,green,blue);
  55.                         }
  56.                 led_in=0;
  57.                 Delay(1);
  58.         }
  59.         
  60. /******************************
  61.                 清空緩存數組
  62. ******************************/
  63. void WS2812_BuffClear()
  64.         {
  65.                 unsigned int i;
  66.                 for(i=0;i<led_max;i++)
  67.                 {
  68.                         Buff[i][0]=0;
  69.                         Buff[i][1]=0;
  70.                         Buff[i][2]=0;        
  71.                 }
  72.         }
  73.         
  74. /******************************
  75.                 指定某點,某顏色寫入緩存
  76. ******************************/
  77. void WS2812_D0T(unsigned char num,unsigned char red,unsigned char green,unsigned char blue)
  78.         {
  79.                 Buff[num][0]=red;
  80.                 Buff[num][1]=green;
  81.                 Buff[num][2]=blue;
  82.         }
復制代碼

1.png (175.13 KB, 下載次數: 0)

1.png
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 麻豆精品一区二区三区在线观看 | 亚洲毛片网站 | 91精品国产色综合久久不卡蜜臀 | 国外激情av| 国产乱码精品一区二区三区忘忧草 | 五月天国产 | 国产高清免费 | 在线视频成人 | 亚洲成人精品国产 | 国产精品一区二区三区四区 | 人操人人 | 欧美成人综合 | 亚洲视频一区在线观看 | 91夜色在线观看 | 亚洲精品一区中文字幕乱码 | 久久久久久久久久影视 | 亚洲欧美一区在线 | 在线视频91 | 日韩欧美一区二区三区免费看 | 色www精品视频在线观看 | 中文天堂在线一区 | 日韩精品一区在线观看 | 欧美极品在线观看 | 瑞克和莫蒂第五季在线观看 | 狠狠做六月爱婷婷综合aⅴ 国产精品视频网 | 久久久久久电影 | 97caoporn国产免费人人 | 久草成人 | 精品国产一区二区三区免费 | 日韩久久久久久 | 国产乡下妇女做爰 | 亚洲日本中文 | 欧美视频中文字幕 | 国产在线观看 | 国产精品 欧美精品 | 精品一区二区三区免费视频 | www国产亚洲精品久久网站 | 日韩午夜| 密乳av| 极品销魂美女一区二区 | 久久精品一区 |