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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5970|回復: 16
收起左側

想用單片機延時方式做一個WS2811流水燈,如何修改程序

  [復制鏈接]
ID:805132 發表于 2020-7-18 15:33 | 顯示全部樓層 |閱讀模式
如題,用80c51通過延時的方式驅動WS2811燈帶,想做成流水燈的效果,燈帶的基礎程序如下
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #define nop _nop_()
  4. #define unchar unsigned char
  5. #define unint unsigned int
  6. #define size 20
  7. sbit Din = P2^2;
  8. unchar bdata LED_DAT;
  9. sbit bit0=LED_DAT^0;
  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. unchar RR,GG,BB;
  18. unint t;
  19. unint Mod;
  20. void delay(unint z)
  21. {
  22.         unchar a,b;
  23.         while(z--)
  24.         for(b = 0;b<=118;b++)
  25.         for(a = 0;a<=18;a++)
  26.         ;
  27. }
  28. void h_dat0()
  29. {
  30.         Din = 1;nop;               
  31.         Din = 0;nop;nop; nop;                                                                  
  32. }


  33. void h_dat1()
  34. {
  35.         Din = 1;nop;nop;nop;                                                                                                      
  36.         Din = 0;nop;                  
  37. }


  38. void Reset(void)
  39. {
  40.   Din = 0;
  41.   delay(1);      
  42. }


  43. void SendData()
  44. {
  45.   LED_DAT = GG;
  46.         if(bit0 == 1) {h_dat1();} else {h_dat0();}   
  47.         if(bit1 == 1) {h_dat1();} else {h_dat0();}   
  48.         if(bit2 == 1) {h_dat1();} else {h_dat0();}   
  49.         if(bit3 == 1) {h_dat1();} else {h_dat0();}   
  50.         if(bit4 == 1) {h_dat1();} else {h_dat0();}   
  51.         if(bit5 == 1) {h_dat1();} else {h_dat0();}   
  52.         if(bit6 == 1) {h_dat1();} else {h_dat0();}   
  53.         if(bit7 == 1) {h_dat1();} else {h_dat0();}  
  54.   LED_DAT = RR;
  55.         if(bit0 == 1) {h_dat1();} else {h_dat0();}   
  56.         if(bit1 == 1) {h_dat1();} else {h_dat0();}   
  57.         if(bit2 == 1) {h_dat1();} else {h_dat0();}   
  58.         if(bit3 == 1) {h_dat1();} else {h_dat0();}   
  59.         if(bit4 == 1) {h_dat1();} else {h_dat0();}   
  60.         if(bit5 == 1) {h_dat1();} else {h_dat0();}   
  61.         if(bit6 == 1) {h_dat1();} else {h_dat0();}   
  62.         if(bit7 == 1) {h_dat1();} else {h_dat0();}  
  63.   LED_DAT = BB;
  64.         if(bit0 == 1) {h_dat1();} else {h_dat0();}   
  65.         if(bit1 == 1) {h_dat1();} else {h_dat0();}   
  66.         if(bit2 == 1) {h_dat1();} else {h_dat0();}   
  67.         if(bit3 == 1) {h_dat1();} else {h_dat0();}   
  68.         if(bit4 == 1) {h_dat1();} else {h_dat0();}   
  69.         if(bit5 == 1) {h_dat1();} else {h_dat0();}   
  70.         if(bit6 == 1) {h_dat1();} else {h_dat0();}   
  71.         if(bit7 == 1) {h_dat1();} else {h_dat0();}  
  72.   
  73. }




  74. void send_string_data()
  75. {
  76.         unchar i;
  77.         for (i= 0;i<size;i++)
  78.         {
  79.            SendData();
  80.            
  81.            }
  82.               Reset();     
  83. }



  84. void main()
  85. {   


  86.         while(1)                       
  87. }
復制代碼


回復

使用道具 舉報

ID:748788 發表于 2020-7-19 14:29 | 顯示全部樓層
這個是修改過的程序吧,主循環都是空的。發原程序上來看看,才好幫你改。
回復

使用道具 舉報

ID:642281 發表于 2020-7-19 14:55 | 顯示全部樓層
while(1)里邊的程序都沒有調用,不會執行你編寫的子函數
回復

使用道具 舉報

ID:687694 發表于 2020-7-19 17:45 | 顯示全部樓層
80C51貌似驅動不了吧,周期太長。
回復

使用道具 舉報

ID:475444 發表于 2020-7-19 17:59 | 顯示全部樓層
80C51不行,周期長,用宏晶,20M晶振可以玩一下
回復

使用道具 舉報

ID:67199 發表于 2020-7-19 21:04 | 顯示全部樓層
用STC15F104W玩過,  內部時間頻率:33.1176Mh,定時中斷方式。
回復

使用道具 舉報

ID:805132 發表于 2020-7-20 09:20 | 顯示全部樓層
lyxing 發表于 2020-7-19 21:04
用STC15F104W玩過,  內部時間頻率:33.1176Mh,定時中斷方式。

大佬能給個代碼看看嗎,我這種寫法不知道怎么才能讓燈珠自己動并且變色,只能做成一起變色一起滅燈
回復

使用道具 舉報

ID:748788 發表于 2020-7-21 08:26 | 顯示全部樓層
你的問題應該找賣家,賣家都會炫耀自家的燈帶能這樣那樣的花式亮燈,你的卻不行,第一時間就是找賣家
回復

使用道具 舉報

ID:889424 發表于 2021-3-25 15:02 | 顯示全部樓層
很好,很實用的資料,學習了
回復

使用道具 舉報

ID:267932 發表于 2021-3-27 17:13 | 顯示全部樓層
建議SPI  加DMA控制。
回復

使用道具 舉報

ID:47286 發表于 2021-3-27 23:22 | 顯示全部樓層
80C51不行 也不是必須33M或者20M頻率 11.0592肯定行 實測的 但至少得1T的單片機 不然就如樓上各位說的 通訊時間搞不定 我當時用的204s片子 11.0592的頻率 推了70多個燈
回復

使用道具 舉報

ID:89515 發表于 2021-3-28 06:33 來自觸屏版 | 顯示全部樓層
8m晶振,振蕩頻率125ns就可以了,這個協議的容錯率很高的,好像是+-130吧
回復

使用道具 舉報

ID:207421 發表于 2021-3-28 13:22 | 顯示全部樓層
至少用STC的1T單片機才能勝任。
12T的單片機也只能死撐,沒必要這么干。
回復

使用道具 舉報

ID:766282 發表于 2021-7-6 09:06 | 顯示全部樓層
錯誤,編譯不了
回復

使用道具 舉報

ID:161164 發表于 2021-7-7 09:21 | 顯示全部樓層
512-DZ 發表于 2021-7-6 09:06
錯誤,編譯不了

while(1)少了一個分號";"而已

SendData可以改成這樣:
  1. void SendData()
  2. {
  3.         char i,j;
  4.         char LED_DATA[3];
  5.   LED_DATA[0] = GG;
  6.   LED_DATA[1] = RR;
  7.   LED_DATA[2] = BB;
  8.        
  9.         for(i = 0;i<3;i++){
  10.                 for(j = 0;j<8;j++){
  11.                         if(LED_DATA[i] & 0x01){h_dat1();} else {h_dat0();}
  12.                         LED_DATA[i]>>=1;
  13.                 }
  14.         }  
  15. }
復制代碼
回復

使用道具 舉報

ID:418515 發表于 2022-5-29 23:17 | 顯示全部樓層
挺好,正好有兩款跑飛了的程序
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产视频精品视频 | 波多野结衣中文字幕一区二区三区 | 麻豆精品国产91久久久久久 | 成人精品一区 | www.久久久久久久久 | 一二三四av | 欧美电影在线观看网站 | 欧洲一级毛片 | 日本精品一区二区三区视频 | 三级黄色大片网站 | 欧美成年网站 | 91porn在线| 中文字幕免费视频 | 久热爱| 国产欧美精品在线 | 中文字幕国产 | 天堂在线一区 | 无吗视频| 黄色国产在线播放 | 99精品欧美一区二区蜜桃免费 | 久久中文视频 | 成人国产精品久久久 | 麻豆一区一区三区四区 | 国产成人精品久久二区二区91 | 精品乱码一区二区 | 成人在线小视频 | 黑人精品欧美一区二区蜜桃 | 日本精品一区二区三区在线观看视频 | 黄色网址在线播放 | 亚洲国产精品美女 | av网站免费观看 | 精品欧美激情在线观看 | 欧美一区二区小视频 | 一区二区在线不卡 | 2020国产在线 | 日韩一区二区三区在线播放 | 黄网在线观看 | 欧美激情一区二区三区 | 亚洲a一区 | 精品国产免费一区二区三区演员表 | 国产激情网站 |