找回密码
 立即注册
查看: 1358|回复: 18

实在是没办法了,弄了一晚上了还是弄不好 AI 帮人写的代码

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:352
  • 最近打卡:2025-05-03 00:27:19
已绑定手机

130

主题

1521

回帖

1865

积分

金牌会员

积分
1865
发表于 2024-6-29 23:35:15 | 显示全部楼层 |阅读模式
这段代码用 AI 编程写的.

试了很多遍,现在只能实现按键换挡,一直这样循环.
我的代码想要 按键换挡,但是如果3秒内没有换挡,
再次按下按键,就关闭LED.  最好是加上 记忆上次关闭时的档位.
下次开机直接进入上次关闭时的档位.
感觉是定时器中断没有 参与进来.
麻烦大神们帮看看把.苦恼死我了
  1. #include <STC8G.H>
  2. #include "intrins.h"
  3. sbit LED1=P3^3;
  4. sbit KEY1=P3^2;
  5. #define MAIN_Fosc 11059200UL
  6. #define ON 0
  7. #define OFF 1
  8. typedef unsigned char u8;
  9. typedef unsigned int u16;
  10. static u8 ld = 0;
  11. static u8 gear = 0;
  12. static u16 noShiftTime = 0; // 自上次换挡以来的时间  
  13. void pwm_init(void);
  14. void delayms(u16 ms);
  15. void timer0_init();
  16. void process_key_press();
  17. void update_led_brightness(u8 gear);
  18. void main() {
  19.     // I/O口配置
  20.     P0M0 = 0x00; P0M1 = 0x00;
  21.     P1M0 = 0x00; P1M1 = 0x00;
  22.     P2M0 = 0x00; P2M1 = 0x00;
  23.     P4M0 = 0x00; P4M1 = 0x00;
  24.     P5M0 = 0x00; P5M1 = 0x00;
  25.     P3M0 = 0x00; P3M1 = 0x00;
  26.     P_SW2=0x80;
  27.     while(1) {
  28.                 pwm_init();
  29.                timer0_init();  
  30.         process_key_press();
  31.         update_led_brightness(gear);
  32.         delayms(10);
  33.     }
  34. }
  35. void process_key_press() {
  36.     if (KEY1 == 0) {
  37.         delayms(10); // 去抖动延时
  38.         if (KEY1 == 0) {
  39.             if (noShiftTime >= 300) {
  40.                 ld = 0; // 关闭LED
  41.                 noShiftTime = 0;
  42.             } else {
  43.                 gear = (gear + 1) % 4; // 切换档位
  44.                 while (!KEY1); // 等待按钮释放
  45.                 noShiftTime = 0;
  46.             }
  47.         }
  48.     }
  49. }
  50. void update_led_brightness(u8 gear) {
  51.     switch (gear) {
  52.         case 0:
  53.             ld = 0;
  54.             break;
  55.         case 1:
  56.             ld = 15;
  57.             break;
  58.         case 2:
  59.             ld = 135;
  60.             break;
  61.         case 3:
  62.             ld = 255;
  63.             break;
  64.     }
  65. }
  66. void pwm_init(void)
  67. {
  68.         
  69.     CCON = 0x00;
  70.     CMOD = 0x08;
  71.     CL = 0x00;
  72.     CH = 0x00;
  73.     CCAPM1 = 0x42;
  74.     PCA_PWM1 = 0x00;
  75.     CCAP1L = ld;                  
  76.     CCAP1H = ld;
  77.         CR=1;        
  78. //        while(1);
  79. }
  80. void Timer0_Init(void)                //1毫秒@11.0592MHz
  81. {
  82.         AUXR |= 0x80;                        //定时器时钟1T模式
  83.         TMOD &= 0xF0;                        //设置定时器模式
  84.         TMOD |= 0x01;                        //设置定时器模式
  85.         TL0 = 0xCD;                                //设置定时初始值
  86.         TH0 = 0xD4;                                //设置定时初始值
  87.         TF0 = 0;                                //清除TF0标志
  88.         TR0 = 1;                                //定时器0开始计时
  89.         ET0 = 1;
  90.         EA = 1;
  91. }
  92.   
  93. void Timer0_ISR() interrupt 1 {  
  94.     noShiftTime++;
  95.     if (noShiftTime >= 300  ) {   
  96.         noShiftTime = 0;
  97.     }  
  98. }  
  99. void delayms(u16 ms)
  100. {
  101.         u16 i;
  102.         do{
  103.                 i = MAIN_Fosc /10000;
  104.                 while(--i);
  105.         }while(--ms);
  106. }
复制代码



回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:460
  • 最近打卡:2025-05-03 07:38:35
已绑定手机
已实名认证

110

主题

2224

回帖

5470

积分

版主

积分
5470
发表于 2024-6-30 01:42:46 | 显示全部楼层
你首先是你的定时器,不可以一直开着,这样就没有计时3s的意义了。
这里有一种方式,就是采用自减操作。中断先判断变量是否为0,不为零就自减一次,为零就不操作。
需要定时的地方(按键按下后)赋予延时值3s,然后再判断3s是否归零就可以了。档位需要从1开始记,这样初始化为0,方便判断第一次按下,防止直接进入关闭
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:352
  • 最近打卡:2025-05-03 00:27:19
已绑定手机

130

主题

1521

回帖

1865

积分

金牌会员

积分
1865
发表于 2024-6-30 08:02:26 | 显示全部楼层
王*** 发表于 2024-6-30 01:42
你首先是你的定时器,不可以一直开着,这样就没有计时3s的意义了。
这里有一种方式,就是采用自减操作。中 ...

我也怀疑是定时器的问题,
我按照你的方案再试试.看看怎么样
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:352
  • 最近打卡:2025-05-03 00:27:19
已绑定手机

130

主题

1521

回帖

1865

积分

金牌会员

积分
1865
发表于 2024-6-30 08:19:55 | 显示全部楼层
王*** 发表于 2024-6-30 01:42
你首先是你的定时器,不可以一直开着,这样就没有计时3s的意义了。
这里有一种方式,就是采用自减操作。中 ...

这是修改后的代码,还是不行.
  1. #include <STC8G.H>
  2. #include "intrins.h"
  3. sbit LED1=P3^3;
  4. sbit KEY1=P3^2;
  5. #define MAIN_Fosc 11059200UL
  6. #define ON 0
  7. #define OFF 1
  8. typedef unsigned char u8;
  9. typedef unsigned int u16;
  10. static u8 ld = 0;
  11. static u8 gear = 0;
  12. static u16 noShiftTime = 0; // 自上次换挡以来的时间  
  13. static u8 timerStarted = OFF; // 标记定时器是否已启动
  14. void sysini();
  15. void pwm_init(void);
  16. void delayms(u16 ms);
  17. void Timer0_Init();
  18. void process_key_press();
  19. void update_led_brightness(u8 gear);
  20. void main() {
  21.         sysini();
  22. //   Timer0_Init();
  23.     EA = 1; // 开启全局中断
  24.     P_SW2=0x80;
  25.     while(1) {
  26.         pwm_init();
  27.         process_key_press();
  28.         update_led_brightness(gear);
  29.         delayms(10);
  30.     }
  31. }
  32. void sysini() {
  33.     P0M0 = 0x00; P0M1 = 0x00;
  34.     P1M0 = 0x00; P1M1 = 0x00;
  35.     P2M0 = 0x00; P2M1 = 0x00;
  36.     P4M0 = 0x00; P4M1 = 0x00;
  37.     P5M0 = 0x00; P5M1 = 0x00;
  38.     P3M0 = 0x00; P3M1 = 0x00;
  39. }
  40. void process_key_press() {
  41.     static u8 firstPress = ON; // 标记第一次按键按下
  42.     if (KEY1 == 0) {
  43.         delayms(10); // 去抖动延时
  44.         if (KEY1 == 0) {
  45.             if (firstPress) {
  46.                 Timer0_Init(); // 第一次按键按下时启动定时器
  47.                 firstPress = OFF;
  48.             }
  49.             
  50.             if (noShiftTime >= 3000) {
  51.                 ld = 0; // 关闭LED
  52.                 noShiftTime = 0;
  53.             } else {
  54.                 gear = (gear + 1) % 4; // 切换档位
  55.                 while (!KEY1); // 等待按钮释放
  56.                 noShiftTime = 0;
  57.             }
  58.         }
  59.     }
  60. }
  61. void update_led_brightness(u8 gear) {
  62.     switch (gear) {
  63.         case 0:
  64.             ld = 0;
  65.             break;
  66.         case 1:
  67.             ld = 15;
  68.             break;
  69.         case 2:
  70.             ld = 135;
  71.             break;
  72.         case 3:
  73.             ld = 255;
  74.             break;
  75.     }
  76. }
  77. void pwm_init(void) {
  78.     CCON = 0x00;
  79.     CMOD = 0x08;
  80.     CL = 0x00;
  81.     CH = 0x00;
  82.     CCAPM1 = 0x42;
  83.     PCA_PWM1 = 0x00;
  84.     CCAP1L = ld;
  85.     CCAP1H = ld;
  86.     CR=1;
  87. }
  88. void Timer0_ISR() interrupt 1 {
  89.     if (timerStarted) { // 只有当定时器已启动时才递增计数器
  90.         TL0 = 0xCD; // 设置定时初始值
  91.         TH0 = 0xD4; // 设置定时初始值
  92.         noShiftTime++;
  93.         if (noShiftTime >= 3000) {
  94.             noShiftTime = 0;
  95.         }
  96.     }
  97. }
  98. void Timer0_Init(void) { // 1毫秒@11.0592MHz
  99.     AUXR |= 0x80; // 定时器时钟1T模式
  100.     TMOD &= 0xF0; // 设置定时器模式
  101.     TMOD |= 0x01; // 设置定时器模式
  102.     TL0 = 0xCD; // 设置定时初始值
  103.     TH0 = 0xD4; // 设置定时初始值
  104.     TF0 = 0; // 清除TF0标志
  105.     TR0 = 1; // 定时器0开始计时
  106.     ET0 = 1;
  107.     timerStarted = ON; // 标记定时器已启动
  108. }
  109. void delayms(u16 ms) {
  110.     u16 i;
  111.     do{
  112.         i = MAIN_Fosc /10000;
  113.         while(--i);
  114.     }while(--ms);
  115. }
复制代码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:338
  • 最近打卡:2025-04-25 16:31:21
已绑定手机

14

主题

600

回帖

2199

积分

荣誉版主

积分
2199
发表于 2024-6-30 12:10:13 | 显示全部楼层
代码简化一下,按下按键就
判断 noShiftTime 是不是超过3s,
如果超过,关闭,
没有超过 noShiftTime = 1,

定时器中断里面这样写:

if(noShiftTime) {
    noShiftTime ++;
}

if(noShiftTime >=3000){
    noShiftTime = 0;
}
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:352
  • 最近打卡:2025-05-03 00:27:19
已绑定手机

130

主题

1521

回帖

1865

积分

金牌会员

积分
1865
发表于 2024-6-30 13:01:19 | 显示全部楼层
xiangz*** 发表于 2024-6-30 12:10
代码简化一下,按下按键就
判断 noShiftTime 是不是超过3s,
如果超过,关闭,

按照您给的代码写了.
还是不行,和之前一样,不能三秒后按键关闭led
  1. #include <STC8G.H>
  2. #include "intrins.h"
  3. sbit LED1=P3^3;
  4. sbit KEY1=P3^2;
  5. #define MAIN_Fosc 11059200UL
  6. #define ON 0
  7. #define OFF 1
  8. typedef unsigned char u8;
  9. typedef unsigned int u16;
  10. static u8 ld = 0;
  11. static u8 gear = 0;
  12. static u16 noShiftTime = 0; // 自上次换挡以来的时间  
  13. void pwm_init(void);
  14. void delayms(u16 ms);
  15. void Timer0_Init(void);
  16. void process_key_press();
  17. void update_led_brightness(u8 gear);
  18. void main() {
  19.     // I/O口配置               
  20.         Timer0_Init();
  21.     P0M0 = 0x00; P0M1 = 0x00;
  22.     P1M0 = 0x00; P1M1 = 0x00;
  23.     P2M0 = 0x00; P2M1 = 0x00;
  24.     P4M0 = 0x00; P4M1 = 0x00;
  25.     P5M0 = 0x00; P5M1 = 0x00;
  26.     P3M0 = 0x00; P3M1 = 0x00;
  27.     P_SW2=0x80;
  28.         EA=1;
  29.     while(1) {
  30.                 pwm_init();
  31.             process_key_press();
  32.         update_led_brightness(gear);
  33.         delayms(10);
  34.     }
  35. }
  36. void process_key_press() {
  37.     if (KEY1 == 0) {
  38.         delayms(10); // 去抖动延时
  39.         if (KEY1 == 0) {
  40.             if (noShiftTime >= 3000) {
  41.                 ld = 0; // 关闭LED
  42.                 noShiftTime = 0;
  43.             } else {
  44.                 gear = (gear + 1) % 4; // 切换档位
  45.                 while (!KEY1); // 等待按钮释放
  46.                 noShiftTime = 0;
  47.             }
  48.         }
  49.     }
  50. }
  51. void update_led_brightness(u8 gear) {
  52.     switch (gear) {
  53.         case 0:
  54.             ld = 0;
  55.             break;
  56.         case 1:
  57.             ld = 15;
  58.             break;
  59.         case 2:
  60.             ld = 135;
  61.             break;
  62.         case 3:
  63.             ld = 255;
  64.             break;
  65.     }
  66. }
  67. void pwm_init(void)
  68. {
  69.         
  70.     CCON = 0x00;
  71.     CMOD = 0x08;
  72.     CL = 0x00;
  73.     CH = 0x00;
  74.     CCAPM1 = 0x42;
  75.     PCA_PWM1 = 0x00;
  76.     CCAP1L = ld;                  
  77.     CCAP1H = ld;
  78.         CR=1;        
  79. //        while(1);
  80. }
  81. void Timer0_Init(void)                //1毫秒@11.0592MHz
  82. {
  83.         AUXR |= 0x80;                        //定时器时钟1T模式
  84.         TMOD &= 0xF0;                        //设置定时器模式
  85.         TMOD |= 0x01;                        //设置定时器模式
  86.         TL0 = 0xCD;                                //设置定时初始值
  87.         TH0 = 0xD4;                                //设置定时初始值
  88.         TF0 = 0;                                //清除TF0标志
  89.         TR0 = 1;                                //定时器0开始计时
  90.         ET0 = 1;
  91.         EA = 1;
  92. }
  93.   
  94. void Timer0_ISR() interrupt 1 {  
  95.         if(noShiftTime) {
  96.     noShiftTime ++;
  97. }
  98. if(noShiftTime >=3000){
  99.     noShiftTime = 0;
  100. }
  101. }  
  102. void delayms(u16 ms)
  103. {
  104.         u16 i;
  105.         do{
  106.                 i = MAIN_Fosc /10000;
  107.                 while(--i);
  108.         }while(--ms);
  109. }
复制代码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:338
  • 最近打卡:2025-04-25 16:31:21
已绑定手机

14

主题

600

回帖

2199

积分

荣誉版主

积分
2199
发表于 2024-6-30 13:47:39 | 显示全部楼层
本帖最后由 xiangzichen 于 2024-6-30 16:31 编辑

截图202406301347309784.jpg
这里是不是应该 是 =1

截图202406301631258993.jpg

还有这里,貌似应该是3000
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:294
  • 最近打卡:2025-03-06 09:25:41

8

主题

318

回帖

1835

积分

金牌会员

积分
1835
发表于 2024-6-30 14:06:03 | 显示全部楼层
noShiftTime 要加限制而不是清零

if(noShiftTime <3000)noShiftTime ++;
这样noShiftTime 就不会超过3000也不会溢出
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:365
  • 最近打卡:2025-05-02 00:20:03

6

主题

319

回帖

2206

积分

金牌会员

积分
2206
发表于 2024-6-30 14:25:45 | 显示全部楼层
本帖最后由 网老四 于 2024-6-30 15:15 编辑

//以下是程序控制框架,细节需要根据实际情况修改添加


void main(void)
{
        u16 count;           //延时计数器
        
        while(1)
        {
                if(key_ON)
                {
                        if(count<3000)  //若3s内再次按键
                        {
                                (LED_gear<3)?(LED_gear++):(LED_gear=0);   //循环调亮度档位
                                LED_ON;    //开灯
                        }
                        else        //若3s后再按键
                        {
                                if(LED_ON)  //若原来开灯状态
                                {
                                    LED_gear=0;        //微亮档位
                                    LED_OFF;            //关灯
                               }
                               else   LED_ON;          //若原来关灯状态,以原来亮度档位开灯
                         }
                        count=0;  //清计数器
                        while(key_ON);   //等按键释放,防止重复响应
                }
                这里插入根据档位设置LED驱动PWM值的代码或函数

                delay_ms(1);  //1ms延时
                (count<3000)?(count++):(count=3000);   //计数器累加并限幅
        }
        
}
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:417
  • 最近打卡:2025-04-30 21:39:09
已绑定手机

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2024-6-30 22:47:49 | 显示全部楼层
本帖最后由 晓飛飛 于 2024-7-1 00:12 编辑

目前AI对问题的理解能力还是差了点,我按你的要求手搓了一点代码,可以实现5档PWM调节,实测可以的,你参考一下。
大概花了我二十分钟搞这个,还是有点不熟练。


  1. /*
  2. 本例程基于STC8H8K64U-QFN32核心板编写
  3. 使用PWM4_2对应的P2.6和P2.7驱动板载LED指示灯
  4. */
  5. #include "stc8h.h"
  6. #include "intrins.h"
  7. #define         MAIN_Fosc        24000000L
  8. unsigned char PWM_SAVE;
  9. sbit key = P3^2;
  10. bit key_flag;
  11. unsigned char PWM_MODE;
  12. unsigned char time_out;
  13. void PWM_init(void)
  14. {        
  15.         PWMA_CCER2 = 0x00;                          //写CCMRx前必须先清零CCERx关闭通道
  16.     PWMA_CCMR4 = 0x60;                          //设置CC1为PWMA输出模式
  17.         PWMA_PS        = 0x40;
  18.         
  19.     //PWMA_CCER1 = 0x01;                          //使能CC1通道正极
  20.         //PWMA_CCER1 = 0x05;                          //使能CC1通道双极
  21.         PWMA_CCER2 = 0x50;                          //使能CC4通道双极
  22.         //PWMA_CCR1 = (MAIN_Fosc / fq / 2) - 1;        //设置占空比时间  1~65535
  23.         PWMA_CCR4 = 0;
  24.     PWMA_ARR = 12000;             //设置周期时间        1~65535
  25.     //PWMA_ENO = 0x01;                            //使能PWM1P端口输出
  26.         //PWMA_ENO = 0x03;                            //使能PWM1P+N端口输出
  27.         PWMA_ENO = 0xC0;                            //使能PWM4P+N端口输出
  28.         PWMA_PSCR = 0;                                                                //PWM时钟预分频寄存器 0~65535        
  29.     PWMA_BKR = 0x80;                            //使能主输出
  30.     PWMA_CR1 = 0x01;                            //开始计时               
  31. }
  32. void PWM_updata(unsigned char duty)    //duty取值0~100,duty = 0时,关闭输出,PWM端口释放为普通IO
  33. {
  34.     if(duty > 0)   //
  35.     {
  36.         PWMA_CCR4 = duty * 120;
  37.         PWMA_ENO = 0xC0;
  38.         PWMA_BKR = 0x80;                            //使能主输出
  39.         PWMA_CR1 = 0x01;                            //开始计时
  40.     }
  41.     else
  42.     {
  43.         PWMA_BKR = 0x00;                            //关主输出
  44.         PWMA_CR1 = 0x00;                            //停止计时
  45.         PWMA_ENO &= ~0xC0;    //关闭PWM端口
  46.         P26 = 1;P27 = 1;
  47.     }
  48. }
  49. void Timer4_Isr(void) interrupt 20
  50. {
  51.         static unsigned char key_sta;
  52.         
  53.         switch(key_sta)                //按键检测状态机
  54.         {
  55.                 case 0:
  56.                         if (key == 0) key_sta++;  //如果有按键 跳下一个模式
  57.                 break;
  58.                 case 1:
  59.                         if (key == 0) key_sta++;  //如果持续按键 跳下一个模式
  60.                         else key_sta = 0;
  61.                 break;
  62.                 case 2:
  63.                         if (key == 1) key_sta++;  //如果按键释放 跳下一个模式
  64.                 break;               
  65.                 case 3:
  66.                         key_flag = 1;
  67.                         key_sta = 0;
  68.                 break;        
  69.                 default:
  70.                         key_sta = 0;
  71.                 break;
  72.         }
  73.         if (time_out < 60)        time_out++;   //50ms x 60 = 3000ms = 3秒,这里是超时计数器
  74. }
  75. void Timer4_Init(void)                //50毫秒@24.000MHz
  76. {
  77.         TM4PS = 0x01;                        //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
  78.         T4T3M &= 0xDF;                        //定时器时钟12T模式
  79.         T4L = 0xB0;                                //设置定时初始值
  80.         T4H = 0x3C;                                //设置定时初始值
  81.         T4T3M |= 0x80;                        //定时器4开始计时
  82.         IE2 |= 0x40;                        //使能定时器4中断
  83. }
  84. void main()
  85. {
  86.         EAXSFR();   //
  87.     P0M0 = 0x00; P0M1 = 0x00;
  88.     P1M0 = 0x00; P1M1 = 0x00;
  89.     P2M0 = 0x00; P2M1 = 0x00;
  90.     P3M0 = 0x00; P3M1 = 0x00;
  91.     P4M0 = 0x00; P4M1 = 0x00;
  92.     P5M0 = 0x00; P5M1 = 0x00;
  93.     P6M0 = 0x00; P6M1 = 0x00;
  94.     P7M0 = 0x00; P7M1 = 0x00;
  95.         PWM_init();
  96.         Timer4_Init();
  97.         EA = 1;
  98.     while(1)
  99.         {
  100.                 if(key_flag)   //如果有按键事件
  101.                 {
  102.                         key_flag = 0;  //清按键标记
  103.                         if (time_out < 60)  //按键还没超时
  104.                         {
  105.                                 PWM_MODE++;
  106.                                 if(PWM_MODE > 5) PWM_MODE = 1;
  107.                                 PWM_updata(PWM_MODE*20);
  108.                                 time_out = 0;
  109.                         }
  110.                         else            //按键超时了
  111.                         {
  112.                                 if(PWM_MODE)        //有输出状态时关闭输出
  113.                                 {
  114.                                         PWM_SAVE = PWM_MODE;  //保存当前状态 //可以移植代码保存到EEPROM
  115.                                         PWM_MODE = 0;
  116.                                         PWM_updata(0);
  117.                                 }
  118.                                 else                        //关闭状态时恢复之前的PWM
  119.                                 {
  120.                                         if(PWM_SAVE == 0) PWM_SAVE = 1;  //首次按键启动最低亮度
  121.                                         PWM_MODE = PWM_SAVE;       //恢复之前的PWM //可以移植代码从EEPROM读取
  122.                                         time_out = 0;
  123.                                         PWM_updata(PWM_MODE*20);
  124.                                 }
  125.                         }
  126.                 }
  127.         }
  128. }
复制代码




睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 15:12 , Processed in 0.604359 second(s), 110 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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