无限循环适用于2D阵列的一部分

时间:2019-04-10 02:41:54

标签: c loops microcontroller

当我在Xcode中编译它并为每个字母的破折号和点运行printf语句时,我拥有的代码有效。但是,当我将代码放入TI Code Composer Studio中时,该代码可以工作,但是在我的微控制器上,“ Go Knights”的第一个字母“ G”只闪烁了一个灯。

我知道它与“ while”循环有关,但我不确定它是什么。我已经移动了所有内容,打开/关闭了闪光灯,关闭了计数器,将变量从全局变量更改为局部变量,检查了语法是否有遗漏,删除了==-1的if语句,但没有任何效果

#include <msp430g2553.h> 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

unsigned int i = 0;
unsigned int j=0;
int row = 0;

void main(void)`
{

char str [] = "Go Knights";
int morse_array [36][6] = { //array for A-Z, 0-9 in morse code
    {0,1,-1},      //'.' = 0 and '-' = 1 and all else = -1
    {1,0,0,0,-1},
    {1,0,1,0,-1},
    {1,0,0,-1},
    {0,-1},
    {0,0,1,0,-1},
    {1,1,0,-1},
    {0,0,0,0,-1},
    {0,0,-1},
    {0,1,1,1,-1},
    {1,0,1,-1},
    {0,1,0,0,-1},
    {1,1,-1},
    {1,0,-1},
    {1,1,1,-1},
    {0,1,1,0,-1},
    {1,1,0,1,-1},
    {0,1,0,-1},
    {0,0,0,-1},
    {1,-1},
    {0,0,1,-1},
    {0,0,0,1,-1},
    {0,1,1,-1},
    {1,0,0,1,-1},
    {1,0,1,1,-1},
    {1,1,0,0,-1},
    {1,1,1,1,1,-1},
    {0,1,1,1,1,-1},
    {0,0,1,1,1,-1},
    {0,0,0,1,1,-1},
    {0,0,0,0,1,-1},
    {0,0,0,0,0,-1},
    {1,0,0,0,0,-1},
    {1,1,0,0,0,-1},
    {1,1,1,0,0,-1},
    {1,1,1,1,0,-1}
};


WDTCTL = WDTPW | WDTHOLD;    // stop watchdog timer
P1DIR |= 0x41;         //set the direction register for LED1 and LED2
P1OUT &= 0xBE;         //initialize LED1 and LED2 to off*/

for(;;){               //empty for loop is an infinite loop

    for (i=0; i<strlen(str); i++) {
        if(str[i] >= 'a' && str[i] <= 'z'){
            row = (str[i]- 'a');
        }
        else if(str[i] >= 'A' && str[i] <= 'Z'){
            row = (str[i]- 'A');
        }
        else if(str[i] >= '0' && str[i] <= '9'){
            row = (str[i] - '0');
        }
        else{
            row = -1;
        }

        j= 0;

        while(morse_array[row][j]!= -1){
            // DOT

            if(row == -1){
                for(i=0; i<140000; i++);
                break;
            }
            if(morse_array[row][j] == 0) {
                P1OUT ^= 0x40;
                for (i=0; i <25000; i++);
                P1OUT &= 0x00;
                for (i=0; i <30000;i++);
            }

            //Dash
            else if(morse_array[row][j] == 1) {
                P1OUT ^= 0x40;
                for (i=0; i<60000; i++);
                P1OUT &= 0x00;
                for (i=0; i<30000; i++);
            }

            j++;
        }
    }
    P1OUT ^= 0x01;
    for (i=0; i<30000; i++);
    P1OUT ^= 0x01;

} }

1 个答案:

答案 0 :(得分:1)

您有第一个for循环,在这里使用variabele'i'。在该for循环中,您有2个也使用变量'i'的for循环。 查看j ++,您应该在第一个for循环中使用变量'j'。