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

如何优化PIC单片机CCS C代码,减少重复if语句?

PIC单片机串口项目代码优化方案

针对你代码中大量重复if语句的问题,我们可以通过数组存储按键信息+循环遍历的方式大幅简化代码,同时还能提升扩展性(后续新增按键只需修改数组,不用新增if)。以下是具体优化方案:

优化后代码

// 定义按键结构体,关联引脚与对应编号
typedef struct {
    int pin;
    int num;
} Button;

// 按键数组:集中管理所有按键的引脚和编号
Button buttons[] = {
    {pin_a0, 1}, {pin_a1, 2}, {pin_a2, 3}, {pin_a3, 4}, {pin_a4, 5},
    {pin_c0, 6}, {pin_c1, 7}, {pin_c2, 8}, {pin_c3, 9}, {pin_c4, 10},
    {pin_d0, 11}, {pin_d1, 12}, {pin_d2, 13}, {pin_d3, 14}, {pin_d4, 15}
};

#define BUTTON_COUNT sizeof(buttons)/sizeof(buttons[0]) // 自动计算按键总数
#define enable pin_c5
#define tx pin_c6
#define rx pin_c7

#int_rda
void rda_isr(void)
{
    disable_interrupts(int_rda);
    output_high(pin_d7);
}

void main()
{
    set_tris_a(0xFF);
    set_tris_b(0x00);
    set_tris_c(0xFF);
    set_tris_d(0xFF);
    set_tris_e(0x00);

    output_high(tx);
    output_low(rx);
    output_high(enable);

    enable_interrupts(int_rda);
    enable_interrupts(GLOBAL);

    lcd_init();

    while(TRUE)
    {
        // 遍历数组替代重复if语句
        for(int i = 0; i < BUTTON_COUNT; i++)
        {
            // 加入按键消抖逻辑,避免误触发
            if(input(buttons[i].pin))
            {
                delay_ms(20); // 等待电平稳定
                if(input(buttons[i].pin))
                {
                    puts("\fbutton ");
                    // 数字转字符输出按键编号,适配1-15的两位数情况
                    if(buttons[i].num >= 10) putc('0' + buttons[i].num / 10);
                    putc('0' + buttons[i].num % 10);
                    // 等待按键释放,防止重复输出
                    while(input(buttons[i].pin));
                }
            }
        }
    }
}

优化说明

  1. 集中管理按键资源:用结构体数组把按键引脚和编号绑定,后续新增或修改按键只需调整数组,无需改动循环逻辑,扩展性更强。
  2. 自动统计按键数量:通过sizeof计算数组长度,避免手动计数出错,减少维护成本。
  3. 提升按键稳定性:原代码会因机械按键抖动多次触发输出,优化后加入消抖延时和按键释放等待逻辑,解决误触发问题。
  4. 简化输出逻辑:通过数字转字符的方式统一处理按键编号输出,避免编写大量重复的字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:32:48