|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
WS2811灯光程序 单片机22路全彩控制器9 F! w; t/ s, P
3 Q) R: |' u. y8 v1 V7 W; |
0 p6 W4 J# E$ j1 D2 A% ^源程序:( s" q, Q6 S6 z5 Y8 b& q# k5 V
/******************************************************************************
6 j' v: v2 I6 p/ \. b K//*版权信息:深圳市天微电子有限公司 ~9 p7 ^ K! F+ k" K- Z
//*文 件 名:TM1812-V1.0
$ f/ M" V h' X4 o//*当前版本:V1.0
" Q8 Q8 \& {5 b7 }9 L//*mcu 型号:STC15W104
6 y* u; f7 O% s4 J& x6 f$ i5 O//*开发环境:Keil uVision4. {; Q3 C7 g$ E& P) N
//*晶震频率:33MHZ(内部时钟) 2 M7 m# t! U& c N
//*完成日期:07-10
5 P0 \7 U% z: J( z& H//*程序功能:1.该程序可实现2片TM1812幻彩变化。
7 e5 @3 |) F7 D: U4 j// 2.修改变量IC可修改TM1812数量。
8 m3 k0 N7 w2 _6 p, h* L//*免责声明:1.此程序为TM1812驱动LED点亮演示程序,仅作参考之用。; E% M* I/ R( \4 s) c1 Y
// 2.如有直接使用本例程程序造成经济损失的,本公司不承担任何责任。
2 j' j O1 n- W \/ |, m/*******************************************************************************/1 s2 A; g* u1 c6 J- g
#include <reg52.h> //MCU头文件( ]* O0 w9 Y) z' c6 b0 j7 I/ @
#include "intrins.h" //包含nop指令头文件
: m) Q, i4 ^* }4 v- J- C) }8 N. Z. |0 @% ^. R7 J5 P4 F& k& z5 \! O& R$ ?
$ s0 ~, @1 `/ y( y. K! e" Z+ R$ v#define nop _nop_(); ( Q1 }$ @0 i' K' x% h6 X |2 E7 }
//宏定义
4 r# K2 p& _6 |5 | o) S$ R2 i/********************************定义控制端口***********************************/
1 a% B+ ~7 y6 ?9 M' h# @sbit DO=P3^3; //定义信号输出DO
' g! Y l. U. Y0 f# Y0 @, g/ k+ A J4 P: j) Z- D
3 u! @5 v5 k& H4 N+ O/**********************************定义变量*************************************/, \: p: Y8 ^/ d& I! I/ u% _# P
unsigned int IC=2; //控制TM1812个数
) o6 R5 w& e3 D5 Q9 X1 W- |, Yunsigned int LED_PX; //像素点数
# q4 u* J% l, r$ E' Q/ }0 ]unsigned char PWM=255; //TM1812灰度数据
. U* v' s( e; w$ I0 B4 U, Gunsigned char Rda,Gda,Bda; //R、G、B灰度数据8 @6 F) E9 l( i) v% ]0 S+ g& w
unsigned char bdata LED_data; //可位操作的数据发送暂存变量声明
$ H9 r' k/ e, g4 g1 Zsbit bit0=LED_data^0; //被发送的数据各位定义! b2 K9 m/ R7 Q7 `% c3 J- M6 I
sbit bit1=LED_data^1;- C, Q8 O, x- h4 F
sbit bit2=LED_data^2;
8 B$ |! ] {* a4 v! Vsbit bit3=LED_data^3;
9 A$ h5 P) Y# e$ f$ W7 ]6 Psbit bit4=LED_data^4;
$ {. k' Q* d: a, |( k3 msbit bit5=LED_data^5;
9 u2 E& K( s7 G+ zsbit bit6=LED_data^6;
3 D' A8 ~, [2 W: j; q" @sbit bit7=LED_data^7;
: F6 A7 W$ M- Z8 A' E* w$ A0 kbit flag=0; //定义一个标志位$ _7 M" I! d, X3 k3 [0 t
8 j& V$ ?0 z" U, r: J, H
: X% W9 C2 O" l0 I* w! k! u/**********************************延时函数*************************************/5 e! m4 N( a z2 l1 @ e7 p% z
void delay(unsigned int n) //n=1,延时500us. D; A' k: O1 A ~
{
L7 D( z- K; d( J unsigned int i;
* s4 i) R7 U4 [+ B! o( r/ B while(n--) ( x1 z8 c5 Y8 T, g( f. |
for(i=0;i<860;i++);
! I& J$ i% {: d& t7 l+ ]}+ {3 m$ @7 _: |) l8 H" {( P% f
9 i9 k: z$ E) K) v0 u4 Q8 o$ m3 C
* J5 ?; x+ E5 t$ O/********************发送0码函数,高电平400ns,周期1.25us************************/
1 i' r6 H8 J, _$ nvoid send_data_0() $ r% i" C) E5 a0 T }1 o# D; E
{6 t5 R" H( N* z
DO=1;
4 }7 X" E) U) j; k nop;nop;nop;nop;nop;, j# b' h" u* }) Z; v
nop;nop;nop;nop;nop;
4 \1 S; `& o2 Q+ q- x DO=0;
7 E7 h, z# g% n. ~7 k- N nop;nop;nop;nop;nop;nop;nop;
* K5 h* n1 e0 V$ {* i I4 c4 v nop;nop;nop;nop;nop;nop;nop; 4 \# ?! k0 D% M8 \9 x3 d& ?7 b( P# k
}
I- k& t; R% q1 }+ k1 ~( _( l6 _+ X% \/ h6 ]1 Q' r, R6 [
0 s5 W, S2 P7 }/*******************发送1码函数,高电平800ns,周期1.25us*************************/
$ F$ n" @) i8 o$ Xvoid send_data_1()
Q- \* }- F _/ b2 H0 P4 R{
* M# _& m4 N) A; z6 A DO=1;
, x6 m0 l2 E$ f; t: w nop;nop;nop;nop;nop;nop; 5 u9 c5 ~, t* f B
nop;nop;nop;nop;nop;$ ]# `6 b% B7 B- n8 N& N
nop;nop;nop;nop;nop;nop; - t; @7 r3 W" u; z/ D
nop;nop;nop;nop;nop;
2 k& X R) h) L7 @! M' H+ } DO=0; 3 r, p& z6 N% r& M7 N& p
}
$ W7 E' [% d3 @6 g1 q f) T' Q$ o' [7 ?$ |! X
) y! g1 Q$ H4 R) H4 |9 c) A
/***********************发送1个字节数据,高位先发*******************************/3 F# w) ^" W0 i( }9 D
void send_data(unsigned char DATA) + l" `2 h% v2 B& C1 n& y% e% s
{
! \* E$ r3 p: q LED_data=DATA;
! S. h# b. c. \0 \+ `: @5 e9 ] if(bit7) send_data_1(); else send_data_0();
) g% P4 O( S7 v: V; ]0 |' S) C if(bit6) send_data_1(); else send_data_0();
- Y/ u; C7 N p) W5 L& f5 j( X% C if(bit5) send_data_1(); else send_data_0();
3 u5 _1 ]/ u# V if(bit4) send_data_1(); else send_data_0();2 Y. q2 A9 [- e
if(bit3) send_data_1(); else send_data_0();
. X3 q7 L6 r! ` T if(bit2) send_data_1(); else send_data_0();
$ R5 l# k f) A, y) ?! l8 v if(bit1) send_data_1(); else send_data_0();
/ ^+ P) q; q. [/ C/ m# D if(bit0) send_data_1(); else send_data_0(); ! x" g6 ] I. Q8 [
}
* t- o5 s+ g F( z/******************************发送1帧数据*************************************/
- W& v6 P* P4 O, Hvoid send_px()( C, H9 a% h6 l5 n0 ?5 z, v3 u
{
) B* j- F4 }+ \ unsigned int i;4 T* z& v9 o5 `
for(i=0;i<LED_PX;i++)' X1 a$ l+ S& w% y0 m) v) S
{
) c8 d# J! z+ I4 O send_data(Rda); //发送R灰度数据
7 p% k/ {+ m) S, V send_data(Gda); //发送G灰度数据' G. N2 U% X. s. W; R3 \
send_data(Bda); //发送B灰度数据7 [& l0 p; F) n5 F U! |
}
0 }! d8 p$ z! G/ B- ~- A) C; m}
9 q0 F/ i ]1 g, g5 u/*===============================主函数=======================================*/, I, t: |. F, l6 a" G& k
void main()
% I0 K8 R' v& ?, ^& c: \. |1 y{5 i3 w5 p. [( G$ X1 Y' |3 a! h# j' j$ k
unsigned char i;3 i2 l& L$ z) ~5 `
LED_PX=3*IC; //1个TM1812等于4个像素8 ? g' J4 z! I' x6 p) g& E5 s5 y' e2 @
Rda=Gda=Bda=0; //R、G、B灰度数据复位清零
6 w4 G& h. c" _ while(1)7 b. ~: r+ A; W4 V" r6 U Q4 K4 g# j
{& |- x5 I9 `, |" L; N- o0 a
for(i=0;i<PWM;i++) //红色渐亮
/ h. ^9 h- Y4 H$ @3 ~5 I* ~ {
/ h1 R/ f2 X+ f, h! P8 O Rda=i; //灰度计算
2 x1 Y; S# }2 D# l ?" g send_px(); //发送灰度数据7 S5 a& [# r/ O' Y N
delay(50); //复位延时 f7 a6 y9 k4 w. ]1 W/ C
}* w* ^2 j: b8 |, C; m6 n9 f
flag=1; //标志位置位5 v1 t6 J0 B7 T3 `
while(flag) //标志位置位后循环函数8 F8 s d/ y% k4 |+ S
{ k0 [5 y% |/ _0 z+ U# b
for(i=0;i<PWM;i++) //红色渐灭,绿色渐亮
G. d9 y' U. v A; n {0 x5 T z: I3 N5 R
Gda=i;8 ? n& r4 h4 q5 c% B
Rda=PWM-i; //灰度计算
0 M8 Y z8 h# q send_px(); //发送灰度数据
6 V) N9 q( a3 L5 s1 \ delay(50); //复位延时
8 N7 B, O( U M$ Y$ a' q }2 O, I+ v8 G! j N* r
for(i=0;i<PWM;i++) //绿色渐灭,蓝色渐亮
( U7 C j; [% Z! g. r {
3 G# `6 `8 `$ r Bda=i; # R& T# p/ i8 Z( ^1 t/ u5 V
Gda=PWM-i; //灰度计算
, Z* I2 U9 E2 `' S0 ` send_px(); //发送灰度数据
5 f: i5 o# k9 y) V delay(50); //复位延时
% M3 ?" D0 ?2 e7 { }( ?: @9 J% u) h- ~4 \
for(i=0;i<PWM;i++) //蓝色渐灭,红色渐亮
, c S/ {$ K& N! ] {
& P+ K) |2 K4 E* {
. f- L, V- `2 J* S1 K" P* d N) J; e. p" @: M7 T3 B y' x
/ `, }. H; f2 ~1 e2 z" t…………余下代码请下载附件…………
4 {- ~- T: I; o) Z% H8 m5 K
& e" ^+ z& ^, @0 }$ q; d: T下载:' t- P, j; ^. Q ^8 P0 ^) Z& }
u; |' v+ _: R
" ^# m- q1 N) H" H/ ~
|
|