打印
[DemoCode下载]

MS51 SPI 实现 ARGB LED 彩虹灯灯效

[复制链接]
68|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
GB, LED, RGB, pi, s51
EC_MS51_ARGB_RainBow_Wave_Effect_V1.00.zip (1.46 MB)

程序中设定系统时钟HIRC 为24 MHz 以及SPI 时钟除频值为8,由此可计算出SPI 时钟速率为 3 MHz,这代表一个SPI 时钟为 0.333 us。换句话说,逻辑’0’ 映像为SPI 位样式为‘1000’; 逻辑’1’ 映像为SPI 位样式为‘1110’,亦即3 个字节的RGB 数据格式可转化成12 个字节的SPI 数据格式。
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2020 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

//***********************************************************************************************************
//  Website: http://www.nuvoton.com
//  E-Mail : MicroC-8bit@nuvoton.com
//***********************************************************************************************************

#include "MS51_32K.h"
#include "Nuvoton_Stripe.h"

/* Data Flash */
#define Addr_DataFlash 0x3F80



void Timer3_ISR(void) interrupt 16        // Vector [url=home.php?mod=space&uid=72445]@[/url]  0x83
{
    _push_(SFRS);
    clr_T3CON_TF3;

    /* Add time counter */
    TOPDOWNTimeCounter++;

    _pop_(SFRS);
}

void Timer3_1ms_initial(void)
{
    SFRS = 0x00;
    T3CON &= 0xF8;
    clr_T3CON_TF3;
    RL3 = 0x40;
    RH3 = 0xA2;
    //    RH3 = 0x82;
    set_T3CON_TR3;
    set_EIE1_ET3;
    set_IE_EA;
}

void SPI_Init()
{
    set_SPSR_DISMODF;                                // SS General purpose I/O ( No Mode Fault )
    clr_SPCR_SSOE;

    clr_SPCR_LSBFE;                                  // MSB first

    clr_SPCR_CPOL;                                   // The SPI clock is low in idle mode
    clr_SPCR_CPHA;                                   // The data is sample on the first edge of SPI clock

    set_SPCR_MSTR;                                   // SPI in Master mode
    SPICLK_FSYS_DIV8;                                // Select SPI clock
    set_SPCR_SPIEN;                                  // Enable SPI function
    clr_SPSR_SPIF;
}

void main(void)
{
    MODIFY_HIRC(HIRC_24);

    /* Set LED output */
    P00 = 1;
    P00_INPUT_MODE;
    ENABLE_P00_PULLDOWN;

    SPI_Init();

    /* Enable Timer3 to add time counter */
    Timer3_1ms_initial();


    /* Init LED to all disable */
    Disable_TOPDOWN();
    SPI_Send();

    while (1)
    {

        /* Control LED */
        {
            RainbowWave_TOPDOWN();
            SPI_Send();
        }
    }
}


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

221

主题

3453

帖子

11

粉丝