51单片机中断与定时器实战:从按键控制到自动重装应用

C51单片机按键控制流水灯模式(定时器版本)以及定时器时钟 由前面我们讲过的定时器0的配置,我们给计数寄存器赋的初值是64535,每次溢出只需要1ms,所以每隔1ms,程序便会进入一次中断,这时如果我们想配置一个每隔0.5秒发生一次的程序,我们只需要进入500次中断即可,因此,我们定义了一个局部变量static unsigned int count(加static的原因是,count是一个局部变量,每次离开中断就会被销毁,下次进来时初值还是0,因此,static防止了count被销毁,保留了其初值,这也为后面累计500次中断做铺垫)。这便是定时器时钟的原理。 阅读详情

1. 中断与定时器基础:从零开始理解

大家好,我是老李,在嵌入式开发领域摸爬滚打了十多年,今天想和大家聊聊51单片机中断与定时器的实战应用。很多人刚接触单片机时,对中断和定时器总觉得云里雾里,其实只要用对方法,这些概念一点都不难。我会用最直白的语言,结合自己踩过的坑,带大家一步步掌握这个核心技术。

先说说中断是什么。想象一下,你正在看书,突然手机响了,你会先标记当前阅读的页面,然后接电话,接完后再回来继续看书。单片机的中断也是类似的机制——当有紧急事件发生时,CPU会暂停当前任务,先去处理中断事件,完成后再回来继续原来的工作。这种机制能大大提高系统的响应效率,尤其适合处理实时性要求高的任务,比如按键检测、数据采集等。

定时器则是单片机的“心脏”,它像一块精准的电子表,每隔固定时间就会产生一个信号。51单片机的定时器是16位的,也就是最大能计数65535次。当计数达到最大值时,就会溢出并触发中断。我们常用定时器来实现精确延时、PWM波形生成、频率测量等功能。

对于初学者,我建议先从外部中断和定时器中断入手。外部中断通常用于响应外部事件,比如按键按下、传感器信号变化等;定时器中断则更适合处理时间相关的任务。在实际项目中,这两者经常结合使用,比如用定时器实现按键消抖,再用外部中断捕获按键事件。

2. 外部中断实战:按键控制流水灯

2.1 电平触发模式实现交替闪烁

我们先来看一个最简单的例子:用按键触发外部中断,控制LED交替闪烁。这个实验虽然简单,但包含了外部中断的核心配置步骤。

首先,我们需要配置中断相关的寄存器。51单片机的外部中断0(INT0)对应P3.2引脚,外部中断1(INT1)对应P3.3引脚。通过设置IT0和IT1寄存器,可以选择中断触发方式:电平触发或边沿触发。电平触发是只要引脚为低电平就持续触发中断,边沿触发则是当引脚电平发生跳变(比如从高到低)时触发一次中断。

下面是一个典型的初始化代码:

#include <reg51.h>

void main() {
    EA = 1;    // 开启总中断
    EX0 = 1;   // 使能外部中断0
    IT0 = 1;   // 设置中断0为边沿触发(下降沿)
    
    while(1) {
        P2 = 0; // LED全亮
    }
}

void int0_isr() interrupt 0 {
    unsigned char i;
    for(i=0; i<5; i++) {
        P2 = 0x0F;  // 低4位亮,高4位灭
        delay_ms(200);
        P2 = 0xF0;  // 高4位亮,低4位灭
        delay_ms(200);
    }
}

这段代码实现了这样的功能:正常情况下所有LED都亮,当按下连接到INT0的按键时,LED会交替闪烁5次。这里使用了delay_ms函数实现延时,但在实际项目中,我建议用定时器代替软件延时,这样更精确且不占用CPU资源。

在Proteus中仿真时,要注意按键的接法。通常我们会给按键上拉电阻,确保平时保持高电平,按下时变为低电平。这样就能产生清晰的下陷沿信号,避免误触发。

2.2 多中断源优先级处理

现在我们来个复杂点的例子:两个按键分别控制不同的LED效果。这就要求我们处理多个中断源,并且要考虑中断优先级的问题。

51单片机有4个中断优先级,通过IP寄存器设置。如果不设置优先级,所有中断都是同级,当同时发生时,按自然优先级顺序响应。自然优先级从高到低是:外部中断0 > 定时器0 > 外部中断1 > 定时器1 > 串口中断。

#include <reg51.h>

#define uchar unsigned char

void delay_ms(unsigned int ms) {
    unsigned int i, j;
    for(i=0; i<ms; i++)
        for(j=0; j<123; j++);
}

void int0_isr() interrupt 0 {
    uchar i;
    for(i=0; i<10; i++) {
        P2 = 0x0F;
        delay_ms(200);
        P2 = 0xF0;
        delay_ms(200);
    }
}

void int1_isr() interrupt 2 {
    uchar i;
    for(i=0; i<10; i++) {
        P2 = 0xFF;
        delay_ms(200);
        P2 = 0x00;
        delay_ms(200);
    }
}

void main() {
    uchar led_pattern[] = {0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F};
    uchar i;
    
    EA = 1;
    EX0 = 1;
    EX1 = 1;
    IT0 = 1;
    IT1 = 1;
    IP = 0x00;  // 所有中断同级
    
    while(1) {
        for(i=0; i<8; i++) {
            P2 = led_pattern[i];
            delay_ms(200);
        }
    }
}

这个程序实现了三种LED显示模式:主程序中是流水灯效果,INT0触发时高低4位交替闪烁,INT1触发时全部LED闪烁。两个中断设置为相同优先级,采用轮询方式处理。

在实际开发中,我发现很多初学者容易忽略中断标志位的清除。51单片机的中断标志会在中断响应时自动清除,但有些情况下需要手动清除,特别是在电平触发模式下。如果中断处理不当,可能会出现中断重复响应或者无法响应的问题。

3. 定时器中断深入解析

3.1 定时器工作模式与初值计算

定时器是51单片机最强大的功能之一,理解它的工作原理至关重要。51单片机有两个定时器:T0和T1,每个定时器有4种工作模式,通过TMOD寄存器设置。

模式1是16位定时器模式,最常用。定时器从初值开始计数,每经过一个机器周期就加1,当计数值达到65535时溢出,并触发中断。机器周期与晶振频率有关,比如12MHz晶振时,机器周期为1μs。

定时器初值的计算很重要。假设我们要实现10ms的定时,晶振为12MHz,计算公式如下:

定时时间 = (65536 - 初值) × 机器周期
10000μs = (65536 - 初值) × 1μs
初值 = 65536 - 10000 = 55536

转换为十六进制就是0xD8F0,所以TH0=0xD8,TL0=0xF0。

下面是一个完整的定时器初始化示例:

void timer0_init() {
    TMOD |= 0x01;   // 设置T0为模式1
    TH0 = 0xD8;     // 10ms初值高8位
    TL0 = 0xF0;     // 10ms初值低8位
    ET0 = 1;        // 使能T0中断
    TR0 = 1;        // 启动T0
    EA = 1;         // 开启总中断
}

void timer0_isr() interrupt 1 {
    TH0 = 0xD8;     // 重装初值
    TL0 = 0xF0;
    // 这里添加定时处理代码
}

3.2 自动重装模式的应用

模式2是8位自动重装模式,特别适合产生精确的定时信号。在这种模式下,TLx作为计数器,THx存储重装值。当TLx溢出时,不仅会触发中断,还会自动将THx的值重装到TLx中,不需要手动干预。

这种模式特别适合产生串口通信的波特率。比如要产生9600bps的波特率,晶振11.0592MHz时,重装值计算为:

重装值 = 256 - 11059200 / 12 / 32 / 9600
       = 256 - 3 = 253 = 0xFD

配置代码:

void timer1_init() {
    TMOD |= 0x20;   // 设置T1为模式2
    TH1 = 0xFD;     // 9600bps重装值
    TL1 = 0xFD;
    ET1 = 0;        // 禁止T1中断(串口用)
    TR1 = 1;        // 启动T1
}

在实际项目中,我经常用模式2产生精确的PWM波形。比如要产生1kHz、占空比50%的方波,只需要在中断中翻转引脚电平即可,非常方便。

4. 计数器模式与硬件调试技巧

4.1 外部事件计数应用

定时器还可以作为计数器使用,计数外部引脚上的脉冲信号。T0计数输入在P3.4引脚,T1在P3.5引脚。每检测到一个下降沿,计数值就加1。

下面是一个计数按键次数的例子:

#include <reg51.h>

unsigned int count = 0;

void timer1_init() {
    TMOD |= 0x50;   // 设置T1为计数器模式1
    TH1 = 0xFF;     // 初值设置
    TL1 = 0xFC;     // 计数4次溢出
    ET1 = 1;
    TR1 = 1;
    EA = 1;
}

void timer1_isr() interrupt 3 {
    count++;
    if(count >= 4) {
        while(1) {
            P2 = 0xFF;
            delay_ms(500);
            P2 = 0x00;
            delay_ms(500);
        }
    }
}

void main() {
    timer1_init();
    while(1);
}

这个程序会在按键4次后让LED开始闪烁。但在实际测试中,我发现机械按键存在抖动问题,可能会导致多次计数。解决方法是在硬件上加入滤波电路,或者在软件中加入消抖处理。

4.2 Keil仿真与Proteus调试技巧

调试中断程序时,Keil的虚拟逻辑分析仪非常好用。它可以实时显示引脚的电平变化,帮助分析中断响应时机和波形质量。

使用步骤:

  1. 进入Debug模式
  2. 打开Logic Analyzer窗口
  3. 添加要观察的引脚(如P2.0、P2.1等)
  4. 运行程序,查看波形

在Proteus中仿真时,要注意元件的参数设置。比如LED的限流电阻通常取220Ω-1kΩ,按键要加上拉电阻。仿真过程中可以单步执行,观察中断响应过程。

我个人的经验是,先用Proteus仿真验证逻辑,再烧录到实际硬件测试。这样可以节省很多调试时间,特别是对中断时序要求严格的场合。

5. 中断编程优化与实战建议

5.1 优化中断服务程序

中断服务程序应该尽量简短,快速执行完毕。长时间的中断处理会影响系统实时性,甚至导致其他中断丢失。以下是一些优化建议:

首先,避免在中断中使用延时函数。延时会占用大量CPU时间,应该用定时器代替。比如需要定时闪烁LED时,可以在主循环中检查标志位,而不是在中断中直接控制。

其次,使用变量传递信息。中断服务程序只设置标志位,主循环根据标志位执行相应操作。这样能大大减少中断响应时间。

volatile bit flag = 0;

void int0_isr() interrupt 0 {
    flag = 1;  // 只设置标志位
}

void main() {
    while(1) {
        if(flag) {
            flag = 0;
            // 执行实际操作
        }
    }
}

使用volatile关键字很重要,它告诉编译器这个变量可能被意外修改,避免优化错误。

5.2 中断嵌套与优先级管理

51单片机支持中断嵌套,即高优先级中断可以打断低优先级中断的处理。通过IP寄存器设置优先级,但要注意合理规划,避免优先级反转等问题。

我的经验法则是:对实时性要求高的中断设高优先级,处理时间短的中断设高优先级。比如串口接收中断应该比按键中断优先级高,因为数据容易丢失。

void set_priority() {
    IP = 0x10;  // 设置串口中断为高优先级
    // 其他中断为低优先级
}

在实际项目中,我遇到过因为中断冲突导致系统死机的问题。后来发现是多个中断同时访问同一资源造成的。解决方法是用临界区保护共享资源:

void critical_section() {
    EA = 0;      // 关闭中断
    // 访问共享资源
    EA = 1;      // 开启中断
}

但要注意临界区时间不能太长,否则会影响中断响应。

6. 常见问题与解决方案

在多年开发中,我总结了一些常见的中断相关问题和解决方法:

第一个典型问题是中断不响应。可能的原因包括:未开启总中断EA、未使能特定中断、中断优先级设置错误、中断标志未清除等。调试时应该逐一检查这些寄存器设置。

第二个问题是中断响应不及时。可能是中断服务程序执行时间太长,或者中断嵌套太深。可以用逻辑分析仪测量中断响应时间,找出瓶颈。

第三个问题是中断重复触发。在电平触发模式下,如果中断源一直保持有效,会不断触发中断。应该在中断服务程序中处理完事件后,确保中断条件解除。

最后分享一个实际案例:我曾经用51单片机做智能家居控制器,需要同时处理按键、温度采集、显示刷新等多个任务。通过合理设置中断优先级,将实时性要求高的任务放在中断中,其他任务在主循环中处理,最终实现了流畅的用户体验。

中断的学习需要多动手实践,建议从简单的按键控制开始,逐步增加复杂度。遇到问题时,要耐心分析寄存器的状态,用好仿真调试工具。相信通过不断练习,你一定能掌握中断技术的精髓。

基于51单片机定时器和中断 51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 阅读详情

相关推荐

PROTEUS仿真环境下51单片机定时器控制LED闪烁的按键操作例程

在51单片机中,定时器/计数器是实现定时任务和计数功能的硬件模块。它们能够准确地按照预设的时间间隔或计数次数来触发事件,从而允许开发者在编程时执行精确的时间控制,如定时器中断、延时操作、外部事件计数等。51单片机的定时器/计数器支持四种工作模式,这些模式可以通过TMOD寄存器的相应位进行设置:模式0:13位定时器模式,只使用TLx的低5位和THx的全部8位进行计数,最大计数值为8191。模式1:16位定时器模式,使用THx和TLx的所有位进行计数,最大计数值为65535。

weixin_31869917的博客 996

51单片机——定时器和中断

(2)TF0或者TF1是计时器溢出标志,TR0或者TR1是计时器开始计时标志位,爆表后如果是定时器T0,TCON的bit5——TF0会置1,如果是定时器1,TCON的bit7——TF1会置1,如果是定时器查询的方式(无中断),需要手动用软件清0,如果定时器爆表用硬件中断方式,则不需要手动清0。(1)像闹钟一样,,根据时钟的输出信号,每隔一秒,计数单元的数字增一,当计数单元数值增加到设定的提醒时间时,计数单元会自动向系统发出中断申请,产生闹铃提醒,使程序跳转到中断服务函数去执行。(定时器0模式1—16位)

2301_77540313的博客 5266

51单片机PWM调速及按键控制实践指南

51单片机,作为微控制器的经典代表,其在工业控制领域拥有无可替代的地位,尤其在PWM(脉冲宽度调制)调速系统中发挥着核心作用。PWM调速技术利用脉冲宽度的变化来控制电机或其他设备的速度,具有较高的精确性和可靠性,广泛应用于各种自动化控制设备中。随着技术的不断发展,51单片机在PWM调速应用中的核心价值并未减弱。它的低成本、易于编程以及丰富的外设接口,使得它成为学习和实践PWM调速技术的理想平台。在本章节中,我们将深入探讨51单片机的基础知识,并分析其在PWM调速中的具体应用。

weixin_42351520的博客 1276

【51单片机】中断&定时器原理解析 + 使用

【51单片机】中断系统详解 + 定时器原理&寄存器详解 + 使用

m0_72563041的博客 5266

树莓派4B(Raspbian buster系统)安装ROS Melodic(附带网络配置和远程桌面控制说明)

树莓派4B(Raspbian buster系统)安装ROS Melodic(附带网络配置和远程桌面控制说明) 一、硬件准备 二、软件准备 三、安装前的准备工作 四、开始ROS的安装 五、运行小乌龟 由于坑比较多希望大家安装的时候尽量不要跳步进行,一定要等每一步运行成功了再往下进行。 一、硬件准备 1、树莓派4B一个 2、SD卡一张(最好是16G以上的我的是用的64G的) 3、显示器、键盘、鼠标 二、软件准备 1、Raspberryimage (写系统使用的) 链接:https://pan.baidu.com

weixin_45315065的博客 1万+

描述符链表(Descriptor Chain)是什么?

描述符链表是硬件加速数据传输的核心数据结构,通过链式描述符(包含地址、长度、控制标志等)实现DMA自动批量处理,显著降低CPU负载。其工作原理为:CPU初始化链表后,硬件按序处理每个描述符,完成自动跳转与中断通知。在网卡收包、NVMe存储等场景中应用广泛,优势包括批处理、低延迟和灵活调度。需注意内存对齐、缓存一致性等实现细节,优化手段包括预分配描述符池、环形缓冲区等。该技术是网络/存储领域提升吞吐量的关键方案。

guigenyi的专栏 773

独立按键控制流水灯及定时器时钟(基于51单片机)

本文主要帮助嵌入式小白了解定时器

axzy5863的博客 2724

别再只调颜色阈值了!优化K210色块追踪性能的5个关键参数与实战技巧

本文深入探讨了K210色块追踪性能优化的五大核心策略,包括图像预处理参数精细调控、find_blobs参数进阶配置、运动控制算法升级、硬件时序优化以及可视化调试系统构建。通过实战技巧和参数调整方法,帮助开发者提升K210在色块追踪项目中的识别稳定性和响应速度,适用于云台追踪等应用场景。

weixin_42531588的博客 225

51单片机-定时器&中断

中断系统是为使得CPU具有对外界紧急事件的实时处理能力而设置的中断存在优先级,传统51单片机只有2个优先级,在程序运行时,高优先级打断低优先级,再回到低优先级去处理传统51单片机有5个中断请求源,分别是外部中断0和1INT0和INT1)、定时器中断0和1T0和T1)和串口(UART)中断下图为中断系统的程序运行流程图下面是各个中断的中断号,中断号类似于函数定义,里面写入进中断需要完成的功能//外部中断0//外部中断1//定时器中断0//定时器中断1//串口中断。

m0_51319492的博客 4332

OpenCvSharp之利用海康相机采集图像并在pictureBox中显示

OpenCvSharp之利用海康相机采集图像并在pictureBox中显示 说明:OpenCvSharp版本为4.0 海康相机为黑白相机 实现功能:将海康相机采集的图像转成Mat,并在pictureBox中显示。 示例代码: Mat srcImage; private Mat CaptureImage() { int nRet; //MyCamera.MVCC_I...

Kevin_Sun777的博客 5501

S7-200SMART 的运动控制(一)向导配置具体步骤(图文)

S7-200SMART 的运动控制(一)向导配置具体步骤(图文)

Robot_PLC_HMI_Automation 3849

C51 单片机学习(二):定时器与中断系统

C51 单片机学习(二):定时器与中断系统

qq_42994487的博客 2551

36. 在 SAP Integration Suite 里打通入站 HTTP:iFlow 端点鉴权、角色授权与多节点 403 排障实战

本文探讨了SAP Cloud Integration中HTTP入站连接的认证与授权机制。在Cloud Foundry环境下,认证(证明身份)和授权(权限控制)需分开处理:认证可采用Basic、OAuth或mTLS等方式,授权则通过角色实现。文章详细解析了两种主流配置路径:基于IdP用户的Basic认证(需配置Role Collection)和基于OAuth Client/Service Instance的系统调用(通过Service Key管理权限)。特别指出ABAP系统在多节点环境下可能因cookie编码

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 320

51单片机中断与定时器实战:从外部触发到自动重装

本文深入解析51单片机中断与定时器实战应用,涵盖外部中断的边沿触发与按键消抖技巧,以及定时器的自动重装模式与初值计算。通过LED控制等实战案例,展示如何优化中断响应和实现低功耗设计,提升嵌入式系统开发效率。

ol789012345的博客 726

华为OD干了两个月,还是跑了

​本人工作了快13年,base南京。2024年2月份由于公司业务变动第一次拿到了公司发的大礼包,同时也面临着失业的问题,我对自己的技术还是很有信心的,但是,找了大概有一个多月时间,发现心意的工作的确不太好找,当然收到挺多家offer,就是薪资不太满意,外包也一直不想去,不过说实话外包给的薪资普遍要比自研的单位要高一些,最后为了钱还是进华为(既然选择外包那就选择好一些的吧),毕竟中年老男人工作不能断太久。

啊渊的专栏 1万+

Open3d Qt的环境配置

目前统一使用qt6配置,open3d中可视化功能目前使用vtk代替,语言为c++。

阁楼 919

51单片机--定时器与按键控制流水灯模式

对51单片机的介绍,和对定时器应用流水灯

m0_74068921的博客 4151

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

51单片机——定时器

定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。定时器作用:(1) 用于计时系统,可实现软件计时,或者使程序每隔一固定时间完成一项操作(2) 替代长时间的Delay,提高CPU的运行效率和处理速度 ()定时器个数: 3个 (TO、T1、T2),T0和T1与传统的51单片机兼容,T2是此型号单片机增加的资源。注意:定时器的资源和单片机的型号是关联在一起的,不同的型号可能会有不同的定时器个数和操作方式,但一般来说,TO和T1的操作方式是所有51单片机所共有的。

weixin_59334478的博客 5095

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

51单片机按键消抖:定时器采样+状态机实现

按键消抖是嵌入式人机交互的基础技术,其本质是解决机械触点弹跳引发的电平不稳定问题。原理上需通过时间窗口内多次采样与状态一致性比对,排除5–20ms典型弹跳干扰;技术价值在于兼顾实时性与确定性——避免delay阻塞主循环,同时确保每次物理动作仅触发一次有效事件。广泛应用于智能小车、工业控制、家电面板等需要高可靠性模式切换的场景。本文基于51单片机,采用1ms定时器驱动的8位移位采样寄存器与双稳态状态机判决,实现低资源(4字节RAM)、零阻塞、抗干扰强的按键驱动,支撑蓝牙遥控、红外避障、循迹行驶等多模式安全切换

weixin_42402664的博客 1050

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

51单片机学习-5定时器与中断

按键控制LED流水灯、定时器时钟

虎慕的博客 2763

江科大51单片机学习笔记之定时器与中断系统

江科大51单片机学习笔记,参照b站视频P17-P18

orange3211的博客 2245

51单片机定时器和中断(六)

51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。

m0_50562428的博客 2314

51单片机定时器中断实战:从配置到精准控制LED闪烁

本文详细介绍了51单片机定时器中断的配置与应用,从基本原理到实战代码,指导如何精准控制LED闪烁。通过配置TMOD、TCON等关键寄存器,计算初值并编写中断服务函数,实现高效的多任务处理,解决传统延时方法的局限性,提升单片机程序的实时性和准确性。

7up55的博客 914

51单片机定时器中断编程实战:从原理到应用案例

本文详细讲解51单片机定时器中断编程,从基本原理、工作模式与寄存器配置到初始化步骤和中断服务程序编写。通过LED定时闪烁、独立按键检测和流水灯控制三个实战案例,展示如何高效利用定时器中断提升程序效率,避免阻塞延迟,实现多任务处理。

ttt77的博客 910

51单片机基础-定时器中断

摘要:本文介绍了51单片机定时器中断的原理与应用。主要内容包括:定时器硬件工作原理、相关寄存器配置(TMOD、TH0/TL0等)、软件设计方法(初始化、中断服务函数),以及LED闪烁、数码管扫描、实时时钟等具体应用实现。通过定时器中断可实现精确的非阻塞时间控制,提高系统响应能力。文章还提供了常见问题解决方法和进一步学习建议,为串口通信等后续内容打下基础。

hazy1k的博客 1422

(7)普中A2 51单片机定时器,按键控制流水灯

定时器个数:3个(T0、T1、T2),T0和T1与传统的51单片机兼容,T2是此型号单片机增加的资源注意:定时器的资源和单片机的型号是关联在一起的,不同的型号可能会有不同的定时器个数和操作方式,但一般来说,T0和T1的操作方式是所有51单片机所共有的遇到一个新的单片机,可以查阅对应的手册,查看定时器的个数。

2403_86879992的博客 1513
上一篇: 深入解析RS232、RS485与TTL:串口通信协议与接口实战指南
下一篇: 基于Zynq7010的LVGL裸机移植实战:VDMA与DMA高效显示方案
gitlab7runner
博客等级 码龄4年 78粉丝 1747原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值