初级会员

- 积分
- 125
- 金钱
- 125
- 注册时间
- 2016-8-3
- 在线时间
- 31 小时
|
这几天在学习原子的红外遥控程序,成功捕获键值码,但是,程序一直在接收遥控码,相当于连续按键,我的程序使用的键值码是累加方式进行操作,按一次相当于按了8-9次,本来要进入项目1,结果跑到项目8,需要怎么修改才能用?- //定时器2中断服务程序
- void TIM2_IRQHandler(void)
- {
- if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET) //更新中断
- {
- if(RmtSta&0x80) //上次有数据被接收到了
- {
- RmtSta&=~0X10; //取消上升沿已经被捕获标记
- if((RmtSta&0X0F)==0X00) RmtSta|=1<<6; //标记已经完成一次按键的键值信息采集
- if((RmtSta&0X0F)<14) RmtSta++;
- else
- {
- RmtSta&=~(1<<7); //清空引导标识
- RmtSta&=0XF0; //清空计数器
- }
- }
- }
- if(TIM_GetITStatus(TIM2,TIM_IT_CC4)!=RESET) //CC4IE捕获中断
- {
- if(RDATA) //上升沿捕获
- {
- TIM_OC4PolarityConfig(TIM2,TIM_ICPolarity_Falling); //CC4P=1 设置为下降沿捕获
- TIM_SetCounter(TIM2,0); //清空定时器值
- RmtSta|=0X10; //标记上升沿已经被捕获
- }
- else //下降沿捕获
- {
- Dval=TIM_GetCapture4(TIM2); //读取CCR1也可以清CC1IF标志位
- TIM_OC4PolarityConfig(TIM2,TIM_ICPolarity_Rising); //CC4P=0 设置为上升沿捕获
-
- if(RmtSta&0X10) //完成一次高电平捕获
- {
- if(RmtSta&0X80) //接收到了引导码
- {
- if(Dval>300&&Dval<800) //560为标准值,560us
- {
- RmtRec<<=1; //左移一位.
- RmtRec|=0; //接收到0
- }
- else if(Dval>1400&&Dval<1800) //1680为标准值,1680us
- {
- RmtRec<<=1; //左移一位.
- RmtRec|=1; //接收到1
- }
- else if(Dval>2200&&Dval<2600) //得到按键键值增加的信息 2500为标准值2.5ms
- {
- RmtCnt++; //按键次数增加1次
- RmtSta&=0XF0; //清空计时器
- }
- }
- else if(Dval>4200&&Dval<4700) //4500为标准值4.5ms
- {
- RmtSta|=1<<7; //标记成功接收到了引导码
- RmtCnt=0; //清除按键次数计数器
- }
- }
- RmtSta&=~(1<<4);
- }
- }
- TIM_ClearFlag(TIM2,TIM_IT_Update|TIM_IT_CC4); //清除更新中断和CC4IE捕获中断标志
- }
- //处理红外键盘
- //返回值:
- //0,没有任何按键按下
- //其他,按下的按键键值.
- u8 Remote_Scan(void)
- {
- u8 sta=0;
- u8 t1,t2;
-
- if(RmtSta&(1<<6)) //得到一个按键的所有信息了
- {
- t1=RmtRec>>24; //得到地址码
- t2=(RmtRec>>16)&0xff; //得到地址反码
- if((t1==(u8)~t2)&&t1==REMOTE_ID) //检验遥控识别码(ID)及地址
- {
- t1=RmtRec>>8;
- t2=RmtRec;
- if(t1==(u8)~t2) sta=t1; //键值正确
- }
- if((sta==0)||((RmtSta&0X80)==0)) //按键数据错误/遥控已经没有按下了
- {
- RmtSta&=~(1<<6); //清除接收到有效按键标识
- RmtCnt=0; //清除按键次数计数器
- }
- }
- return sta;
- }
- void Remote_KEY()
- {
- IR = Remote_Scan();
-
- if(IR==162) {Key_OK=1; KCode=0x84;} //WIFI
- if(IR==2) {Key_OK=1; KCode=0x82;} //设置项目+
- if(IR==98) {Key_OK=1; KCode=0x83;} //设置项目-
- if(IR==226) {Key_OK=1; KCode=0x81;} //显示模式
- if(IR==194) {Key_OK=1; KCode=0x84;} //设置 +
- if(IR==34) {Key_OK=1; KCode=0x85;} //设置 -
- if(IR==152) {Key_OK=1; SET_S=0;} //复位
- }
复制代码
|
|