|
AVR的RGB彩灯控制芯片WS2801的控制程序- Z0 C0 Y) l3 B9 c, Q $ y" r) E% Z; Z. n #include"color.h" #include"delay.h"0 K* R1 i2 q( E) p8 T) m) { // 0.18084us void Sbi_SDI() { sbi(PORTC,1); }! v- ] [- v$ `' x void Cbi_SDI()9 k2 e0 y, E/ M( C7 ]3 A0 N {- S6 h# B1 t7 c6 g cbi(PORTC,1);" m3 X' l: q$ T; }* t } void Sbi_CKI()1 I, S4 J, i" y {* o& n" E& |/ I& t: x: A sbi(PORTC,0); c l$ y: j) o) H, Q7 P* S }$ X- }5 C# I5 A* U, x void Cbi_CKI()0 Q- x5 |- ~5 z: ]* P( `# i {- M7 F4 { s4 N# K1 g/ u cbi(PORTC,0); } void Send_CKI() //WS2801 上升沿8 n1 L& o0 O# z& W4 B1 f5 U" i9 | { Cbi_CKI(); // 时钟 拉低 _delay_us(6);- @- f$ C, y6 c' J& a Sbi_CKI(); // 时钟 拉高% q: D# w+ x) p _delay_us(6);( w' A+ w+ t; F# F/ e- X) L Cbi_CKI(); // 时钟 拉低 }/ i; n( i- W' {9 L7 f. i. m, I void Write_WS2801_Data(unsigned char _data) //WS2801 { unsigned char dai; unsigned char cache;! U( \9 J c, d: w% e% W7 e for(dai=0;dai<8;dai++) {% O" A0 W6 C' s {1 k" c/ q0 e cache = (_data & 0x80)>>7; if(cache)/ ]5 ~) w( C ], W Sbi_SDI(); else+ I* r- z D" r. x Cbi_SDI(); Send_CKI();3 T+ T+ d" j) D: K! C$ L _data <<= 1; }7 l k6 S, U5 d. p# V } void Write_WS2801_ColorData(unsigned char *pd)% D4 v G: z$ J) y4 _* D {" X) d; @' j: }4 ] p. t+ M0 a. l unsigned char LEDMax = 0; // LED 最大数量* L) p8 T7 ]* O. p+ O7 r Cbi_CKI();' \. Z8 s* M; m( j/ p( i/ q Cbi_SDI(); _delay_us(250);4 q! g- @, `0 |* D9 p' ~- W' \ _delay_us(250);8 t7 @* Y, G& @- x for(LEDMax = 0;LEDMax<27;LEDMax++)0 U5 V$ o6 A" d { //Write_WS2801_Data(Red); //Write_WS2801_Data(Green);3 x# D" Y" G+ A' M8 F //Write_WS2801_Data(Blue);1 w' m- p9 O A5 A8 w Write_WS2801_Data(*pd);- e$ P7 _* w5 ], Z/ f8 a# Q pd++;. O9 q2 y. f8 b0 N$ W$ d }# T' d6 c* Q) y( O2 v& c } |
| 调用被测函数的代码。 在单元测试过程中,驱动模块通常包括调用被测函数前的数据准备、调用被测函数以及验证相关结果三个步骤。驱动代码的结构,通常由单元测试的框架决定。 |
/1
关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )
GMT+8, 2026-4-19 00:25 , Processed in 0.109375 second(s), 28 queries , Gzip On.
地址:深圳市南山区科技生态园2栋A座805 电话:19926409050