欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
全彩WS2812驅動實驗(8腳單片機)STC15F104W
[打印本頁]
作者:
MCKK520
時間:
2018-2-16 07:34
標題:
全彩WS2812驅動實驗(8腳單片機)STC15F104W
STC15F104W單片機源程序如下:
===========================
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
/*
,
全彩 LED ws2812 燈 驅動程序,受到論壇 zhuls 的啟發,
實現了在我的8腳芯片,STC15F104W芯片上的驅動,、
修改內部晶振 @ 12MHZ, STC Y5內核,一個 _nop_(); 為 0.25 us時間為基準來驅動WS2812
此程序實驗完美驅動WS2812,無閃爍,無跳燈,
,
接下來想用很長一個WS2812燈帶,擺成88:88這樣一個數碼管形狀,
然后用單片機一個IO口驅動,實現全彩數字鐘,(多功能),比如說重要定時時間到了,狂閃+高亮紅色,RR=0xFF;;這樣
或者睡覺前,以漸色呼吸燈的方式,直到深夜,亮度自動變暗,RR=0x01;, GG=0x01; BB=0x01;
,
*/
sfr P3M1 = 0x80; // 10 000000 全部設置為雙向IO口,弱上拉25K
sfr P3M0 = 0x80; // 10 000000
sbit LED1 = P3^0; // 5
sbit LED2 = P3^1; // 6
sbit LED3 = P3^2; // 7
sbit sda = P3^3; // 8
sbit KEY1 = P3^4; // 1
sbit KEY2 = P3^5; // 3
uint US100;
uint MS1;
uint ID;
bit FLAG1;
bit FLAG2;
bit FLAG3;
bit GF;
uchar i;
uchar j;
uchar d;
uchar RR; // 顏色變量0-255 就是FF以內
uchar GG;
uchar BB;
//=============================================
void delayus(uint us) // 延時n個1us @12M晶振 STC15F104W芯片
{
uint us2;
for(us2=us;us2>0;us2--) { _nop_(); _nop_(); }
}
//==================================================延時代碼 12mHZ
void delayms(uint z) //X MS延時==@ 12MHZ
{
uint x,y;
for(x=z; x>0; x--)
for(y=920; y>0; y--);
}
//=========================================================================
void bit1() //H=0.7us.L=0.6us 數據1的表示 芯片STC15F104W @ 12MHZ
//1US= 4個 _nop_(); 進程序要用掉2個_nop_(); 出程序用掉2個_nop_();
{
sda=1;
_nop_();
_nop_();
_nop_();
sda=0;
_nop_();
}
void bit0()//H=0.35us.L=0.8us ==數據0的表示
{
sda=1;
_nop_();
_nop_();
sda=0;
_nop_();
_nop_();
}
//發送8位,=1顆燈的一種顏色,WS2812燈數據為24一串24位二進制數–每種顏色8位二進制數。先是綠色,然后是紅色,最后是藍色
void send_sda(uchar dat)
{
uchar count1; //位計數器,單字節為8位
for (count1=8;count1>0;count1--)
{
if(dat & 0x80) //取高位先發,則dat & 0x80
bit1();
else
bit0();
dat<<=1; //數據右移,下一個位的數據,若高位先發則dat<<=1
}
}
//=============================================
void Init (void) //中斷初始化
{
TMOD = 0x01; //12M 100us
TL0 = (65536-100)%256; //設置定時初值
TH0 = (65536-100)/256; //設置定時初值
EA=1;
ET0=1;
TR0=1;
}
//=============================================
void timer0(void) interrupt 1 using 1 //---定時器t0-----
{
TL0 = (65536-100)%256; //設置定時初值
TH0 = (65536-100)/256; //設置定時初值
US100++; TF0 = 0;
if(US100>=10 ) { MS1++; US100=0; }
if( MS1>=1000) //定時器實現七彩色時序
{
RR=0xFF; //
GG=0x00; //
BB=0x00; //
}
if( MS1>=2000)
{
RR=0x00; //
GG=0xFF; //
BB=0x00; //
}
if( MS1>=3000)
{
RR=0x00; //
GG=0x00; //
BB=0xFF; //
}
if( MS1>=4000)
{
RR=0xFF; //
GG=0xFF; //
BB=0x00; //
}
if( MS1>=5000)
{
RR=0xFF; //
GG=0x00; //
BB=0xFF; //
}
if( MS1>=6000)
{
RR=0x00; //
GG=0xFF; //
BB=0xFF; //
}
if( MS1>=7000)
{
RR=0x7C; //
GG=0xFC; //
BB=0x00; //
}
if( MS1>=8000)
{
RR=0x4B; //
GG=0x00; //
BB=0x82; //
MS1=0;
}
}
//=========================================================================
//========================== 主程序開始 ==================================
void main()
{
P3M1=0x80;
P3M0=0x80; //
RR=0x00; //初始化
GG=0x00; //
BB=0x00; //
Init();
while(1) //主循環。
{
for (i=0;i<5;i++) //發送5顆燈
{
send_sda(GG); //綠
send_sda(RR); //紅
send_sda(BB); //藍
}
sda=0;
delayus(70); // 高于50US的低電平信號=復位,
}
}
//=========================================================================
//========================= END ==================================
//=========================================================================
,
,
復制代碼
作者:
jmkl128
時間:
2018-2-27 00:25
人才,我頂。。!
作者:
gspt
時間:
2020-2-15 15:29
寫的真好,解決了我的疑惑
謝謝樓主大哥
作者:
CNGK
時間:
2020-4-2 23:47
大哥厲害哇,解決了我的疑惑!
作者:
13534702358
時間:
2020-12-18 00:25
厲害厲害!!。
作者:
dongfang08
時間:
2021-3-29 09:50
厲害。收藏備用,謝謝!
作者:
緣分五月八
時間:
2021-5-17 08:17
哪位大佬幫我寫一個stc15F104w單片機爆閃燈,p3.2和p3.3接爆閃燈,每個燈閃3次循環爆閃用按鍵可以調節爆閃頻
作者:
快樂a123
時間:
2022-1-2 15:27
發個接線圖
作者:
1111513
時間:
2022-3-24 17:29
沒效果是為什么
作者:
快樂眼淚
時間:
2023-2-28 20:12
已收藏備用,謝謝!
作者:
wkman
時間:
2023-3-1 16:28
ws2812的燈珠,就是塊頭大了點,
其它都還好
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1