該程序暫時只能點亮一個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)
2022-3-4 23:30 上傳
點擊文件名下載附件
|