我正在努力为课堂完成作业。 这些是要求4要求 1.您的名字显示在液晶显示屏的第一行,它将保留在那里。 2.按下数字键时,键的数字将附加到LCD第2行的现有数字。如果第2行为空白,则数字将出现在该行的第一个位置。 3.按下“#”键时,第2行数字的两倍值将显示在第3行。 4.您的程序必须能够正确处理0到2,147,483,647(含)之间的整数。输入或结果超出范围时的错误条件无需处理。 5.当按下“”键时,LCD的第2行和第3行被清除,但第1行中的名字仍然存在。您可以清除整个显示并重新绘制第一行。 6.按下“”键后,无论是否发生错误,程序都准备好接受新输入
我卡在我应该从我的读数组中读取的部分中,然后将该数字乘以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
答案 0 :(得分:3)
当程序输入switch
语句时,它将尝试将控制表达式与每个case
匹配,并在case
之后执行代码(如果匹配),执行default
之后的代码1}}如果没有匹配。如果它达到break
,程序将退出整个switch
语句。
在您的代码中,每个case
和default
后跟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;
}