|
1黑幣
STC15W204S-SOP16郔苤炵苀啣-v1.0萇繚芞.pdf
(23.23 KB, 下載次數(shù): 234)
2019-1-5 14:22 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
上次程序更新后,STC15W204s控制ws2812B七彩流水燈,發(fā)現(xiàn)一個問題,就是keil C編譯時,燈數(shù)調(diào)整為37時,一直報錯說內(nèi)存超出,希望高手能指點迷津,現(xiàn)在將36燈程序分享給大家:
單片機(jī)源碼:
- #include<stc15.h>
- #include"intrins.h"
- sbit WS2812 = P1^0;
- #define numLEDs 36 //燈的個數(shù)
- unsigned char buf_R[numLEDs] = {0};//顏色緩存
- unsigned char buf_G[numLEDs] = {0};
- unsigned char buf_B[numLEDs] = {0};
- void RGB_Set_Up(); //送0碼
- void RGB_Set_Down(); //送1碼
- void HAL_Delay(unsigned long t)
- {
- unsigned int x,y;
- for(x=114;x>0;x--)
- for(y=t;y>0;y--);
- }
- //復(fù)位延時
- void Delay50us() [url=]//@22.1184MHz[/url]
- {
- unsigned char i, j;
-
- _nop_();
- _nop_();
- i = 2;
- j = 15;
- do
- {
- while (--j);
- } while (--i);
- }
- //1碼,高電平850ns 低電平400ns 誤差正負(fù)150ns
- void RGB_Set_Up()
- {
- WS2812 = 1;
- //經(jīng)過邏輯分析儀調(diào)試的的延時
- _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
- _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
- WS2812 = 0;
- }
- //1碼,高電平400ns 低電平850ns 誤差正負(fù)150ns
- void RGB_Set_Down()
- {
- WS2812 = 1;
- //經(jīng)過邏輯分析儀調(diào)試的的延時
- _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
- WS2812 = 0;
- }
- //發(fā)送24位數(shù)據(jù)
- void Send_2812_24bits(unsigned char G8,unsigned char R8,unsigned char B8)
- {
- unsigned int n = 0;
- //發(fā)送G8位
- for(n=0;n<8;n++)
- {
- G8<<=n;
- if(G8&0x80 == 0x80)
- {
- RGB_Set_Up();
- }
- else
- {
- RGB_Set_Down();
- }
- }
- //發(fā)送R8位
- for(n=0;n<8;n++)
- {
- R8<<=n;
- if(R8&0x80 == 0x80)
- {
- RGB_Set_Up();
- }
- else
- {
- RGB_Set_Down();
- }
- }
- //發(fā)送B8位
- for(n=0;n<8;n++)
- {
- B8<<=n;
- if(B8&0x80 == 0x80)
- {
- RGB_Set_Up();
- }
- else
- {
- RGB_Set_Down();
- }
- }
- }
- //復(fù)位碼
- void RGB_Rst()
- {
- WS2812 = 0;
- Delay50us();
- }
-
- //顏色交換24位不拆分發(fā)
- void SetPixelColor(unsigned char num,unsigned long c)
- {
- unsigned char i;
- for(i=0;i<numLEDs;i++)
- {
- buf_R[num] = (unsigned char)(c>>16);
- buf_G[num] = (unsigned char)(c>>8);
- buf_B[num] = (unsigned char)(c);
- }
- for(i=0;i<numLEDs;i++)
- {
- Send_2812_24bits(buf_G[i],buf_R[i],buf_B[i]);
- }
- }
- //復(fù)位
- void PixelUpdate()
- {
- RGB_Rst();
- }
- // Fill the dots one after the other with a color
- //用一種顏色填充這些圓點
- void colorWipe(unsigned long c, unsigned int wait)
- {
- unsigned char i=0;
- for( i=0; i<numLEDs; i++)
- {
- SetPixelColor(i, c);
- PixelUpdate();
- HAL_Delay(wait*5);
- }
- }
- //單燈流水
- void Watercolor(unsigned long c, unsigned int wait)
- {
- unsigned char i=0;
- for( i=0; i<numLEDs; i++)
- {
- SetPixelColor(i, c);
- PixelUpdate();
- HAL_Delay(wait*5);
- SetPixelColor(i, 0);
- PixelUpdate();
- HAL_Delay(wait);
- }
- }
-
- void main()
- {
- while(1)
- {
-
-
- colorWipe(0xff0000,1); //紅色全亮
- HAL_Delay(10000);
- colorWipe(0xff00,1); //綠色全亮
- HAL_Delay(10000);
- colorWipe(0xff,1);//藍(lán)色全亮
- HAL_Delay(10000);
- colorWipe(0xffff00,1); //黃色全亮
- HAL_Delay(10000);
- colorWipe(0xffff,1); //青色全亮
- HAL_Delay(10000);
- colorWipe(0xff00ff,1); //紫色全亮
- HAL_Delay(10000);
- colorWipe(0xffffff,1); //白色全亮
- HAL_Delay(10000);
- colorWipe(0x00,1); //off
- HAL_Delay(10000);
- Watercolor(0xff0000, 100);//紅色單燈流水
- HAL_Delay(1000);
- Watercolor(0xff00, 100);//綠色單燈流水
- HAL_Delay(1000);
- Watercolor(0xff, 100);//藍(lán)色單燈流水
- HAL_Delay(1000);
- Watercolor(0xffff00, 100); //黃色單燈流水
- HAL_Delay(1000);
- Watercolor(0xffff, 100);//青色單燈流水
- HAL_Delay(1000);
- Watercolor(0xff00ff, 100); //紫色單燈流水
- HAL_Delay(1000);
- Watercolor(0xffffff, 100); //白色單燈流水
- HAL_Delay(1000);
-
- colorWipe(0x00,1); //off
- HAL_Delay(10000);
- colorWipe(0xff0000,100); //紅色逐個點亮
- HAL_Delay(1000);
- colorWipe(0x00,100); //0ff
- HAL_Delay(1000);
- colorWipe(0xff00,100); //綠色逐個點亮
- HAL_Delay(1000);
- colorWipe(0x00,100); //0ff
- HAL_Delay(1000);
- colorWipe(0xff,100);//藍(lán)色逐個點亮
- HAL_Delay(1000);
- colorWipe(0x00,100); //0ff
- HAL_Delay(1000);
- colorWipe(0xffff00,100); //黃色逐個點亮
- HAL_Delay(1000);
- colorWipe(0x00,100); //0ff
- HAL_Delay(1000);
- colorWipe(0xffff,100); //青色逐個點亮
- HAL_Delay(1000);
- colorWipe(0x00,100); //0ff
- HAL_Delay(1000);
- colorWipe(0xff00ff,100); //紫色逐個點亮
- HAL_Delay(1000);
- colorWipe(0x00,100); //0ff
- HAL_Delay(1000);
- colorWipe(0xffffff,100); //白色逐個點亮
- HAL_Delay(1000);
- colorWipe(0x00,100); //0ff
- HAL_Delay(1000);
-
-
-
- }
- }
復(fù)制代碼
|
-
setfrequence.jpg
(247.03 KB, 下載次數(shù): 225)
下載附件
2019-1-5 14:17 上傳
下載時STCisp設(shè)置頻率
-
frequence.jpg
(79.32 KB, 下載次數(shù): 226)
下載附件
2019-1-5 14:17 上傳
keil設(shè)置頻率
-
fail.jpg
(195.8 KB, 下載次數(shù): 217)
下載附件
2019-1-5 14:19 上傳
設(shè)置37燈內(nèi)存地址空間滿
-
-
fenweideng.rar
2019-1-5 14:22 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
34.1 KB, 下載次數(shù): 445, 下載積分: 黑幣 -5
評分
-
查看全部評分
|