久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
WS2811應(yīng)用資料與單片機(jī)代碼
[打印本頁(yè)]
作者:
逆流01
時(shí)間:
2024-1-10 11:35
標(biāo)題:
WS2811應(yīng)用資料與單片機(jī)代碼
一、WS2811簡(jiǎn)介
輸出端口耐壓12V
芯片內(nèi)置穩(wěn)壓管,24V以下電源端只需串電阻IC到VDD腳,無(wú)需外加穩(wěn)壓管
灰度調(diào)節(jié)電路(256級(jí)灰度可調(diào))
內(nèi)置信號(hào)整形電路,任何一個(gè)IC收到信號(hào)后經(jīng)過(guò)波形整形后在輸出,保證線路波形畸變不會(huì)累加
內(nèi)置上電復(fù)位和掉電復(fù)位電路
PWM控制端能夠?qū)崿F(xiàn)256級(jí)調(diào)節(jié),掃描頻率不低于400HZ/S
串行接口級(jí)聯(lián),一根信號(hào)線DI完成數(shù)據(jù)的接收與解碼
任意兩點(diǎn)傳輸距離不超過(guò)2米無(wú)需增加任何電路
當(dāng)刷新速率30幀/秒時(shí),低速模式級(jí)聯(lián)數(shù)不小于512點(diǎn),高速模式下不小于1024點(diǎn)
數(shù)據(jù)發(fā)送速度可達(dá)與400Kbps與800Kbps兩種模式
二、通訊協(xié)議
數(shù)據(jù)協(xié)議采用單線歸零碼的通訊方式, 像素點(diǎn)在上電復(fù)位以后, DIN端接受從控制器傳輸過(guò)來(lái)的數(shù)據(jù), 首先送過(guò)來(lái)的24bit數(shù)據(jù)被第一個(gè)像素點(diǎn)提取后, 送到像素點(diǎn)內(nèi)部的數(shù)據(jù)鎖存器, 剩余的數(shù)據(jù)經(jīng)過(guò)內(nèi)部整形處理電路整形放大后通過(guò)DO端口開始轉(zhuǎn)發(fā)輸出給下一個(gè)級(jí)聯(lián)的像素點(diǎn), 每經(jīng)過(guò)一個(gè)像素點(diǎn)的傳輸, 信號(hào)減少24bit。 像素點(diǎn)采用自動(dòng)整形轉(zhuǎn)發(fā)技術(shù), 使得該像素點(diǎn)的級(jí)聯(lián)個(gè)數(shù)不受信號(hào)傳送的限制, 僅僅受限信號(hào)傳輸速度要求。
WS2811 0碼、1碼、reset碼時(shí)序、串接方法
數(shù)據(jù)傳輸
需要精確延時(shí)的,使用示波器進(jìn)行查看
三、電路連接
四、開源代碼
WS2811.h
#ifndef __WS2811_H
#define __WS2811_H
#include <stm32f10x.h>
//#define Time_D 400 //宏定義
#define nWs 50 // 定義串接級(jí)聯(lián)WS2811個(gè)數(shù) 50可修改
//B-R-G 定義顏色24bits
#define White 0xFFFFFF // 白色
#define Black 0x000000 // 黑色 (不亮)
#define Blue 0xFF0000 // 藍(lán)色
#define Red 0x00FF00 // 紅色
#define Green 0x0000FF // 綠色
#define Gray 0x22ee22
extern void WS_GPIO_Init(void);//WS2811端口初始化
extern unsigned long WsDat_RUN[nWs];//流水燈顯存
extern unsigned long WsDat[nWs];//流水燈顯存
//extern void WS_Reset(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin); //復(fù)位
//extern void WS_Set1(GPIO_TypeDef *GPIOx,uint16_t GPIO_PIN,unsigned long dat);
//發(fā)送1個(gè)字節(jié)
extern void WS_Set_Date(GPIO_TypeDef *GPIOx,uint16_t GPIO_PIN,unsigned char len,unsigned long dat); //發(fā)送相同數(shù)據(jù)
extern void WS_SetAll(GPIO_TypeDef *GPIOx,uint16_t GPIO_PIN); //發(fā)送所有字節(jié)
//燈帶控制方案
extern unsigned long ColorToColor(GPIO_TypeDef *GPIOx,uint16_t GPIO_PIN,unsigned long color0, unsigned long color1,unsigned int speed) ;//顏色漸變
//初始化顯存數(shù)組
extern void LED_Init(GPIO_TypeDef *GPIOx,uint16_t GPIO_PIN,unsigned long color); extern void RUN_LED(GPIO_TypeDef *GPIOx,uint16_t GPIO_PIN,unsigned long color,unsigned int speed,unsigned char temp); //跑馬燈
#endif
復(fù)制代碼
WS2811.C
#include "WS2811.h"
unsigned long WsDat[nWs]; //顯存
unsigned long WsDat_RUN[nWs]; //流水燈顯存
/**************************************************
* IO初始化(移植時(shí)請(qǐng)修改)
***************************************************/
void WS_GPIO_Init()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE ); //端口時(shí)鐘,使能
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9; // PIN
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // IO口速度為50MHz
GPIO_Init(GPIOC, &GPIO_InitStructure); // 端口配置,根據(jù)設(shè)定參數(shù)初始化
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE ); //端口時(shí)鐘
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15 | GPIO_Pin_14 | GPIO_Pin_13 | GPIO_Pin_12; // PIN
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // IO口速度為50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); // 端口配置,根據(jù)設(shè)定參數(shù)初始化
}
/**************************
* 內(nèi)部延時(shí)
***************************/
void WS_delay_us(__IO u32 nCount) //簡(jiǎn)單的延時(shí)函數(shù)
{
for(; nCount != 0; nCount--);
}
void WS_delay2us()
{
unsigned char i;
for(i=0; i<11; i++);
}
void WS_delay05us()
{
// unsigned char i;
// for(i=0; i<1; i++);
}
void WS_delay_ms(uint32_t nms)
{
while(nms--)
{
WS_delay_us(1670); //普通方式延時(shí)
}
}
/***************************
* 發(fā)送一比特
****************************/
void TX0(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin) // 發(fā)送0
{
GPIO_SetBits(GPIOx, GPIO_Pin);
WS_delay05us();
GPIO_ResetBits(GPIOx, GPIO_Pin);
WS_delay2us();
}
void TX1(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin) // 發(fā)送1
{
GPIO_SetBits(GPIOx, GPIO_Pin);
WS_delay2us();
GPIO_ResetBits(GPIOx, GPIO_Pin);
WS_delay05us();
}
void WS_Reset(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin) //復(fù)位
{
GPIO_ResetBits(GPIOx, GPIO_Pin);
WS_delay_us(50);
GPIO_SetBits(GPIOx, GPIO_Pin);
GPIO_ResetBits(GPIOx, GPIO_Pin);
}
/************************************************
* 發(fā)送數(shù)據(jù)
*************************************************/
void WS_Set1(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin,unsigned long dat)
{
unsigned char i;
for(i=0; i<24; i++)
{
if(0x800000 == (dat & 0x800000) )
TX1(GPIOx,GPIO_Pin);
else
TX0(GPIOx,GPIO_Pin);
dat<<=1; //左移一位
}
}
void WS_Set_Date(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin,unsigned char len,unsigned long dat) // 全部發(fā)送同樣的數(shù)據(jù)
{
unsigned char i;
for(i = 0; i <len; i++)
{
WS_Set1(GPIOx,GPIO_Pin,dat);
}
WS_Reset(GPIOx,GPIO_Pin);
}
void WS_SetAll(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin) //發(fā)送所有字節(jié)
{
unsigned char i;
for(i=0;i<nWs;i++)
{
WS_Set1(GPIOx,GPIO_Pin,WsDat_RUN[i]);
}
WS_Reset(GPIOx,GPIO_Pin);
WS_delay_ms(500);
}
/**************************顏色漸變函數(shù)***************************/
/*
從起始顏色---最終顏色
*/
unsigned char abs0(int num)//求絕對(duì)值
{
if(num>0) return num;
num = -num;
return (unsigned char) num;
}
unsigned long ColorToColor(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin,unsigned long color0, unsigned long color1,unsigned int speed)
{
unsigned char Red0, Green0, Blue0; // 起始三原色
unsigned char Red1, Green1, Blue1; // 結(jié)果三原色
int RedMinus, GreenMinus, BlueMinus; // 顏色差(color1 - color0)
unsigned char NStep; // 需要幾步
float RedStep, GreenStep, BlueStep; // 各色步進(jìn)值
unsigned long color; // 結(jié)果色
unsigned char i;
// 綠 紅 藍(lán) 三原色分解
Red0 = color0>>8;
Green0 = color0>>16;
Blue0 = color0;
Red1 = color1>>8;
Green1 = color1>>16;
Blue1 = color1;
// 綠 紅 藍(lán) 三原色分解 若輸入的顏色非上述三種
Red0 =( color0&0x00FF00)>>8;
Green0 = (color0&0xFF0000)>>16;
Blue0 = color0;
Red1 = (color1&0x00FF00)>>8;
Green1 = (color1&0xFF0000)>>16;
Blue1 = color1;
// 計(jì)算需要多少步(取差值的最大值)
RedMinus = Red1 - Red0;
GreenMinus = Green1 - Green0;
BlueMinus = Blue1 - Blue0;
//判斷兩個(gè)絕對(duì)值大小。。a>b為真,則=a;否則=b
NStep = ( abs0(RedMinus) > abs0(GreenMinus) ) ? abs0(RedMinus):abs0(GreenMinus);
NStep = ( NStep > abs0(BlueMinus) ) ? NStep:abs0(BlueMinus);
// 計(jì)算出各色步進(jìn)值
RedStep = (float)RedMinus / NStep;
GreenStep = (float)GreenMinus / NStep;
BlueStep = (float)BlueMinus / NStep;
// 漸變開始
for(i=0; i<NStep; i++)
{
Red1 = Red0 + (int)(RedStep * i);
Green1 = Green0 + (int)(GreenStep * i);
Blue1 = Blue0 + (int)(BlueStep * i);
color = Green1<<16 | Red1<<8 | Blue1; // 合成 綠紅藍(lán)
WS_Set_Date(GPIOx,GPIO_Pin,nWs,color); //發(fā)送顏色,所有燈帶同色
WS_delay_ms(speed);
}
return color;
}
/*************跑馬燈****************
000000000000000000000000
111100000000000000000000
000011110000000000000000
000000001111000000000000
111100000000111100000000
000011110000000011110000
***********************************/
void LED_Init(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin,unsigned long color) //初始化顯存數(shù)組
{
unsigned char i;
for(i=0;i<50;i++)
WsDat_RUN[i]=color;
WS_SetAll(GPIOx,GPIO_Pin);
}
//入口參數(shù) color----speed----temp
// 顯示顏色--流水速度--間隔距離
void RUN_LED(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin,unsigned long color,unsigned int speed,unsigned char temp)//跑馬燈
{
unsigned char i,j;
for(j=0;j<(nWs-1);j++)
{
for(i=nWs;i>0;i--)
WsDat_RUN[i] = WsDat_RUN[i-1];
if(j%temp == 0)
WsDat_RUN[0] = color;
else
WsDat_RUN[0] = Black;
//WS_Set_Date(GPIO_PIN,nWs,WsDat_RUN[i]);
WS_SetAll(GPIOx,GPIO_Pin);
WS_delay_ms(speed);
}
}
main.c
#include "stm32f10x.h"
#include "WS2811.h"
int main()
{
WS_GPIO_Init();//GPIOC和GPIOB初始化
ColorToColor(GPIOB,GPIO_Pin_15 | GPIO_Pin_14 | GPIO_Pin_13 | GPIO_Pin_12,Red,Green,10);//顏色漸變端口GPIOB12\13\14\15輸出
//如果需要其他端口輸出先去WS2811.c修改GPIO口初始化函數(shù)
}
復(fù)制代碼
作者:
人工置頂員
時(shí)間:
2024-1-13 01:55
頂一下
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
午夜在线精品
|
九九久久久
|
91av免费看
|
色综合九九
|
成人在线电影网站
|
一级做a
|
精品久久久网站
|
91精品久久久久久综合五月天
|
欧美在线视频二区
|
欧美一级久久久猛烈a大片 日韩av免费在线观看
|
成人欧美一区二区三区
|
亚卅毛片
|
亚洲一级二级三级
|
国产精品亚洲精品久久
|
欧美男人天堂
|
精品久久久久久亚洲精品
|
韩日精品一区
|
中文字幕av中文字幕
|
国产成人高清成人av片在线看
|
精品久久国产
|
欧美11一13sex性hd
|
男人久久天堂
|
91新视频
|
热久久免费视频
|
无吗视频
|
久久久婷婷
|
国产精品二区三区在线观看
|
国产91久久久久蜜臀青青天草二
|
欧美一区二区三区在线看
|
伊人网在线播放
|
一级二级三级在线观看
|
国内自拍偷拍
|
日韩免费视频一区二区
|
欧美一区二区三区国产
|
日韩在线播放网址
|
美女黄网站
|
狠狠插狠狠操
|
日韩一级
|
久久91av
|
日韩成人免费视频
|
国产97久久
|