[DemoCode下载] MS51 SPI 实现 ARGB LED 彩虹灯灯效

[复制链接]
 楼主| zhuomuniao110 发表于 2025-5-24 11:04 | 显示全部楼层 |阅读模式
GB, LED, RGB, pi, s51
EC_MS51_ARGB_RainBow_Wave_Effect_V1.00.zip (1.46 MB, 下载次数: 2)
90787683136ed0e261.png
程序中设定系统时钟HIRC 为24 MHz 以及SPI 时钟除频值为8,由此可计算出SPI 时钟速率为 3 MHz,这代表一个SPI 时钟为 0.333 us。换句话说,逻辑’0’ 映像为SPI 位样式为‘1000’; 逻辑’1’ 映像为SPI 位样式为‘1110’,亦即3 个字节的RGB 数据格式可转化成12 个字节的SPI 数据格式。
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2020 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/

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

  10. #include "MS51_32K.h"
  11. #include "Nuvoton_Stripe.h"

  12. /* Data Flash */
  13. #define Addr_DataFlash 0x3F80



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

  18.     /* Add time counter */
  19.     TOPDOWNTimeCounter++;

  20.     _pop_(SFRS);
  21. }

  22. void Timer3_1ms_initial(void)
  23. {
  24.     SFRS = 0x00;
  25.     T3CON &= 0xF8;
  26.     clr_T3CON_TF3;
  27.     RL3 = 0x40;
  28.     RH3 = 0xA2;
  29.     //    RH3 = 0x82;
  30.     set_T3CON_TR3;
  31.     set_EIE1_ET3;
  32.     set_IE_EA;
  33. }

  34. void SPI_Init()
  35. {
  36.     set_SPSR_DISMODF;                                // SS General purpose I/O ( No Mode Fault )
  37.     clr_SPCR_SSOE;

  38.     clr_SPCR_LSBFE;                                  // MSB first

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

  41.     set_SPCR_MSTR;                                   // SPI in Master mode
  42.     SPICLK_FSYS_DIV8;                                // Select SPI clock
  43.     set_SPCR_SPIEN;                                  // Enable SPI function
  44.     clr_SPSR_SPIF;
  45. }

  46. void main(void)
  47. {
  48.     MODIFY_HIRC(HIRC_24);

  49.     /* Set LED output */
  50.     P00 = 1;
  51.     P00_INPUT_MODE;
  52.     ENABLE_P00_PULLDOWN;

  53.     SPI_Init();

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


  56.     /* Init LED to all disable */
  57.     Disable_TOPDOWN();
  58.     SPI_Send();

  59.     while (1)
  60.     {

  61.         /* Control LED */
  62.         {
  63.             RainbowWave_TOPDOWN();
  64.             SPI_Send();
  65.         }
  66.     }
  67. }


您需要登录后才可以回帖 登录 | 注册

本版积分规则

232

主题

3495

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部