该程序暂时只能点亮一个WS2812,更多功能还在探索中
单片机源程序如下:
- #include "ws2812.h"
- void write_data(uint8_t Ri,uint8_t Gi,uint8_t Bi)
- {
- uint8_t jishu=0x01,i;
- for(i=0;i<8;i++)
- {
- if(Ri&jishu)
- {
- HAL_GPIO_WritePin(WS2812_OUT_GPIO_Port,WS2812_OUT_Pin,GPIO_PIN_RESET);
- delay_NOP_us(4);
- HAL_GPIO_WritePin(WS2812_OUT_GPIO_Port,WS2812_OUT_Pin,GPIO_PIN_SET);
- delay_NOP_us(4);
- }
- else
- {
- HAL_GPIO_WritePin(WS2812_OUT_GPIO_Port,WS2812_OUT_Pin,GPIO_PIN_RESET);
- delay_NOP_us(2);
- HAL_GPIO_WritePin(WS2812_OUT_GPIO_Port,WS2812_OUT_Pin,GPIO_PIN_SET);
- delay_NOP_us(6);
- }
- }
- for(i=0;i<8;i++)
- {
- if(Gi&jishu)
- {
- HAL_GPIO_WritePin(WS2812_OUT_GPIO_Port,WS2812_OUT_Pin,GPIO_PIN_RESET);
- delay_NOP_us(4);
- HAL_GPIO_WritePin(WS2812_OUT_GPIO_Port,WS2812_OUT_Pin,GPIO_PIN_SET);
- delay_NOP_us(4);
- }
- else
- {
- HAL_GPIO_WritePin(WS2812_OUT_GPIO_Port,WS2812_OUT_Pin,GPIO_PIN_RESET);
- delay_NOP_us(2);
- HAL_GPIO_WritePin(WS2812_OUT_GPIO_Port,WS2812_OUT_Pin,GPIO_PIN_SET);
- delay_NOP_us(6);
- }
- }
- for(i=0;i<8;i++)
- {
- if(Bi&jishu)
- {
- HAL_GPIO_WritePin(WS2812_OUT_GPIO_Port,WS2812_OUT_Pin,GPIO_PIN_SET);
- delay_NOP_us(4);
- HAL_GPIO_WritePin(WS2812_OUT_GPIO_Port,WS2812_OUT_Pin,GPIO_PIN_RESET);
- delay_NOP_us(4);
- }
- else
- {
- HAL_GPIO_WritePin(WS2812_OUT_GPIO_Port,WS2812_OUT_Pin,GPIO_PIN_SET);
- delay_NOP_us(2);
- HAL_GPIO_WritePin(WS2812_OUT_GPIO_Port,WS2812_OUT_Pin,GPIO_PIN_RESET);
- delay_NOP_us(6);
- }
- }
- }
- /**
- * @funNm : delay_sys_us
- * @brief : 延时nus
- * @param : nus:要延时的us数. 0~204522252(最大值即2^32/fac_us@fac_us=168)
- * @retval: void
- */
- void delay_NOP_us(uint16_t Delay)//1个delay,大概1.5us
- {
- uint32_t cnt = Delay * 8;
- uint32_t i = 0;
- for(i = 0; i < cnt; i++)__NOP();
- }
复制代码
Keil代码下载 hal库:
WS2812.7z
(5.15 MB, 下载次数: 59)
|