找回密码
 立即注册
查看: 54|回复: 4

一线制,单总线接口,【STC8H2K32UT】首次配置【一线制】,直接驱动WS2812

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:149
  • 最近打卡:2026-05-29 18:02:17

32

主题

1271

回帖

4827

积分

超级版主

积分
4827
发表于 昨天 18:02 | 显示全部楼层 |阅读模式
STC 最新研发的单片机型号STC8H2K32UT
一线制单总线接口,【STC8H2K32UT】首次配置,

一线制单总线】,直接驱动 WS2812  !!!
新型号 STC8H2K32UT 内部增加了4组硬件单总线接口

截图202605291909389286.jpg


单总线目前可支持的工作模式:
WS2812模式、
DS18B20 模式、DHT11 模式、
红外模式、
UARTX模式和UART模式。


截图202605291910266799.jpg
STC 最新推出一个新的单片机型号STC8H2K32UT
一线制单总线接口,【STC8H2K32UT】首次配置,

一线制单总线】,直接驱动 WS2812  !!!
这个新型号的STC单片机内部增加了4组硬件单总线接口
初步测试用单总线接口驱动WS2812灯带,功能正常


驱动核心代码如下:
  1. #include <stdio.h>
  2. #include <intrins.h>
  3. #include "def.h"
  4. #include "stc8h.h"
  5. #include "ow.h"
  6. #define FOSC            24000000UL
  7. #define BAUD            (65536 - FOSC/4/115200)
  8. #define T1MS            (65536 - FOSC / 1000)
  9. #define LED_NUM         12
  10. #define BUF_SIZE        (LED_NUM * 3)
  11. #define PSCR            0
  12. #define tRES            (60 * FOSC / 1000000 - 1)
  13. #define t0H             (0.35 * FOSC / 1000000 - 1)
  14. #define t0L             (0.70 * FOSC / 1000000 - 1)
  15. #define t1H             (0.70 * FOSC / 1000000 - 1)
  16. #define t1L             (0.35 * FOSC / 1000000 - 1)
  17. #define TEST_OW         1
  18. BYTE code COD[] =
  19. {
  20. //  G     R     B
  21.     0x00, 0xff, 0xff,   //紫
  22.     0xff, 0x00, 0xff,   //靛
  23.     0x00, 0x00, 0xff,   //蓝
  24.     0xff, 0x00, 0x00,   //绿
  25.     0xff, 0xff, 0x00,   //黄
  26.     0x80, 0xff, 0x00,   //橙
  27.     0x00, 0xff, 0x00,   //红
  28. };
  29. BOOL f1ms;
  30. BOOL trig;
  31. int count;
  32. int index;
  33. int offset;
  34. BYTE xdata BUF[BUF_SIZE];
  35. void main()
  36. {
  37.     int i;
  38.     P_SW2 = 0x80;
  39.    
  40.     P0M0 = 0xff; P0M1 = 0x00;
  41.     P1M0 = 0x00; P1M1 = 0x00;
  42.     P2M0 = 0x00; P2M1 = 0x00;
  43.     P3M0 = 0x40; P3M1 = 0x00;
  44.     P4M0 = 0x00; P4M1 = 0x00;
  45.     P5M0 = 0x00; P5M1 = 0x00;
  46.     SCON = 0x52;
  47.     AUXR = 0x40;
  48.     TMOD = 0x00;
  49.     TL1 = BAUD;
  50.     TH1 = BAUD >> 8;
  51.     TR1 = 1;
  52.     AUXR |= 0x80;
  53.     TL0 = T1MS;
  54.     TH0 = T1MS >> 8;
  55.     TR0 = 1;
  56.     ET0 = 1;
  57.     printf("STC8H2K32UT Test (OneWire WS2812 REG) !\n");
  58.     OW1_SetWS2812Mode();            //设置OW模式为WS2812模式
  59.     OW1_SetWS2812_RST(tRES);        //设置复位信号的低电平维持时间:(N+1)个OW时钟
  60.     OW1_SetWS2812_D0H(t0H);         //设置数据0的高电平维持时间:(N+1)个OW时钟
  61.     OW1_SetWS2812_D0L(t0L);         //设置数据0的低电平维持时间:(N+1)个OW时钟
  62.     OW1_SetWS2812_D1H(t1H);         //设置数据1的高电平维持时间:(N+1)个OW时钟
  63.     OW1_SetWS2812_D1L(t1L);         //设置数据1的低电平维持时间:(N+1)个OW时钟
  64.     OW1_SetClockDivider(PSCR);      //设置OW总线时钟分频(SYSclk/(PSCR+1))
  65.     OW1_SwitchP36();                //选择P36口为单总线数据口
  66.     OW1_ClearAllIntFlag();          //清除OW状态
  67.     OW1_EnableResetInt();           //使能OW复位中断
  68.     OW1_EnableTxInt();              //使能OW发送中断
  69.     OW1_Enable();                   //使能OW功能
  70.     EA = 1;
  71.     trig = 0;
  72.     count = 0;
  73.     index = 0;
  74.     offset = 0;
  75.     while (1)
  76.     {
  77.         if (f1ms)
  78.         {
  79.             f1ms = 0;
  80.             if (count++ >= 100)
  81.             {
  82.                 count = 0;
  83.                 for (i = 0; i < BUF_SIZE; i++)
  84.                     BUF[i] = 0;
  85.                 for (i = 0; i < sizeof(COD); i++)
  86.                     BUF[(i + offset * 3) % BUF_SIZE] = COD[i] / 16;
  87.                 if (++offset >= LED_NUM)
  88.                     offset = 0;
  89.                 OW1_ResetBus();                  //触发总线复位
  90.             }
  91.         }
  92.         if (trig)
  93.         {
  94.             trig = 0;
  95.             if (index < BUF_SIZE)
  96.             {
  97.                 OW1_WriteData(BUF[index++]);
  98.             }
  99.         }
  100.     }
  101. }
  102. void ow1_isr() interrupt OW1_VECTOR
  103. {
  104.     BYTE sr;
  105.     sr = OW1_ReadIntStatus();        //读取中断标志
  106.     OW1_ClearAllIntFlag();           //清除OW状态
  107.     if (OWn_CheckResetFlag(sr))
  108.     {
  109.         index = 0;
  110.         trig = 1;
  111.     }
  112.     if (OWn_CheckTxFlag(sr))
  113.     {
  114.         trig = 1;
  115.     }
  116. }
  117. void tm0_isr() interrupt 1
  118. {
  119.     f1ms = 1;
  120. }
复制代码




STC8H2K32UT-单总线-WS2812.zip

42.61 KB, 下载次数: 2

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:418
  • 最近打卡:2026-05-29 11:30:12

851

主题

1万

回帖

2万

积分

管理员

积分
23300
发表于 昨天 19:32 | 显示全部楼层
下面的STC新触摸MCU开始全面标配【一线制,单总线】
STC8T1K17-45I-TSSOP20
STC8T1K17-45I-TSSOP20

截图202605291928526515.jpg

下面的STC新触摸MCU开始全面标配【一线制,单总线】
STC8T2K32-45I-LQFP32
STC8T2K32-45I-QFN32
STC8T2K32-45I-TSSOP20


截图202605291929377984.jpg

截图202605291930258432.jpg



回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:418
  • 最近打卡:2026-05-29 11:30:12

851

主题

1万

回帖

2万

积分

管理员

积分
23300
发表于 昨天 19:16 | 显示全部楼层
截图202605291913576746.jpg


截图202605291914254630.jpg

截图202605291914553747.jpg

截图202605291915234557.jpg


截图202605291916065177.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:264
  • 最近打卡:2026-05-30 00:00:39
已绑定手机

33

主题

496

回帖

2130

积分

金牌会员

DIY玩家

积分
2130
发表于 昨天 19:17 | 显示全部楼层
可否用于单总线传感器接口
比如DS18B20
和DHT等等

点评

全支持  详情 回复 发表于 昨天 19:19
永怀这学徒心
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:418
  • 最近打卡:2026-05-29 11:30:12

851

主题

1万

回帖

2万

积分

管理员

积分
23300
发表于 昨天 19:19 | 显示全部楼层
狂热*** 发表于 2026-5-29 19:17
可否用于单总线传感器接口
比如DS18B20
和DHT等等

全支持
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-5-30 06:57 , Processed in 0.484888 second(s), 69 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表