|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
WS2811灯光程序 单片机22路全彩控制器, k9 u% r* ^' X- \& a
. F# Y. f$ k( n: ]
' S) s9 t7 C6 C源程序:7 O( c! |. ~! T
/******************************************************************************! K, |% B9 U2 M& w4 p( ^
//*版权信息:深圳市天微电子有限公司
) {+ v$ e! l9 N5 @) p5 n( }5 ~//*文 件 名:TM1812-V1.0
; X1 i( ?/ F" U6 X% F4 l, f6 ^//*当前版本:V1.0
2 v, \: h+ O. d5 F0 e9 k' ^! h//*mcu 型号:STC15W104' U, C% c( w; W% \
//*开发环境:Keil uVision4$ D; B) L% [, V% O9 V9 g7 J
//*晶震频率:33MHZ(内部时钟)
3 [, J- T* Y' {' p$ z& g! T//*完成日期:07-10* e, C( X# B% Q1 v0 s7 \
//*程序功能:1.该程序可实现2片TM1812幻彩变化。+ E5 T% |* @/ _) Y/ }5 U, I( T( K) W
// 2.修改变量IC可修改TM1812数量。2 [3 j/ V4 g* u* T5 a- s
//*免责声明:1.此程序为TM1812驱动LED点亮演示程序,仅作参考之用。* m3 y" X9 e: c" P! B, F, }" p
// 2.如有直接使用本例程程序造成经济损失的,本公司不承担任何责任。
Y! \+ W" `9 l$ I/*******************************************************************************/3 a; \# T7 [9 b5 I
#include <reg52.h> //MCU头文件, a6 \( q C" C: ^9 P6 f5 n
#include "intrins.h" //包含nop指令头文件# Y( P: M9 q+ a! b
- q7 a! [" h3 |1 i% x* _& ]; V) d3 K! w9 l
#define nop _nop_(); 6 d/ y; @2 w1 D |& O* M& Q
//宏定义% |* j9 l* F6 c8 G
/********************************定义控制端口***********************************/
8 t4 G% ] ?. I+ m1 asbit DO=P3^3; //定义信号输出DO
( \! x; o! q( s% z% ?; b$ u
4 T q$ ^# |0 n% e ~3 w# [, U0 E8 L' }' B1 q
/**********************************定义变量*************************************/
1 A1 H; U. s) b; r0 X" Sunsigned int IC=2; //控制TM1812个数
4 V& v2 L, W2 K a8 Dunsigned int LED_PX; //像素点数& I+ T) l4 h _* J5 t1 m
unsigned char PWM=255; //TM1812灰度数据
: ~5 G8 E. G- R7 z. W/ E+ M9 `unsigned char Rda,Gda,Bda; //R、G、B灰度数据# }! w1 X) U+ {/ z) b7 B
unsigned char bdata LED_data; //可位操作的数据发送暂存变量声明/ p' K1 w9 b: U: G1 h* |
sbit bit0=LED_data^0; //被发送的数据各位定义8 ` t3 W1 Z8 I3 ?! ^
sbit bit1=LED_data^1;: Y) R! x6 a7 t4 G3 T1 p
sbit bit2=LED_data^2;
4 D, _ \; W/ O8 w7 L" Rsbit bit3=LED_data^3;
1 V+ F+ w+ o4 A. y3 x" A2 nsbit bit4=LED_data^4;
U. K5 h: S; B/ D- O: e5 [7 `sbit bit5=LED_data^5;
9 z* T* ]2 D( G4 Ssbit bit6=LED_data^6;7 c3 J T% _7 j* g. j
sbit bit7=LED_data^7;+ v+ J1 A8 y$ ]0 a9 v5 ^/ \
bit flag=0; //定义一个标志位
. j9 u/ L. N" I* G
: L& Q3 G. r# V* e+ e' J& U
5 ?" g% d$ }' b# Y1 v5 t/**********************************延时函数*************************************/5 M/ y% F; c$ X; w: l* ?
void delay(unsigned int n) //n=1,延时500us
a- w0 V# z" F: D+ m9 Z) \4 y+ [, c{9 W* c- R0 g& h
unsigned int i;( v' D- q% E, e1 X
while(n--)
; j, L/ _& c. s, t7 l% K for(i=0;i<860;i++);
. B5 }$ y& H) T: P$ D% ^- p}
% a$ G% G! \4 k5 G" K
" [/ N: f7 ?! O3 B1 V$ K1 |8 K$ c( I! I
/********************发送0码函数,高电平400ns,周期1.25us************************/
7 i/ T3 t. A; t) |$ ]void send_data_0()
) x; U6 I2 k0 C! I{
" }3 w! O {+ b4 \ DO=1;9 i8 V# {# i% b) T8 e& W' A8 J
nop;nop;nop;nop;nop;) B0 p# H7 {" m, c8 c4 k
nop;nop;nop;nop;nop;
* X& H3 ]+ M8 k5 O/ B9 z9 p DO=0; ' I& V$ ^: v; b; C: o$ M/ T
nop;nop;nop;nop;nop;nop;nop;& b5 l8 o. N. Z1 C. V' C' O) Z
nop;nop;nop;nop;nop;nop;nop;
. @# F- m3 S/ h/ z}( N8 ]% S% A$ L7 x6 l2 V
- R+ e: i" k$ M' V
. F0 _( G) W1 a1 i) h( q0 D/*******************发送1码函数,高电平800ns,周期1.25us*************************/% ]" Z5 V- y# G
void send_data_1() 3 B8 m/ i5 O# [3 L# Y
{
- ?7 B1 R7 R; p, \6 V' _. M DO=1;& O! I' H! C* \$ B3 q& Y
nop;nop;nop;nop;nop;nop; 3 _ } @4 p( o4 e, Y( ?1 t, H/ O
nop;nop;nop;nop;nop;
7 Y' ~# D( x8 A9 u) T v8 m4 ] nop;nop;nop;nop;nop;nop; * K3 C M& k; R0 f0 d$ N9 y
nop;nop;nop;nop;nop;
) f( D* v+ [. P& K/ \ DO=0;
+ w; I/ D5 x" V& f5 t0 M# R}3 d% u. {9 p, x" q* Q
1 B) R" M8 }8 S+ B: l/ Q
9 }) T1 c+ P" Q3 p" h2 l
/***********************发送1个字节数据,高位先发*******************************/3 B' h# {$ ~3 L/ T1 U- T
void send_data(unsigned char DATA)
+ _- `0 }; w6 g. z. K{- s& j9 f& Z- S, J
LED_data=DATA;
3 j% ?4 E4 M. P if(bit7) send_data_1(); else send_data_0();9 u5 t! }: M: ~" G# g
if(bit6) send_data_1(); else send_data_0();
7 J$ ~7 ?2 R" y1 J8 y! |) Z if(bit5) send_data_1(); else send_data_0();7 B7 x6 K3 z) V) s! R2 x0 O5 A
if(bit4) send_data_1(); else send_data_0();: S G: z4 j& V9 Q1 w. Z Z
if(bit3) send_data_1(); else send_data_0();; L" E* F. S" @8 w6 a+ F
if(bit2) send_data_1(); else send_data_0();! F1 D Z& J5 q& ^* E
if(bit1) send_data_1(); else send_data_0();9 z. ^' n& |. j" l. ^3 y5 b
if(bit0) send_data_1(); else send_data_0();
4 a1 }4 a) _+ N# w}
0 r& q9 t# |/ g' e/******************************发送1帧数据*************************************/( M/ @( L- g, O9 F C0 G: R
void send_px()
% K0 e) q0 n9 [7 w: k4 h7 r{
7 f4 ^+ [& N2 u8 e8 l) a8 C; Q- i; c unsigned int i;/ ]8 m1 D* k0 l& |$ S* k
for(i=0;i<LED_PX;i++)
$ T- O: Y" S0 [# I7 ^$ M7 \ d7 k9 M {3 n& g9 p# n Q3 r2 u! Q
send_data(Rda); //发送R灰度数据 q7 e' R. j% T6 }( D$ g
send_data(Gda); //发送G灰度数据
+ G+ |% t- m% B H* n) H send_data(Bda); //发送B灰度数据
: c# T" v, g; v, _7 E* Z }
$ f1 ]$ ?: ^8 p2 H, v}9 n& K) v! R# K& S" d
/*===============================主函数=======================================*/; f6 x" H& a0 c z8 u7 S6 \- |
void main()0 o2 o% ?5 g t. W( D
{$ v K( i! s b# K. X
unsigned char i;
% x5 \/ s( |& J7 v @6 @- q4 S LED_PX=3*IC; //1个TM1812等于4个像素* {. L; V+ x5 Z: ?, c
Rda=Gda=Bda=0; //R、G、B灰度数据复位清零% X' s9 Q! B; B! G
while(1)
% F! ~1 H4 C& a- S# b8 c- I7 f {
$ D) `* y3 E! _! I" b for(i=0;i<PWM;i++) //红色渐亮
4 A7 j/ \$ P8 _" K3 N; | {1 F% x$ u- k$ A6 B: |( v4 W3 v
Rda=i; //灰度计算
) _9 g! b- T6 _8 R8 I; ~ send_px(); //发送灰度数据; g6 c- D% W4 A: F
delay(50); //复位延时
' ^/ y9 Y8 D$ @+ H" n }
9 G% y: @' {# D- c5 C* g flag=1; //标志位置位$ Q t: j/ R1 s D$ I& g. S! x
while(flag) //标志位置位后循环函数# _% ]! |- b+ }- K. _& e% d
{2 ?/ V" S ]( @( v1 ]
for(i=0;i<PWM;i++) //红色渐灭,绿色渐亮
7 K) N4 a5 M( k {
# D, L: ^( Z# ^& S* T, o+ E Gda=i;
# P, S4 z$ z ^+ h T; B0 B" ] Rda=PWM-i; //灰度计算
) z) p5 M5 J- [! c send_px(); //发送灰度数据
! ?& o) U+ @* m! \: k' R5 v7 J2 D delay(50); //复位延时2 S' B7 m D8 ~5 {+ L
}0 d, y3 x# y. |
for(i=0;i<PWM;i++) //绿色渐灭,蓝色渐亮 : V0 y: T+ D9 `: I' u
{
7 @) V z8 s4 U5 t( @3 @ Bda=i;
+ I4 @9 F4 [( v Gda=PWM-i; //灰度计算9 w; K; n) N5 f6 Q. E: [' W
send_px(); //发送灰度数据9 ]; W. V K' h2 i2 h+ c
delay(50); //复位延时: d5 m8 e) T& ]
}
0 u9 t7 [! a7 Z for(i=0;i<PWM;i++) //蓝色渐灭,红色渐亮
* R# @. Q9 E5 T2 W/ u+ {6 y {. I! I8 c" B4 A3 x
$ M! D, u* ?1 J* s8 C
/ f; Q- O' A% d: }, |
$ G1 x9 `1 Q# u0 i+ U…………余下代码请下载附件…………
9 F" I& \# f. k& P0 d0 V$ H0 Q1 f' ]1 f* d* O }6 T
下载:; }; I7 N. N7 V. r
; D, ?) ~; g! y, X3 d! F% k
, _" ?& a C2 x I! K/ l$ F* e3 J |
|