同时控制串口与按键的问题
本帖最后由 sujin5 于 2013-1-21 17:06 编辑望请马潮老师及坛内高手为我指点迷津,关于同时控制串口与按键的问题
初步功能是:按向下键只有一号灯亮->按向左键只有2号灯亮->按向右键时1、2灯都亮->按向上键都灭。需要说明的是按键有是顺序的,向下->向左->向右->向上
因为觉得没意思,所以就在初步功能基础上加了点功能,增加功能后如下:
按向下键或1号输入信号有效或串口发送0x05,只有一号灯亮->按向左键或3号输入信号有效或串口发送0x06,只有2号灯亮->按向右键或4号输入信号有效或串口发送0x07时1、2灯都亮->按向
上键或2号输入信号有效或串口发送0x08,都灭。需要说明的是同样是有顺序的,顺序同上。
现本菜鸟遇到的问题是:当最后发送0x08后,再按键或给输入信号都没无效,而给发送信号0x05是可以工作。如最后是用按键向上或4号输入信号灭灯,则可以正常重复操作。
问题描述完毕,不知描述是否清楚,对应的程序我已添加到附件。望请马潮老师及坛内高手为我指点迷津。先谢过了{:3_48:} 再贴上一份程序代码吧,希望能省去部件人下载的麻烦:
void mode1(void)
{
int key1=0;
int key2=0;
LED1_ON;
LED2_ON;
while(1)
{
//如果1号输入有效或串口发送数据0x05或向下信号有效
if(YL1&&key1==0)
{
Delay(1000);
LED1_ON;
LED2_OFF;
key1=1;
key2=1;
}
if(GET_DOW)
{
Delay(20);
if(GET_DOW&&key1==0)
{
Delay(1000);
LED1_ON;
LED2_OFF;
key1=1;
key2=1;
}
}
if(((rx_data==0x05)&&key2==0)&&key1==0)
{
Delay(1000);
LED1_ON;
LED2_OFF;
key1=1;
key2=1;
}
//如果1号输入有效或串口发送数据0x05或向下信号有效后,如果3号输入号有效或串口发送数据0x06或向左键有效
if((YL3)&&(key1==1||key1==3))
{
key1=2;
key2=2;
LED1_OFF;
LED2_ON;
}
if(GET_LFT)
{
Delay(20);
if((GET_LFT)&&(key1==1||key1==3))
{
key1=2;
key2=2;
LED1_OFF;
LED2_ON;
}
}
if((((rx_data==0x06)&&(key2==1||key2==3)))&&(key1==1||key1==3))
{
key1=2;
key2=2;
LED1_OFF;
LED2_ON;
}
//如果3号输入号有效或串口发送数据0x06或向左键有效后,如果2号信号有效或串口发送数据0x07或向右键有效
if((YL4)&&key1==2)
{
key1=3;
key2=3;
LED1_ON;
LED2_ON;
}
if(GET_RIT)
{
Delay(20);
if(GET_RIT&&key1==2)
{
key1=3;
key2=3;
LED1_ON;
LED2_ON;
}
}
if(((rx_data==0x07)&&key2==2)&&key1==2)
{
key1=3;
key2=3;
LED1_ON;
LED2_ON;
}
//如果停止信号有效或串口发送数据0x08或向上键有效
if(YL2&&(key1==1||key1==2||key1==3))
{
key1=0;
key2=0;
LED2_OFF;
LED1_OFF;
}
if(GET_UP)
{
Delay(20);
if((GET_UP)&&(key1==1||key1==2||key1==3))
{
key1=0;
key2=0;
LED2_OFF;
LED1_OFF;
}
}
if(((rx_data==0x08)&&(key2==1||key2==2||key2==3))&&(key1==1||key1==2||key1==3))
{
key1=0;
key2=0;
LED2_OFF;
LED1_OFF;
}
if(rx_flag==1)
{
rx_flag=0;
USART2_Putc(rx_data);
USART2_Puts("\r\n 串口2发送数据");
}
}
}
页:
[1]