|
|
AVR的RGB彩灯控制芯片WS2801的控制程序- G8 [5 H- p* ~; C* N
* K0 t T1 _9 G#include"color.h"' `: M5 |# k) n, J. q: l
#include"delay.h"0 v' d5 J7 ^$ B0 s# S
// 0.18084us# D, W3 @' {/ G; M0 H7 u, j
void Sbi_SDI()9 m) W/ b. Y& o6 O1 c" D
{. D& r( P8 g$ d: h* R
sbi(PORTC,1);3 l* w% |# q, v! T T
}9 }6 \+ x- Y+ s, b" W% Q% K
void Cbi_SDI()% X% z: z5 o- g" \3 x4 V
{
( z# W- E! A8 i% h8 \: Ocbi(PORTC,1);) }8 Y# Y% e. S. {8 L5 Y
}$ u2 J* l! a6 i6 ]! R6 m
void Sbi_CKI()
' N/ S a! K2 Q6 v& @6 ?: j$ Z{! c% I; c$ g; T" @% n1 P2 m
sbi(PORTC,0);
' A% ?! J6 s4 k+ ]. s, C}& | b* _! z$ c" K0 p3 u/ I- I
void Cbi_CKI()" p4 ]' m. }1 c4 j2 x; z$ i, z
{
+ S! [- m5 `! m! ]' Ycbi(PORTC,0);
7 y! D! w! a" g2 N2 Q}
$ ]0 Y: j7 M7 r/ |. r, S3 Dvoid Send_CKI() //WS2801 上升沿
' G; Q+ T( l6 \0 Y/ G{
\$ [6 o9 {3 H; `1 f! [Cbi_CKI(); // 时钟 拉低8 v0 g& }" K$ i
_delay_us(6);
- b5 X I( t/ ?9 B5 @# _+ CSbi_CKI(); // 时钟 拉高; e5 Q6 S9 I! F% v) ~" F1 d1 i
_delay_us(6);
/ y) T5 M2 N b! D7 V" Y( j. |1 a7 c {Cbi_CKI(); // 时钟 拉低
K: U: y% p, i+ I5 M- J4 W}
1 P$ o# S$ c( `5 }( Svoid Write_WS2801_Data(unsigned char _data) //WS2801: `. X t% i4 t/ e; v
{
: r8 s/ L9 M$ N" @4 y' x- W# hunsigned char dai;7 o* _( b! [; M, B( T4 O6 {# _& ~
unsigned char cache;
* y; p" t8 ~! M/ W. S) Afor(dai=0;dai<8;dai++)
2 W# ^- l: u0 @6 P" a8 V{7 R, j6 [: T- P) v0 F
cache = (_data & 0x80)>>7;2 L/ h/ s) K" H7 ` Q% x
if(cache)
' ^( n9 V7 [5 c0 A) Z: F) p, z- R; OSbi_SDI();/ f E$ t$ h% y: J3 ?
else# d; ~; h1 `! f! @
Cbi_SDI();
6 ~( X4 d& u. X2 PSend_CKI();
! p7 s; }1 i3 K$ R_data <<= 1;
4 O# v+ \& y, j! b}# b1 C) o9 G; K) W- s* Y' I) {
}
0 X9 N ?" d4 ivoid Write_WS2801_ColorData(unsigned char *pd)
: G& V. Q3 \4 Z% m% M- j{
1 H, c: d1 L% h4 \$ |% \( U" [* Qunsigned char LEDMax = 0; // LED 最大数量
# U/ l8 m) v7 M" ?3 Z+ W. z9 oCbi_CKI();% J- Q) x) z' d+ I, V
Cbi_SDI();. r% L# N; @, h/ M7 _
_delay_us(250);
9 ^/ ]2 }% W" l! S5 q_delay_us(250);+ E, l {3 {: Y3 |# d3 ]
for(LEDMax = 0;LEDMax<27;LEDMax++)' x8 b9 h- x V5 y) {0 ]
{
+ T! ?, a/ M" z& u1 U//Write_WS2801_Data(Red);; `4 A. U% h4 s& X. T- h
//Write_WS2801_Data(Green);
3 c. j$ q$ Z- d: x4 L- S//Write_WS2801_Data(Blue);! q$ w( Z1 Z! C! t0 d3 z( n" ?8 N; E
Write_WS2801_Data(*pd);
/ ^3 y; m1 P( q7 G. f+ upd++;5 ~2 g$ U( f3 a" J
}$ o+ k4 }5 ~' d0 ?6 w: ^
} |
|