OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5814|回复: 1

求助原子哥关于串口与按键同时控制问题

[复制链接]

1

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2012-6-7
在线时间
9 小时
发表于 2013-1-21 10:05:41 | 显示全部楼层 |阅读模式
初步功能是:按向下键只有一号灯亮->按向左键只有2号灯亮->按向右键时1、2灯都亮->按向上键都灭。需要说明的是按键有是顺序的,向下->向左->向右->向上
因为觉得没意思,所以就可以加点功能,增加功能后如下:
按向下键或1号输入信号有效或串口发送0x05,只有一号灯亮->按向左键或3号输入信号有效或串口发送0x06,只有2号灯亮->按向右键或4号输入信号有效或串口发送0x07时1、2灯都亮->按向上键或2号输入信号有效或串口发送0x08,都灭。需要说明的是同样是有顺序的,顺序同上。
现本菜鸟遇到的问题是:当最后发送0x08后,再按键或给输入信号都没无效,而给发送信号0x05是可以工作。如最后是用按键向上或4号输入信号灭灯,则可以正常重复操作。
问题描述完毕,不知描述是否清楚,对应的程序我已添加到附件。望请原子哥及坛内高手为我指点迷津。先谢过了

串口与按键同时控制问题.txt

2.09 KB, 下载次数: 208

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2012-6-7
在线时间
9 小时
 楼主| 发表于 2013-1-21 10:09:32 | 显示全部楼层
再附上一份程序代码,省去大家下载附件的时间:
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发送数据");
}       
}
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-21 21:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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