-1

我试图完成课堂作业。这些是要求 4 要求 1. 您的姓名会显示在 LCD 的第一行,并且会一直保留在那里。2. 按下数字键时,该键的数字将附加到 LCD 第 2 行的现有数字上。如果第 2 行为空白,则该数字将出现在该行的第一个位置。3. 按下“#”键时,第 2 行数字的两倍的值将显示在第 3 行。 4. 您的程序必须能够正确处理 0 到 2,147,483,647(含)之间的整数。不需要处理输入或结果超出范围时的错误情况。5. 按下“<em>”键时,LCD 的第 2 行和第 3 行被清除,但第 1 行中您的姓名将保留。您可以清除整个显示并重新绘制第一行。6. 之后'</em>

我停留在我应该从我的读取数组中读取并将该数字乘以 2 并将其显示在第三行的部分。

  #include <hidef.h>      /* common defines and macros */
  #include "derivative.h"      /* derivative-specific definitions */
 #include <stdio.h>
  #include <stdlib.h> 
 #include "keypad.h"
 #include "LCD.h"
 #include "Delays.h"
void main(void)
{

char key;
const unsigned char message[] = "Christian ";   //data in Program Flash
char read [20];
int i=0;
DDRT = 0xF0;     // Upper nibble LEDs: output - logic low turns LED on
initKeypad();


  lcd_init();       // initialize LCD module
  lcd_puts(message); 

for(;;)            // Infinite while loop
{
    key = getKey();
    if(key){
    lcd_putc(key);

    read[i++] = key;
    switch(key){
      case '0':
      case '1':
      case '2':
      case '3':
      case '4':
      case '5':
      case '6':
      case '7':
      case '8':
      case '9':
        break;
      case'#':
        break;
      case'*':
        break;

        default:break;
      atol(read[0]);
      sscanf( ,"%id", );
      read[20] * 2;
      string ltoa(read[0]);
      sprintf( ,"%d", );
      lcd_pos(3,1);           
      lcd_putc(read[20]);

    }
        delayby1ms(10);
        while(getKey());
        delayby1ms(10); 

           }
}//passes message address
}
// end of main function
4

1 回答 1

3

当程序进入一个switch语句时,它会尝试匹配每个控制表达式,case如果case匹配则执行后面的代码,default如果没有匹配则执行后面的代码。如果它到达 a break,程序将退出整个switch语句。

在您的代码中,每个caseanddefault后跟break,因此末尾的代码switch永远不会被执行。

你的代码有点乱,也许这样更清楚:在这个例子中,printf无论值是什么,这两者都永远不会被执行key

#include <stdio.h>
int main (void)
{
    char key = 'c';// key can be any character
    switch(key)
    {
        printf("something\n"); // will never execute
        case 'a':
            break;
        case 'b':
            break;
        default:
            break;
        printf("something\n"); // will never execute
    }
    return 0;
}
于 2013-07-24T03:21:04.123 回答