- 3
- 0
- 约6.9千字
- 约 3页
- 2024-08-19 发布于湖南
- 举报
2
3/*
4
5此代码针对stm8s003/stm8s103平台@16M
6Ws2811/Ws2812
7IARforStm8编译器
8
9灯的性质决定,需要一次性刷新,比如16个灯就必须一次性刷新16个,
10而不能一个一个中间有间隔的刷新,这样就只有一个灯亮,
11如果需要花样把不需要亮的灯设置为不亮0x000000即可
12
13*/
14
15
16
17//根据平台定义
18#define_nop_()asm(nop)
19
20#definedelay1NOP()_nop_();
21#definedelay2NOP()delay1NOP();_nop_();
22#definedelay3NOP()delay2NOP();_nop_();
23#definedelay4NOP()delay3NOP();_nop_();
24#definedelay5NOP()delay4NOP();_nop_();
25#definedelay6NOP()delay5NOP();_nop_();
26#definedelay7NOP()delay6NOP();_nop_();
27#definedelay8NOP()delay7NOP();_nop_();
28#definedelay9NOP()delay8NOP();_nop_();
29#definedelay10NOP()delay9NOP();_nop_();
30#definedelay11NOP()delay10NOP();_nop_();
31#definedelay12NOP()delay11NOP();_nop_();
32#definedelay13NOP()delay12NOP();_nop_();
33#definedelay14NOP()delay13NOP();_nop_();
34#definedelay15NOP()delay14NOP();_nop_();
35#definedelay16NOP()delay15NOP();_nop_();
36#definedelay48NOP()delay16NOP());delay16NOP();delay16NOP();
37#definedelay64NOP()delay16NOP());delay16NOP();delay16NOP();delay16NOP();
38
39//引脚
40#defineRGB_PIN_H()PD_ODR_ODR21;
41#defineRGB_PIN_L()PD_ODR_ODR20;
42
43unsignedcharbrightness1;//亮度数字越大亮度越低
44
45union//用于字节拆分速度快可省13us并且定义在全局变量里在做if(COL.color_temp[j]0x80)运算时可省4条指令
8个机器周期500nS左右
46{
47unsignedcharcolor_temp[4];
48unsignedlongcolor_lg;
49}COL;
50
51voidWs2812b_Write(unsignedlongcolor)//输出颜色顺序green,red,blue耗时24us左右波特率1M
52{
53unsignedcharj,temp;
54COL.color_lg=color;
55asm(sim);//关闭所有中断避免打扰
56for(j1;j4;j++)
57{
58temp=COL.color_temp[j]/bri
原创力文档

文档评论(0)