在大家的帮助下,我重新编辑了我的代码。我更新了我的问题:如何使用switch结构增加状态。我将[((button_in& 0x0040)!= 0)]表达式放入switch(expr)中。这给了我我想要的前两个州。 (1)按下按钮1产生0001.(2)按下按钮2产生0010.我不确定如何编程按下按钮1 TWICE以产生0010.我可以使用正确方向的提示或点。我整天都在研究这个问题,我觉得问题与交换机的表达有关。谢谢
int main()
{
char state;
char A;
int button_in = 0;
DeviceInit(); //set LED1 thru LED4 as digital output
DelayInit(); //Initialize timer for delay
while(1)
{
button_in = PORTReadBits (IOPORT_A, BIT_6 | BIT_7);
if (button_in != 0)
{
switch ((button_in & 0x0040) != 0)
{
case 0: ((button_in & 0x0040) != 0); //1. Press button1. State goes to 001.
PORTWrite (IOPORT_B, BIT_11);
break;
default: //((button_in & 0x0080) != 0); //2. Press button2. State goes to 010
PORTWrite (IOPORT_B, BIT_10);
break;
}
DelayMs(100);
PORTClearBits(IOPORT_B, BIT_10 | BIT_11 | BIT_12 | BIT_13);
//Add Breakpoint here
}
}
}
答案 0 :(得分:6)
代码的switch语句格式错误。写得像这样:
int main()
{
char state;
int button_in = 0;
DeviceInit();
DelayInit();
button_in = PORTReadBits (IOPORT_A, BIT_6 | BIT_7);
if (button_in != 0)
{
switch (state)
{
case 'A': if ((button_in & 0x0040) != 0) //1. Press button1. State goes to 001.
PORTWrite(IOPORT_B, BIT_10);
break;
case 'B': if ((button_in & 0x0080) != 0) //1aaab. Press button2. State goes to 1000
PORTWrite (IOPORT_B, BIT_13);
break;
}
DelayMs(100);
PORTCLearBits(IOPORT_B, BIT_10 | BIT_11 | BIT_12 | BIT_13);
//Add Breakpoint here
}
}
答案 1 :(得分:2)
首先,您实际上并未将任何值分配给"州",因此测试它并不能给您带来任何有意义的结果。
其次,你是否会跳进"如果"块。做这种事情是有正当理由的(参见Duff的设备),但通常这是一个错误。你的意思是"案例"进入"如果"而不是相反?
答案 2 :(得分:1)
完全绕过以下几行:
button_in = PORTReadBits (IOPORT_A, BIT_6 | BIT_7);
if (button_in != 0) {
switch
语句立即分支到第一个匹配的大小写;跳过第一个匹配案例标签之前的任何代码。
您需要在PORTReadBits
声明之外移动switch
来电。
答案 3 :(得分:-1)
if
/ case
并不在一起。
switch
与case
一致,if
与else
一致。
阅读该语言的基础知识。