|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
WS2811灯光程序 单片机22路全彩控制器
, R& @0 f7 m+ _! c, T! `2 ]2 D' }
. B3 a( |: ~( v& _源程序:
3 l. l3 K" o, _1 ^* y ^+ U/ R/******************************************************************************4 g, J/ P* A3 g( g3 E
//*版权信息:深圳市天微电子有限公司
) J6 ?" x5 @7 p' w+ U//*文 件 名:TM1812-V1.0! C2 T" r% J6 `; L" s
//*当前版本:V1.01 N8 N8 o( o+ S1 B. s
//*mcu 型号:STC15W104
6 g) x8 C$ L5 k0 h//*开发环境:Keil uVision4
3 Q* C; ~1 q8 f//*晶震频率:33MHZ(内部时钟)
9 n6 c/ ?; @* V: D- {7 u4 F//*完成日期:07-10& h5 U" N2 B. F7 e* g# ~ }* L7 ?
//*程序功能:1.该程序可实现2片TM1812幻彩变化。
! f- Q# E- Z. o* d8 [// 2.修改变量IC可修改TM1812数量。
1 P) j9 s& g0 f( j//*免责声明:1.此程序为TM1812驱动LED点亮演示程序,仅作参考之用。3 y5 R! ]& k, ?) {5 p T
// 2.如有直接使用本例程程序造成经济损失的,本公司不承担任何责任。 ! k# }, d7 {3 w2 ]4 }
/*******************************************************************************/6 c4 E" ~+ y' G- Y- p6 D3 ^
#include <reg52.h> //MCU头文件
- r) k& Q) \7 y: |7 O#include "intrins.h" //包含nop指令头文件
% n/ L4 M0 d9 w! u4 _
5 p7 t. e' p) Z4 a& x8 V6 a
1 Q, S& r+ o' N; |0 F) Q#define nop _nop_(); ; L( t: {1 ^3 l9 ~ t1 A8 ~
//宏定义. Y/ K2 s( Z( _% Y0 X( I
/********************************定义控制端口***********************************/
- o' A6 V1 s& |sbit DO=P3^3; //定义信号输出DO
# g% \) F/ K3 J
- Y2 U7 S* }1 X6 G
( }8 R8 T: q, o J/**********************************定义变量*************************************/' I6 `* `% U; a9 s2 R
unsigned int IC=2; //控制TM1812个数 h' r$ Y5 |( A; u2 Y
unsigned int LED_PX; //像素点数
2 C8 ^" N) r- vunsigned char PWM=255; //TM1812灰度数据
% H. C; l9 s" I7 P+ P8 A2 Junsigned char Rda,Gda,Bda; //R、G、B灰度数据: E( a# `, f& G J; l, d. Y% h6 i
unsigned char bdata LED_data; //可位操作的数据发送暂存变量声明. g3 \. F. S6 k- h" p$ H* ^7 n
sbit bit0=LED_data^0; //被发送的数据各位定义
( E3 Z, i6 D, B. r% l4 x5 C8 Isbit bit1=LED_data^1; b, t D- b: b9 v" O1 Y$ k- r% ^ f
sbit bit2=LED_data^2;3 q* o' X( H7 |6 G! Q/ j
sbit bit3=LED_data^3;
% x5 ?8 t/ B( D/ |8 [: Ssbit bit4=LED_data^4;8 l" A: ?- \- _$ \7 K( [
sbit bit5=LED_data^5;' P# N5 o4 ]$ z/ `
sbit bit6=LED_data^6;$ x/ @! j" C+ f8 u6 g7 d$ C
sbit bit7=LED_data^7;* R) h3 q/ s6 p" F$ w' f1 t# ~( ?
bit flag=0; //定义一个标志位6 m% }4 n1 ]7 q
0 {, X9 U4 I v. r( C
' ], \# ~- L! Z6 p! e" N+ R/**********************************延时函数*************************************/
1 w+ a$ I( t1 V6 rvoid delay(unsigned int n) //n=1,延时500us" H0 ~' E9 S: {$ e2 m# D3 ~# N) n) B$ p
{3 g7 T+ q% B( K9 m( ~
unsigned int i;7 z* j# G, Y& I3 J+ v( L/ B) A
while(n--)
9 w: w5 a L+ |7 v for(i=0;i<860;i++);
0 l+ v3 ]3 f& y" Z; z}
1 l& X2 a) u! P2 G# _1 o) v* v4 R( t1 e% M
( B0 _% t9 c& f! T8 H/********************发送0码函数,高电平400ns,周期1.25us************************/
# K6 {+ r. v7 b9 _void send_data_0()
8 G* m! S! k# F5 S{ X7 p2 i6 o" W, W: g
DO=1;, Y1 j1 i2 v+ b5 ~6 n# {, }2 h
nop;nop;nop;nop;nop;3 I: [/ h1 ^/ [7 @& E1 C
nop;nop;nop;nop;nop; * |) n) ]* a+ w0 s: @
DO=0; / m( t- d5 o- l6 h
nop;nop;nop;nop;nop;nop;nop;' I) v+ {( H# f; P
nop;nop;nop;nop;nop;nop;nop; % |1 {. \/ v! f$ E
}
9 E* a+ x: S) \) X1 H3 y
' W' m, v* S) c# P) }
1 x6 T7 N; X, V$ u f! j' B/*******************发送1码函数,高电平800ns,周期1.25us*************************/3 d; }; ]5 T7 [9 p w6 }0 X! K! ~) t
void send_data_1() 2 W1 N8 Q% d; H5 S# o$ Q
{& ?* f, c# n' h) n+ d
DO=1;8 @, V) |; @" S* S4 z' H- s
nop;nop;nop;nop;nop;nop; & t# ^ e. y! b7 W! F- K
nop;nop;nop;nop;nop; P7 `6 c A1 n) y* v1 [5 a
nop;nop;nop;nop;nop;nop; 6 x! d) |9 B1 q
nop;nop;nop;nop;nop;. V8 k4 p5 F( }# m
DO=0;
) I G! C5 m6 y. ^ t, _; q}
% G* t! E& G' R4 G& S
! R2 q+ S& O4 V$ }- \
# b; X1 H; c8 ?' D; ?' }" g5 l/***********************发送1个字节数据,高位先发*******************************/ U i' G' j" ^3 C
void send_data(unsigned char DATA) 4 i/ b7 H1 b0 ?: `" G" X8 V
{0 s F( E5 w0 J1 Y, E# Y! Z7 _3 A
LED_data=DATA;
: E: c, A% T3 b; {% W% [2 y if(bit7) send_data_1(); else send_data_0();
; a7 t6 ^- Q3 V if(bit6) send_data_1(); else send_data_0();
# p m( B3 p* h if(bit5) send_data_1(); else send_data_0();
. {8 U0 }( i( D: H a9 r if(bit4) send_data_1(); else send_data_0();; v# A. N' z6 K& R0 d; a1 @: J
if(bit3) send_data_1(); else send_data_0();% t# [ V5 j8 B/ [
if(bit2) send_data_1(); else send_data_0();
, W \; f& p" E% U" @ if(bit1) send_data_1(); else send_data_0();+ S1 C* h( C$ G Y- O
if(bit0) send_data_1(); else send_data_0(); % j3 O; u: ?3 z& L! [1 h
}- O$ x4 R" j) E1 f0 i
/******************************发送1帧数据*************************************/9 Z I G* z/ P7 P( k8 p5 P
void send_px()# i0 m, u# v, _* n% `2 N
{
) z/ {5 q; T: @. E$ ] unsigned int i;# U H3 G- H' e$ v
for(i=0;i<LED_PX;i++)% S' t+ K$ k J4 q- G! F% O" t0 I
{
' r" r. _$ K% ]# X0 Z send_data(Rda); //发送R灰度数据
7 _( l0 R! a, B send_data(Gda); //发送G灰度数据
; `6 s% J! j3 P3 x/ d send_data(Bda); //发送B灰度数据' J0 ^$ ^6 j7 R+ c1 X1 q
}
! v G! V3 k9 n3 C# C! n' F0 T}
9 L) U: m! X# e1 r" y% M/*===============================主函数=======================================*/
' |2 I3 h1 O, Y9 m6 fvoid main()
" g+ d& o* k/ {0 N* j/ Z{5 @9 {. t$ ?* V
unsigned char i;
, E1 E/ o, l0 @+ O* ` LED_PX=3*IC; //1个TM1812等于4个像素
6 O* i( m8 m: x4 R Rda=Gda=Bda=0; //R、G、B灰度数据复位清零
3 V) E) t) q) L, N3 S while(1) T* P+ U# K! k
{ v, t; h! S6 w: ?. _
for(i=0;i<PWM;i++) //红色渐亮
7 {" Q/ B0 w9 M8 s$ W {
: y( B' K$ [4 T/ } Rda=i; //灰度计算) | ?! g0 y6 o# d2 F/ M; X& W: Q
send_px(); //发送灰度数据
4 M. c) X; ^$ w4 O" ` a& c7 v delay(50); //复位延时/ z, n1 N3 ]% C i
}
" q- |* P1 K$ m flag=1; //标志位置位
4 u4 h2 O+ \" l9 r8 B/ G9 C% Y; d0 z# F while(flag) //标志位置位后循环函数$ @- O+ T; G5 F$ p! B, }9 b' i1 J
{
. G; y; v# {) \0 b h9 n for(i=0;i<PWM;i++) //红色渐灭,绿色渐亮 8 `4 G2 ^( Y W, F
{8 e5 V2 x4 |8 E/ r& }
Gda=i;, p$ Z8 _8 v/ ?
Rda=PWM-i; //灰度计算: U( |. d( h3 F( n/ N
send_px(); //发送灰度数据
6 H& q: B, c! H2 m: t s delay(50); //复位延时, B( {, H+ H' N7 I8 I Y1 e
}
% u L: v* S! ~$ ~% P' J" } for(i=0;i<PWM;i++) //绿色渐灭,蓝色渐亮 ; X8 o) p/ A! e! G" F
{
/ r* n$ z, D0 J; ~' \" V9 F Bda=i; % S* K8 o8 `% r- B, N
Gda=PWM-i; //灰度计算3 @% k. T, l% U2 G" {, v; R
send_px(); //发送灰度数据+ Z& G' a J* v/ n( _, S: ~
delay(50); //复位延时
2 }# f" |4 v$ ?$ n( a) ] }6 d+ s/ y# J! `7 }7 j# |
for(i=0;i<PWM;i++) //蓝色渐灭,红色渐亮
) T! C+ G4 P; V1 t1 C {; W- d* Y& o7 L/ f
1 S3 o; J% \$ R' C; V3 c. E+ v/ M
3 M; } ?9 ]8 c( A3 W3 R( z1 g, R& z* ?0 Y$ H3 c T
…………余下代码请下载附件…………" @! e7 a: b, n& A2 q3 F
- G e: @' e$ p1 k6 ~$ r3 L7 L+ ~下载:
5 D, q( c4 `" e( h9 T, H2 v K% Y8 x
5 w, T1 r1 W; `
|
|