如何优化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)); } } } } }
优化说明
- 集中管理按键资源:用结构体数组把按键引脚和编号绑定,后续新增或修改按键只需调整数组,无需改动循环逻辑,扩展性更强。
- 自动统计按键数量:通过
sizeof计算数组长度,避免手动计数出错,减少维护成本。 - 提升按键稳定性:原代码会因机械按键抖动多次触发输出,优化后加入消抖延时和按键释放等待逻辑,解决误触发问题。
- 简化输出逻辑:通过数字转字符的方式统一处理按键编号输出,避免编写大量重复的字符串。
内容的提问来源于stack exchange,提问作者Line Follower
相关产品推荐
相关产品推荐

