找回密码
 立即注册
楼主: nano

[STC屠龙刀]学习打卡日历/学习感悟 - 跟着冲哥学习 STC32G12K128

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:12
  • 最近打卡:2024-06-26 09:16:29

1

主题

11

回帖

91

积分

注册会员

积分
91
发表于 2024-6-4 20:53:40 | 显示全部楼层

[STC屠龙刀]学习打卡日历/学习感悟 - 第09集



今天学习的是数码管并复习了 LED 的封装代码。LED 的封装代码如下:


LED.h

  1. #ifndef __LED_H__
  2. #define __LED_H__
  3. #include "STC32G_Delay.h"
  4. #define LED_ON  0  // LED 灯打开的时候的值
  5. #define LED_OFF 1  // LED 灯关闭的时候的值
  6. /*!
  7.     \brief   初始化 LED
  8.         
  9.     \param[in]  none
  10.     \param[out] none
  11.     \retval     none
  12. */
  13. void led_init();
  14. /*!
  15.     \brief   为所有灯设置高低电平
  16.         
  17.     \param[in]  v[uint16] : 高电平(1), 低电平(0)
  18.     \param[out] none
  19.     \retval     none
  20. */
  21. void set_all_led(uint16 v);
  22. /*!
  23.     \brief   为指定索引的灯设置高低电平
  24.         
  25.     \param[in]  index[uint16] : 索引值, 取值范围(0...7)
  26.     \param[in]  value[uint16] : 高电平(1), 低电平(0)
  27.     \param[out] none
  28.     \retval     none
  29. */
  30. void set_led(uint16 index, uint16 value);
  31. /*!
  32.     \brief   打开指定索引的灯
  33.         
  34.     \param[in]  index[uint16] : 索引值, 取值范围(0...7)
  35.     \param[out] none
  36.     \retval     none
  37. */
  38. void turn_on_led(uint16 index);
  39. /*!
  40.     \brief   关闭指定索引的灯
  41.         
  42.     \param[in]  index[uint16] : 索引值, 取值范围(0...7)
  43.     \param[out] none
  44.     \retval     none
  45. */
  46. void turn_off_led(uint16 index);
  47. /*!
  48.     \brief   打开所有灯
  49.         
  50.     \param[in]  none
  51.     \param[out] none
  52.     \retval     none
  53. */
  54. void turn_on_all_led();
  55. /*!
  56.     \brief   关闭所有灯
  57.         
  58.     \param[in]  none
  59.     \param[out] none
  60.     \retval     none
  61. */
  62. void turn_off_all_led();
  63. /*!
  64.     \brief   LED 灯运行跑马灯或流水灯
  65.         
  66.     \param[in]  status  [u8] : 灯的状态, 0 或 1
  67.     \param[in]  start   [u16]: 起始索引, 取值范围[0, 7]
  68.     \param[in]  step    [u16]: 移动步长
  69.     \param[in]  flowing [u16]: 是否是流水灯, 1: 流水不灭, 0: 走马单亮
  70.     \param[out] none
  71.     \retval     none
  72. */
  73. void led_run(u8 status, u16 start, int step, u16 flowing);
  74. /*!
  75.     \brief   SOS 灯
  76.         
  77.     \param[in]  none
  78.     \param[out] none
  79.     \retval     none
  80. */
  81. void led_sos();
  82. #endif
复制代码


LED.c

  1. #include "LED.h"
  2. /*!
  3.     \brief   初始化 LED
  4.         
  5.     \param[in]  none
  6.     \param[out] none
  7.     \retval     none
  8. */
  9. void led_init() { P2M1 = 0x00, P2M0 = 0x00; }
  10. /*!
  11.     \brief   为所有灯设置高低电平
  12.         
  13.     \param[in]  v[uint16] : 高电平(1), 低电平(0)
  14.     \param[out] none
  15.     \retval     none
  16. */
  17. void set_all_led(uint16 v)  { P27 = P26 = P25 = P24 = P23 = P22 = P21 = P20 = v; };
  18. /*!
  19.     \brief   为指定索引的灯设置高低电平
  20.         
  21.     \param[in]  index[uint16] : 索引值, 取值范围(0...7)
  22.     \param[in]  value[uint16] : 高电平(1), 低电平(0)
  23.     \param[out] none
  24.     \retval     none
  25. */
  26. void set_led(uint16 index, uint16 value) {
  27.         switch(index) {
  28.                 case 0: P20 = value; break; case 1: P21 = value; break;
  29.                 case 2: P22 = value; break; case 3: P23 = value; break;
  30.                 case 4: P24 = value; break; case 5: P25 = value; break;
  31.                 case 6: P26 = value; break; case 7: P27 = value; break;
  32.         }
  33. }
  34. /*!
  35.     \brief   打开指定索引的灯
  36.         
  37.     \param[in]  index[uint16] : 索引值, 取值范围(0...7)
  38.     \param[out] none
  39.     \retval     none
  40. */
  41. void turn_on_led(uint16 index) { set_led(index, LED_ON); }
  42. /*!
  43.     \brief   关闭指定索引的灯
  44.         
  45.     \param[in]  index[uint16] : 索引值, 取值范围(0...7)
  46.     \param[out] none
  47.     \retval     none
  48. */
  49. void turn_off_led(uint16 index) { set_led(index, LED_OFF); }
  50. /*!
  51.     \brief   打开所有灯
  52.         
  53.     \param[in]  none
  54.     \param[out] none
  55.     \retval     none
  56. */
  57. void turn_on_all_led() { set_all_led(LED_ON); }
  58. /*!
  59.     \brief   关闭所有灯
  60.         
  61.     \param[in]  none
  62.     \param[out] none
  63.     \retval     none
  64. */
  65. void turn_off_all_led() { set_all_led(LED_OFF); }
  66. /*!
  67.     \brief   LED 灯运行跑马灯或流水灯
  68.         
  69.     \param[in]  status  [u8] : 灯的状态, 0 或 1
  70.     \param[in]  start   [u16]: 起始索引, 取值范围[0, 7]
  71.     \param[in]  step    [u16]: 移动步长
  72.     \param[in]  flowing [u16]: 是否是流水灯, 1: 流水不灭, 0: 走马单亮
  73.     \param[out] none
  74.     \retval     none
  75. */
  76. void led_run(u8 status, u16 start, int step, u16 flowing) {
  77.     u16 i = 0;
  78.         status = status ? 1 : 0;
  79.     for(i = start; i < 8 && i >= 0; i+= step) {
  80.         set_led(i, status);
  81.         delay_ms(10);
  82.         if(!flowing) {
  83.             turn_off_all_led();
  84.         }
  85.     }
  86. }
  87. /*!
  88.     \brief   SOS 灯
  89.         
  90.     \param[in]  none
  91.     \param[out] none
  92.     \retval     none
  93. */
  94. void led_sos() {
  95.         int i = 0;
  96.         unsigned int times = 0;
  97.         for(i = 0; i < 9; i++) {
  98.                 times = i < 3 || i > 5 ? 100 : 300;
  99.                 turn_on_all_led();
  100.                 delay_ms(times);
  101.                 turn_off_all_led();
  102.                 delay_ms(times);
  103.         }
  104. }
复制代码


main.c

  1. #include "stc_usb_auto_download.h"
  2. // ==============================================================================================
  3. // 数码管
  4. //
  5. // 外接拓展板引脚说明
  6. // · 使用屠龙刀的 P15、P16 和 P17 外接拓展板来做实验
  7. // · 拓展板的排针引脚 P44、P43 和 P42 分别连接数码管模块, 对饮模块的 DI、RCK 和 SCK
  8. // · 所以需要通过杜邦线将 P15 连接 P44、P16 连接 P43、P17 连接 P42
  9. // · 通过控制屠龙刀的 P15、P16 和 P17 的高低电平来实现数码管的数据显示
  10. // ==============================================================================================
  11. #include "LED.h"
  12. #define  DI      P15 // 数据输入  ( DI:P44)
  13. #define  RCK     P16 // 锁存寄存器(RCK:P43)
  14. #define  SCK     P17 // 移位寄存器(SCK:P42)
  15. static void delay_ms(unsigned int ms) {
  16.         unsigned int i;
  17.         do{
  18.                 i = MAIN_Fosc / 18000;
  19.                 while(--i);
  20.         }while(--ms);
  21. }
  22. void delay_1us(void) {
  23.         unsigned long edata i;
  24.         _nop_();
  25.         _nop_();
  26.         _nop_();
  27.         i = 598UL;
  28.         while (i) i--;
  29. }
  30. static unsigned char LED_TABLE[] = {
  31.         // 0         1         2        -> 9        (索引012...9)
  32.         0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,
  33.         // 0.  1. 2. -> 9.        (索引10,11,12....19)
  34.     0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,
  35.         // . -                                                (索引20,21)
  36.         0x7F, 0xBF,
  37.         // AbCdEFHJLPqU                (索引22,23,24....33)
  38.         0x88,0x83,0xC6,0xA1,0x86,0x8E,0x89,0xF1,0xC7,0x8C,0x98,0xC1
  39. };
  40. void nixie_tube_input_data(unsigned char dat) {
  41.         int i = 0;
  42.     for (i = 7; i >= 0; i--) {
  43.                 // 数据输入
  44.                 DI = (u8)((dat & (1 << i)) >> i);
  45.         // 移位
  46.         SCK = 0; delay_1us(); SCK = 1; delay_1us();
  47.     }
  48. }
  49. /*!
  50.     \brief    拓展板 - 数码管内容显示
  51.     \param[in]  num : 显示的内容, 控制显示的什么内容, 支持八位十六进制表示的值
  52.     \param[in]  idx : 数码管的位置, 控制显示哪几个显示
  53.     \param[out] none
  54.     \retval     none
  55. */
  56. void nixie_tube_show(unsigned char num, unsigned char idx) {
  57.         nixie_tube_input_data(num); // 输入内容
  58.         nixie_tube_input_data(idx); // 输入位置
  59.         
  60.         // 锁存
  61.         RCK = 0; delay_1us(); RCK = 1; delay_1us();
  62. }
  63. int main() {
  64.         u8 index = 0, length = 0;
  65.         auto_usb_hid_download();         // 开启自动下载
  66.         
  67.         P2M0  =  0x00, P2M1  =  0x00;    // 将共阳灯   P20...7     引脚设置为双向
  68.         P5M0 |=  0x10, P5M1 &=  0x10;    // 将蜂鸣器   P54         引脚设置为推挽
  69.         P3M0 &= ~0x08, P3M1 &= ~0x08;    // 将按键的   P33         引脚设置为准双向
  70.         P1M0 &= ~0xe0; P1M1 &= ~0xe0;    // 将数码管的 P15/P16/P17 引脚设置为准双向
  71.         turn_on_all_led();               // 测试开灯
  72.         delay_ms(5000);                  // 测试延迟 1s
  73.         turn_off_all_led();              // 测试关灯
  74.         
  75.         length = sizeof(LED_TABLE) / sizeof(LED_TABLE[0]);
  76.         
  77.     while (1) {
  78.                 nixie_tube_show(LED_TABLE[index++], 0xFF); // 测试数码管
  79.                 if(index > length - 1) {
  80.                         index = 0;
  81.                 }
  82.                 P20 = !P20;                                // 每秒切换一次 LED 灯状态
  83.                 delay_ms(1000);
  84.         }
  85. }
复制代码


小结:

虽然实现了点亮数码管的结果,但是还是存在根本性问题,那就是时间延迟的问题。我使用 STCAI-ISP 工具的软件延迟计算器生成的延迟函数,通过逻辑分析仪采集的结果并不是相匹配的时间。通过封装 LED 灯就能发现,使用库函数 STC32G_Delay.h 中的延迟函数效果也是不对的,所以我在怀疑是不是屠龙刀板子上没有晶振,但是我拿到的屠龙刀板子是缺少很多元件的。所以,就得不断调整 delay 函数中的数值,来匹配逻辑分析仪中接近期望值,从而实现相对符合期望的延迟效果。

附张效果图:

微信图片_20240604205102.png






回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:429
  • 最近打卡:2025-05-08 00:01:49
已绑定手机

19

主题

3196

回帖

4956

积分

论坛元老

积分
4956
发表于 2024-6-5 09:02:21 来自手机 | 显示全部楼层
这个是用595控制数码管吗
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:510
  • 最近打卡:2025-05-09 00:40:40
已绑定手机

1

主题

836

回帖

1529

积分

金牌会员

积分
1529
发表于 2024-6-5 09:39:33 | 显示全部楼层
靡不有初,鲜克有终
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:12
  • 最近打卡:2024-06-26 09:16:29

1

主题

11

回帖

91

积分

注册会员

积分
91
发表于 2024-6-5 14:19:37 | 显示全部楼层
so*** 发表于 2024-6-5 09:02
这个是用595控制数码管吗

是的,因为数码管引脚太多,采用 74HC595 来控制数码管的话,只需要三个引脚就能控制数码管,很方便。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:12
  • 最近打卡:2024-06-26 09:16:29

1

主题

11

回帖

91

积分

注册会员

积分
91
发表于 2024-6-5 21:38:57 | 显示全部楼层

[STC屠龙刀]学习打卡日历/学习感悟 - 第10集

本帖最后由 nano 于 2024-6-5 22:43 编辑



今天学习的依然是数码管,并完成了课后的作业。飞线太麻烦了。希望能早些得到实验箱。今日练习代码如下:


  1. #include "stc_usb_auto_download.h"
  2. // ==============================================================================================
  3. // 数码管 + 蜂鸣器
  4. //
  5. // 做一个简易时钟,功能如下:
  6. // 1.初始状态显示[00-00-00], 分别作为 时, 分, 秒
  7. // 2.每隔一秒钟, 秒+1, 一分钟, 分+1, 以此类推
  8. // 3.时间到达[00-00-30]的时候,蜂鸣响3秒钟表示闹钟
  9. //
  10. // 外接拓展板引脚说明
  11. // · 使用屠龙刀的 P15、P16 和 P17 外接拓展板来做实验
  12. // · 拓展板的排针引脚 P44、P43 和 P42 分别连接 74HC595 模块 , 对应模块的 DI、RCK 和 SCK 引脚
  13. // · 所以需要通过杜邦线将 P15 连接 P44、P16 连接 P43、P17 连接 P42
  14. // · 通过控制屠龙刀的 P15、P16 和 P17 的高低电平来控制移位寄存器进而实现数码管的数据显示
  15. // · 有源蜂鸣器模块连接屠龙刀的 P54 引脚, 低电平工作
  16. // ==============================================================================================
  17. #include "LED.h"
  18. #define  DI      P15 // 数据输入  ( DI:P44)
  19. #define  RCK     P16 // 锁存寄存器(RCK:P43)
  20. #define  SCK     P17 // 移位寄存器(SCK:P42)
  21. #define BIT(x)   (unsigned char)(0x01U << x)
  22. static void delay_ms(unsigned int ms) {
  23.         unsigned int i;
  24.         do{
  25.                 i = MAIN_Fosc / 20000;
  26.                 while(--i);
  27.         }while(--ms);
  28. }
  29. static void delay_1us(void) {
  30.         _nop_();
  31.         _nop_();
  32. //        _nop_();
  33. //        _nop_();
  34. }
  35. static unsigned char LED_TABLE[] = {
  36.         // 0         1         2        -> 9        (索引012...9)
  37.         0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,
  38.         // 0.  1. 2. -> 9.        (索引10,11,12....19)
  39.     0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,
  40.         // . -                                                (索引20,21)
  41.         0x7F, 0xBF,
  42.         // AbCdEFHJLPqU                (索引22,23,24....33)
  43.         0x88,0x83,0xC6,0xA1,0x86,0x8E,0x89,0xF1,0xC7,0x8C,0x98,0xC1
  44. };
  45. /*!
  46.     \brief    拓展板 - 移位寄存器数据输入
  47.     \param[in]  dat : 需要输入的数据
  48.     \param[out] none
  49.     \retval     none
  50. */
  51. void nixie_tube_input_data(unsigned char dat) {
  52.         char i = 0;
  53.     for (i = 7; i >= 0; i--) {
  54.                 DI = (u8)((dat & (1 << i)) >> i);           // 数据输入
  55.         SCK = 0; delay_1us(); SCK = 1; delay_1us(); // 移位
  56.     }
  57. }
  58. /*!
  59.     \brief    拓展板 - 数码管内容显示
  60.     \param[in]  num : 显示的内容, 控制显示的什么内容, 支持八位十六进制表示的值
  61.     \param[in]  idx : 数码管的位置, 控制显示哪几个显示
  62.     \param[out] none
  63.     \retval     none
  64. */
  65. void nixie_tube_show(unsigned char num, unsigned char idx) {
  66.         nixie_tube_input_data(num);                  // 输入内容
  67.         nixie_tube_input_data(idx);                  // 输入位置
  68.         RCK = 0; delay_1us(); RCK = 1; delay_1us();  // 锁存
  69. }
  70. /*!
  71.     \brief    拓展板 - 数码管显示时间
  72.     \param[in]  hour   : 小时数
  73.     \param[in]  minute : 分钟数
  74.     \param[in]  second : 秒钟数
  75.     \param[out] none
  76.     \retval     none
  77. */
  78. void nixie_tube_show_time(u16 hour, u16 minute, u16 second) {
  79.         u8 i = 0;
  80.        
  81.         i = hour / 10;
  82.         nixie_tube_show(LED_TABLE[i], BIT(0)); delay_ms(1);
  83.         i = hour % 10;
  84.         nixie_tube_show(LED_TABLE[i], BIT(1)); delay_ms(1);
  85.        
  86.         nixie_tube_show(0xBF, BIT(2));         delay_ms(1);
  87.        
  88.         i = minute / 10;
  89.         nixie_tube_show(LED_TABLE[i], BIT(3)); delay_ms(1);
  90.         i = minute % 10;
  91.         nixie_tube_show(LED_TABLE[i], BIT(4)); delay_ms(1);
  92.        
  93.         nixie_tube_show(0xBF, BIT(5));         delay_ms(1);
  94.        
  95.         i = second / 10;
  96.         nixie_tube_show(LED_TABLE[i], BIT(6)); delay_ms(1);
  97.         i = second % 10;
  98.         nixie_tube_show(LED_TABLE[i], BIT(7)); delay_ms(1);
  99.        
  100. }
  101. int main() {
  102.         u8 i = 0;
  103.         u16 hour = 0, minute = 0, second = 0;
  104.         auto_usb_hid_download();         // 开启自动下载
  105.        
  106.         P2M0  =  0x00, P2M1  =  0x00;    // 将共阳灯   P20...7     引脚设置为双向
  107.         P5M0 |=  0x10, P5M1 &=  0x10;    // 将蜂鸣器   P54         引脚设置为推挽
  108.         P3M0 &= ~0x08, P3M1 &= ~0x08;    // 将按键的   P33         引脚设置为准双向
  109.         P1M0 &= ~0xe0, P1M1 &= ~0xe0;    // 将数码管的 P15/P16/P17 引脚设置为准双向
  110.        
  111.        
  112.         P54 = 0;                         // 测试打开蜂鸣器
  113.         delay_ms(300);                   // 测试延迟 1s
  114.         P54 = 1;                         // 测试关闭蜂鸣器
  115.         turn_on_all_led();               // 测试开灯
  116.         delay_ms(5000);                  // 测试延迟 5s
  117.         turn_off_all_led();              // 测试关灯
  118.        
  119.         // hour = 12, minute = 34, second = 0;
  120.     while (1) {
  121.                 // 数码管显示时间
  122.                 nixie_tube_show_time(hour, minute, second);
  123.                 second++;
  124.                 if(second > 59) {
  125.                         second = 0;
  126.                         minute++;
  127.                         if(minute > 59) {
  128.                                 minute = 0;
  129.                                 hour++;
  130.                                 if(hour > 23) {
  131.                                         hour = 0;
  132.                                 }
  133.                         }
  134.                 }
  135.                
  136.                 // 时间到达[00-00-30]的时候,蜂鸣响3秒钟表示闹钟
  137.                 if(hour == 0 && minute == 0) {
  138.                         if(second >= 30 && second < 33) {
  139.                                 P54 = 0;
  140.                         } else {
  141.                                 P54 = 1;
  142.                         }
  143.                 }
  144.                
  145.                 P20 = !P20;     // 每秒切换一次 LED 灯状态, 表示正常工作
  146.                 delay_ms(1000);
  147.         }
  148. }
复制代码










回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:12
  • 最近打卡:2024-06-26 09:16:29

1

主题

11

回帖

91

积分

注册会员

积分
91
发表于 2024-6-6 21:32:08 | 显示全部楼层

[STC屠龙刀]学习打卡日历/学习感悟 - 第11集

本帖最后由 nano 于 2024-6-6 21:33 编辑



今天学习的是定时器,因为之前学习过 STC8H。所以,今天使用库函数来实现的定时器实验:


  1. #include "stc_usb_auto_download.h"
  2. // ==============================================================================================
  3. // 定时器
  4. // STC32G 系列单片机内部设置了 5 个 24 位定时器/计数器(8 位预分频+16 位计数)。
  5. // 5 个 16 位定时器 T0、T1、T2、T3 和 T4 都具有计数方式和定时方式两种工作方式。
  6. // ==============================================================================================
  7. #include "STC32G_Timer.h"
  8. #include "STC32G_GPIO.h"
  9. #include "STC32G_NVIC.h"
  10. #include "LED.h"
  11. void Timer_config(void) {
  12.         TIM_InitTypeDef                TIM_InitStructure;
  13.         TIM_InitStructure.TIM_Mode      = TIM_16BitAutoReload;        //指定工作模式,   TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask
  14.         TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T;                    //指定时钟源,     TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
  15.         TIM_InitStructure.TIM_ClkOut    = DISABLE;                                //是否输出高速脉冲, ENABLE或DISABLE
  16.         
  17.         TIM_InitStructure.TIM_Value     = (u16)(65536UL - (MAIN_Fosc / 10000UL));
  18.         // 以上配置中, TIM_InitStructure.TIM_Value 最终会转化位寄存器配置。
  19.         // 其中, 10000UL 表示的就是时钟周期, 意思就是这个 timer 回调1秒钟要调用 10000次计数。
  20.         
  21.         TIM_InitStructure.TIM_PS        = 0;                                        //8位预分频器(n+1), 0~255
  22.         TIM_InitStructure.TIM_Run       = ENABLE;                                //是否初始化后启动定时器, ENABLE或DISABLE
  23.         Timer_Inilize(Timer0,&TIM_InitStructure);                                //初始化Timer0          Timer0,Timer1,Timer2,Timer3,Timer4
  24.         NVIC_Timer0_Init(ENABLE,Priority_0);                //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
  25. }
  26. void Timer0_ISR_Handler (void) interrupt TMR0_VECTOR {
  27.         P20 = ~P20;
  28. }
  29. int main() {
  30.         auto_usb_hid_download();         // 开启自动下载
  31.         
  32.         Timer_config();
  33.         led_init();
  34.         turn_on_all_led();               // 测试开灯
  35.         delay_ms(5000);                  // 测试延迟 5s
  36.         turn_off_all_led();              // 测试关灯
  37.         
  38.     while (1) { }
  39. }
复制代码








回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:130
  • 最近打卡:2025-05-07 18:17:53

13

主题

164

回帖

375

积分

中级会员

积分
375
发表于 2024-7-24 10:53:31 | 显示全部楼层
加油!!!
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:130
  • 最近打卡:2025-05-07 18:17:53

13

主题

164

回帖

375

积分

中级会员

积分
375
发表于 2024-7-24 11:01:38 | 显示全部楼层
没板子可以学吗
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-9 04:53 , Processed in 0.138580 second(s), 98 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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