久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1315|回復: 0
打印 上一主題 下一主題
收起左側

32驅動彩燈

[復制鏈接]
跳轉到指定樓層
樓主
ID:316593 發表于 2018-4-27 19:33 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
/****************************************************************************************
* WS2811 ²ÊµÆÇý¶¯º¯Êý
*
* µ÷Ó÷½·¨£º
*    Ð޸ĺ궨Ò壺 #define nWs 1    // ÓжàÉÙ¿ÅWS2811¼¶Áª
*    WS_Init();    // IO³õʼ»¯
*    WsDat[0] = 0x808080;//ÏԴ渳ֵ
*    WS_SetAll();  // ·¢ËÍÊý¾Ý
*    ColorToColor(unsigned long color0, unsigned long color1);// ÑÕÉ«½¥±äËã·¨
*
* ×÷ÕߣºÐÇÏ£Íû£¨ÒÑУÑ飩
* ÈÕÆÚ£º2015Äê6ÔÂ24ÈÕ
****************************************************************************************/
#include "sys.h"
#include <stm32f10x.h>
#include "WS2811.h"
#include "delay.h"
   
/* ÏÔ´æ */
unsigned long WsDat[nWs];
const unsigned long RGB_data[32]={
    0x00ff00,0x00ff00,0x00ff00,
    0xFF7F00,0xFF7F00,0xFF7F00,
    0xFFFF00,0xFFFF00,0xFFFF00,
    0x0000EE,0x0000EE,0x0000EE,
    0x00FFFF,0x00FFFF,0x00FFFF,0x00FFFF
   
   

//    0x00ff00,0x00ff00,0x00ff00,0x00ff00,
//    0xFF7F00,0xFF7F00,0xFF7F00,
//    0xFFFF00,0xFFFF00,0xFFFF00,
//    0x0000EE,0x0000EE,0x0000EE,
//    0x00FFFF,0x00FFFF,0x00FFFF
   
//    0x00FFFF,
//    0x00ff00,0x00ff00,0x00ff00,0x00ff00,
//    0xFF7F00,0xFF7F00,0xFF7F00,
//    0xFFFF00,0xFFFF00,0xFFFF00,
//    0x0000EE,0x0000EE,0x0000EE,
//    0x00FFFF,0x00FFFF
};

/**************************************************************************************
* IO³õʼ»¯£¨ÒÆÖ²Ê±ÇëÐ޸ģ©
**************************************************************************************/
void WS_Init()
{
    GPIO_InitTypeDef  GPIO_InitStructure;   
   
    //¶Ë¿ÚʱÖÓ£¬Ê¹ÄÜ
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOE, ENABLE );     

    // ¶Ë¿ÚÅäÖÃ
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;                // PIN
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         // ÍÆÍìÊä³ö
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        // IO¿ÚËÙ¶ÈΪ50MHz
    GPIO_Init(GPIOE, &GPIO_InitStructure);                    // ¸ù¾ÝÉ趨²ÎÊý³õʼ»¯
}

/**************************
* ÄÚ²¿ÑÓʱ
***************************/
void delay2us()
{
    unsigned char i;
    for(i=0; i<12; i++);
}
void delay05us()
{
    unsigned char i;
    for(i=0; i<1; i++);
}

/***************************
* ·¢ËÍÒ»±ÈÌØ
****************************/
void TX0()      { PEout(1) = 1; delay05us(); PEout(1) = 0; delay2us(); } // ·¢ËÍ0
void TX1()      { PEout(1) = 1; delay2us();  PEout(1) = 0; delay05us(); } // ·¢ËÍ1
void WS_Reset() { PEout(1) = 0; delay_us(60);  PEout(1) = 1; PEout(1) = 0; }

/**************************************************************************************
* ·¢ËÍÒ»×Ö½Ú
**************************************************************************************/
void WS_Set1(unsigned long dat)
{
    unsigned char i;
   
    for(i=0; i<24; i++)
    {
        if(0x800000 == (dat & 0x800000) )    TX1();
        else                                TX0();
        dat<<=1;                            //×óÒÆÒ»Î»
    }
}

/**************************************************************************************
* ·¢ËÍËùÓÐ×Ö½Ú
**************************************************************************************/
void WS_SetAll()
{
    unsigned char j;
   
    for(j=0; j<nWs; j++)
    {
        WS_Set1(WsDat[0]);  // j / 0
    }
    WS_Reset();
}









/********************************************
* Çó¾ø¶ÔÖµ
********************************************/
unsigned char abs0(int num)
{
    if(num>0) return num;
   
    num = -num;
    return (unsigned char) num;
}

/***********************************************************************************
* ÑÕÉ«½¥±äËã·¨
* Îó²î <= 2
************************************************************************************/
u32 ColorToColor(unsigned long color0, unsigned long color1)
{
    unsigned char Red0, Green0, Blue0;  // ÆðʼÈýÔ­É«
    unsigned char Red1, Green1, Blue1;  // ½á¹ûÈýÔ­É«
    int              RedMinus, GreenMinus, BlueMinus;    // ÑÕÉ«²î£¨color1 - color0£©
    unsigned char NStep;                             // ÐèÒª¼¸²½
    float          RedStep, GreenStep, BlueStep;        // ¸÷É«²½½øÖµ
    unsigned long color;                            // ½á¹ûÉ«
    unsigned char i;
   
    // ÂÌ ºì À¶ ÈýÔ­É«·Ö½â
    Red0   = color0>>8;
    Green0 = color0>>16;
    Blue0  = color0;
   
    Red1   = color1>>8;
    Green1 = color1>>16;
    Blue1  = color1;
   
    // ¼ÆËãÐèÒª¶àÉÙ²½£¨È¡²îÖµµÄ×î´óÖµ£©
    RedMinus   = Red1 - Red0;
    GreenMinus = Green1 - Green0;
    BlueMinus  = Blue1 - Blue0;
   
    NStep = ( abs0(RedMinus) > abs0(GreenMinus) ) ? abs0(RedMinus):abs0(GreenMinus);
    NStep = ( NStep > abs0(BlueMinus) ) ? NStep:abs0(BlueMinus);
   
    // ¼ÆËã³ö¸÷É«²½½øÖµ
    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;     // ºÏ³É  Â̺ìÀ¶
        WsDat[0] = color;
        WS_SetAll();                            // Êä³ö
        delay_ms(5);                        // ½¥±äËÙ¶È
    }
    // ½¥±ä½áÊø
   
    return color;
}

u32 ColorToColor_r(unsigned long color0, unsigned long color1)
{
    unsigned char Red0, Green0, Blue0;  // ÆðʼÈýÔ­É«
    unsigned char Red1, Green1, Blue1;  // ½á¹ûÈýÔ­É«
    int              RedMinus, GreenMinus, BlueMinus;    // ÑÕÉ«²î£¨color1 - color0£©
    unsigned char NStep;                             // ÐèÒª¼¸²½
    float          RedStep, GreenStep, BlueStep;        // ¸÷É«²½½øÖµ
    unsigned long color;                            // ½á¹ûÉ«
    unsigned char i;
    unsigned char j,t;
    unsigned char xunhuan=15;
    // ÂÌ ºì À¶ ÈýÔ­É«·Ö½â
    Red0   = color0>>8;
    Green0 = color0>>16;
    Blue0  = color0;
   
    Red1   = color1>>8;
    Green1 = color1>>16;
    Blue1  = color1;
   
    // ¼ÆËãÐèÒª¶àÉÙ²½£¨È¡²îÖµµÄ×î´óÖµ£©
    RedMinus   = Red1 - Red0;
    GreenMinus = Green1 - Green0;
    BlueMinus  = Blue1 - Blue0;
   
    NStep = ( abs0(RedMinus) > abs0(GreenMinus) ) ? abs0(RedMinus):abs0(GreenMinus);
    NStep = ( NStep > abs0(BlueMinus) ) ? NStep:abs0(BlueMinus);
   
    // ¼ÆËã³ö¸÷É«²½½øÖµ
    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;     // ºÏ³É  Â̺ìÀ¶
        WsDat[0] = color;
        WS_SetAll();                            // Êä³ö
        for(i=0; i<nWs; i++)
        {
            for(j=0; j<nWs-xunhuan; j++)
            {
            WS_Set1(WsDat[0]);
            }
            WS_Reset();
            xunhuan--;
        }
        delay_ms(200);                        // ½¥±äËÙ¶È
    }
    // ½¥±ä½áÊø
   
    return color;
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久中文字幕 | 欧美一级特黄aaa大片在线观看 | 久久专区| 亚洲精品国产一区 | 国产欧美精品区一区二区三区 | 日韩一区二区精品 | 国产在线精品一区二区三区 | 激情婷婷 | 中文在线一区 | av一区二区三区四区 | 免费黄色成人 | 久久精品99 | 狠狠干夜夜草 | 欧美综合一区二区 | 国产激情亚洲 | 色综合天天综合网国产成人网 | 色久五月 | 在线播放一区 | 久久久久国产一区二区三区四区 | www.天天操.com | 国产精品无码久久久久 | 日韩精品一区二区三区久久 | 久久久日韩精品一区二区三区 | 日韩欧美亚洲综合 | 欧美亚洲另类在线 | 欧美视频一区二区三区 | 一区二区三区高清在线观看 | 国产精品一区二区不卡 | 国产一区二区三区四区 | 国产精品乱码一区二区三区 | 欧美激情精品久久久久久变态 | 夜夜操天天干 | 91传媒在线观看 | 99精品99 | 欧美一区二区三区在线观看 | 欧美一级二级在线观看 | 欧美日韩中文字幕 | 成人小视频在线观看 | 欧美一级片在线看 | 欧美日韩国产一区 | 成人免费区一区二区三区 |