搜索
bottom↓
回复: 1

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

[复制链接]

出0入0汤圆

发表于 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号输入信号灭灯,则可以正常重复操作。
问题描述完毕,不知描述是否清楚,对应的程序我已添加到附件。望请马潮老师及坛内高手为我指点迷津。先谢过了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 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发送数据");
                }                                                                                                    
        }
}
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 01:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表