将 if 语句转换为 for 循环?

标签 c matrix pic keypad mikroc

我在 mikroC 中编写了一个函数,用于扫描 4x4 键盘中按下的按键

void scan_key()
{
    PORTB = 0B11111110;
    if ( PORTB == 0b11101110){
        Row = 1;
        Column = 1;
        return;
    }
    if ( PORTB == 0b11011110){
        Row = 2;
        Column = 1;
        return;
    }
    if ( PORTB == 0b10111110){
        Row = 3;
        Column = 1;
        return;
    }
    if ( PORTB == 0b01111110){
        Row = 4;
        Column = 1;
        return;
    }

    PORTB = 0B11111101;
    if ( PORTB == 0b11101101){
        Row = 1;
        Column = 2;
        return;
    }
    if ( PORTB == 0b11011101){
        Row = 2;
        Column = 2;
        return;
    }
    if ( PORTB == 0b10111101){
        Row = 3;
        Column = 2;
        return;
    }
    if ( PORTB == 0b01111101){
        Row = 4;
        Column = 2;
        return;
    }

    PORTB = 0B11111011;
    if ( PORTB == 0b11101011){
        Row = 1;
        Column = 3;
        return;
    }
    if ( PORTB == 0b11011011){
        Row = 2;
        Column = 3;
        return;
    }
    if ( PORTB == 0b10111011){
        Row = 3;
        Column = 3;
        return;
    }
    if ( PORTB == 0b01111011){
        Row = 4;
        Column = 3;
        return;
    }

    PORTB = 0B11110111;
    if ( PORTB == 0b11100111){
        Row = 1;
        Column = 4;
        return;
    }
    if ( PORTB == 0b11010111){
        Row = 2;
        Column = 4;
        return;
    }
    if ( PORTB == 0b10110111){
        Row = 3;
        Column = 4;
        return;
    }
    if ( PORTB == 0b01110111){
        Row = 4;
        Column = 4;
        return;
    }

    PORTB = 0B11110000;
}

有没有办法把这个算法转换成循环?

最佳答案

是的。 (至少假设您实际上并不打算在每个 if block 之前进行这些分配。我假设它们是为了测试?否则您的代码就没有意义。)

至少,您可以将每个二进制值放入一个数组中,并构造一个如下所示的循环:

int portValue[4][4] = {{0b11101110, 0b11011110, 0b10111110, 0b01111110}, {//...Rest of values here }}

int loop_col = 0;
int loop_row = 0;

for (loop_col = 0; loop_col < 4; loop_col++){
    for (loop_row = 0; loop_row < 4; loop_row++){
         if ( PORTB == portValue[loop_col][loop_row]){
             Row = loop_row + 1;
             Column = loop_col + 1;
             return;
         }
    }
}

关于将 if 语句转换为 for 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5851807/

相关文章:

c++ - 将数据从 PC 发送到微 Controller

memory - 如何在 MPLAB 中增加内存块的大小?

c - 使用 .d-dependency-file 时 makefile 先决条件重建失败

c - 用于调试我的操作系统的调试器

c++ - C/C++ 字节顺序和 tcp 套接字

java - 在 if 语句中比较太多变量

尝试在 java static 中打印矩阵值时出现 java.lang.NullPointerException

embedded - Microchip 链接器问题

c - Windows 上的进程间同步

MATLAB 数组行排列