sujin5 发表于 2013-1-21 10:14:50

同时控制串口与按键的问题

本帖最后由 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:}

sujin5 发表于 2013-1-21 10:16:27

再贴上一份程序代码吧,希望能省去部件人下载的麻烦:
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]
查看完整版本: 同时控制串口与按键的问题