You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C语言编写上升沿计数器?求上升沿检测与计数实现方法

上升沿检测与脉冲计数的C语言实现方案

核心原理

上升沿是数字信号从低电平(通常为0)跳变为高电平(通常为1)的瞬间——这是脉冲计数的唯一有效触发点。要准确检测,必须持续跟踪上一次的信号状态,通过对比当前与历史状态的变化来判定上升沿。

实现思路

  • 维护一个变量保存上一次的输入信号状态(必须在多次检测中保留值,不能每次初始化)
  • 实时读取当前输入的电平状态
  • 触发条件:当当前状态为高电平,且上一次状态为低电平时,判定为一次上升沿,计数器加1
  • 更新上一次状态为当前状态,进入下一轮检测

代码示例

模拟测试代码(验证4个脉冲计数)

以下代码模拟了包含4个完整脉冲的输入序列,运行后会输出总计数为4:

#include <stdio.h>

int main() {
    // 模拟脉冲序列:0=低电平,1=高电平,4个完整脉冲(0->1->0为一个脉冲)
    int pulse_sequence[] = {0, 1, 0, 1, 0, 1, 0, 1, 0};
    int sequence_len = sizeof(pulse_sequence) / sizeof(pulse_sequence[0]);
    
    int last_state = 0;       // 初始化为低电平
    int pulse_count = 0;      // 脉冲计数器
    
    for (int i = 0; i < sequence_len; i++) {
        int current_state = pulse_sequence[i];
        
        // 上升沿检测逻辑
        if (current_state == 1 && last_state == 0) {
            pulse_count++;
            printf("检测到第%d个上升沿\n", pulse_count);
        }
        
        // 更新历史状态
        last_state = current_state;
    }
    
    printf("总脉冲数:%d\n", pulse_count);
    return 0;
}

嵌入式硬件环境代码(实际GPIO采样)

如果是在嵌入式系统中读取GPIO引脚的脉冲,代码框架如下:

#include <stdint.h>

// 替换为你硬件平台的GPIO读取函数
uint8_t read_gpio_pin(void) {
    // 示例:返回当前引脚电平,0=低,1=高
    // 比如STM32可替换为HAL_GPIO_ReadPin(GPIOx, GPIO_PIN_x)
    return 0;
}

int main(void) {
    uint8_t last_pin_state = 0;
    uint16_t pulse_counter = 0;
    
    while (1) {
        uint8_t current_pin_state = read_gpio_pin();
        
        // 检测上升沿并计数
        if (current_pin_state == 1 && last_pin_state == 0) {
            pulse_counter++;
            // 可选:将计数结果输出到串口/显示屏等
        }
        
        last_pin_state = current_pin_state;
        
        // 可选:添加延时防抖,根据脉冲频率调整时长(比如1ms)
        // delay_ms(1);
    }
}

关键注意事项

  • 状态持久化:last_state必须是静态变量、全局变量或循环外定义的变量,不能每次检测都重新初始化,否则无法保留历史状态
  • 采样频率:采样频率必须至少是脉冲频率的2倍(奈奎斯特定理),否则可能错过上升沿
  • 防抖处理:实际硬件输入(比如按键、传感器)可能存在机械抖动,建议连续采样2-3次确认电平稳定后再判定上升沿
  • 电平匹配:确保代码中高低电平的定义与硬件一致(部分系统可能用高电平为0、低电平为1,需对应调整判断条件)

内容的提问来源于stack exchange,提问作者Jitter456

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 00:55:20