|
AVR的RGB彩灯控制芯片WS2801的控制程序6 e' u+ }4 f4 k
" }1 Q/ e5 J3 L
#include"color.h"
2 { h/ J# k% n- G P$ ?4 _#include"delay.h"/ C: B& H$ E* U! C- B
// 0.18084us
$ [# U% I# V9 e" t0 l# A, Avoid Sbi_SDI()& u8 _" \ {3 m. ~1 T1 |4 I# Y
{
" K3 y% e. H9 s$ Zsbi(PORTC,1);1 H* }9 m h; i e: t
}: \6 ?$ f4 z0 G7 r
void Cbi_SDI()/ b2 K% R- p# W5 [" I+ F
{
5 F; G7 {9 W% r. W) k+ Q; ucbi(PORTC,1);: S$ I( p: c. b. Y. N5 N6 @
}
" ]. n% B0 m. }* S avoid Sbi_CKI()" ~3 d; u! w7 I8 M: |
{
4 v( `0 J$ e" X% C8 |) Tsbi(PORTC,0);) l) P a; k9 F9 j; q3 z& n$ l
}5 N% |, H4 Q9 N5 g' r
void Cbi_CKI()
5 u! M: n% z; ]. L{6 S5 }! [9 K! p, a+ h1 `/ I
cbi(PORTC,0);
( I% K, F; R) J |) t) I: Q h}! S) ~1 j# _6 G6 G; H: q
void Send_CKI() //WS2801 上升沿+ A8 Q; h$ {5 k4 S0 ]0 w: `
{
H& ]" ^7 m4 UCbi_CKI(); // 时钟 拉低
. E# q- z0 w6 K. X! K; A_delay_us(6);. e. H6 K" x. t" L* | q
Sbi_CKI(); // 时钟 拉高- X8 p# h2 W3 s9 k$ A' o
_delay_us(6);, r" Q3 Q3 K; v; `) \( ]
Cbi_CKI(); // 时钟 拉低
0 P' Z( w5 C y, C}
# d4 T) |( {' _: o1 r9 ^* Bvoid Write_WS2801_Data(unsigned char _data) //WS2801
( m% j( B. O- r{8 ~+ u" p# c$ u( [; e
unsigned char dai;
* T: E8 o2 A. ounsigned char cache;+ Q. f$ v1 x+ B+ x
for(dai=0;dai<8;dai++)1 j6 }8 a) `/ i8 v4 T" l, T
{
+ n8 J4 L, E7 ]4 L- M# M" lcache = (_data & 0x80)>>7;
: V) C, Y- z8 ^if(cache)
( `; C7 I7 E! pSbi_SDI();
5 o8 o% L4 ?* F+ y- Xelse
3 i8 I& i. ^1 v4 R5 {; [Cbi_SDI();
; i; L+ i& L8 K+ D* A4 `! G7 q! kSend_CKI();& S/ @: d/ i% N, t0 r, [1 [% t
_data <<= 1;
. ~; F4 A6 U. {# @; [- h4 j5 _}4 O1 C& O3 L' Y" H) N
}
3 {. b1 R! e* J5 O9 e) nvoid Write_WS2801_ColorData(unsigned char *pd)8 b, ]& k6 L( t) B2 k6 ]& c) U
{" k7 I6 ~9 r8 |* q. r8 a
unsigned char LEDMax = 0; // LED 最大数量7 _6 g1 Y4 @& `1 u6 V
Cbi_CKI();
" q A; M4 E. g3 B; tCbi_SDI();) Q0 G) {, z6 s0 z7 A3 ?
_delay_us(250);4 T; `8 V% ~9 s0 ~
_delay_us(250);
, A/ I$ ]3 F" \0 gfor(LEDMax = 0;LEDMax<27;LEDMax++)' |/ T; t9 h! {2 M5 Z
{
- t* A0 W! T- L5 ~//Write_WS2801_Data(Red);) k1 L) p& k2 R' }
//Write_WS2801_Data(Green);" ]; g9 T" p6 P, A# y
//Write_WS2801_Data(Blue);1 q y+ k! u: J4 }* l
Write_WS2801_Data(*pd);: O! [) J0 ^3 {( ?. V2 ^
pd++;
: c8 Z. r# }. c# A/ R}
! ^) V6 U% M; o4 R( \7 y# ~; Q} |
|