OpenEdv-开源电子网

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

做红外线实验时,我想按某个键让某个数加一,但按了一次,它连加了好几次,究竟是什么问题,有哪位大神帮忙一下,谢谢

[复制链接]

3

主题

3

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-9-23
在线时间
3 小时
发表于 2016-10-6 15:27:51 | 显示全部楼层 |阅读模式
2金钱
int main(void)
{
         u8 a,d=0;
        u8 key;
        //u8 t=0;       
        u8 *str=0;        
        delay_init();                     //延时函数初始?
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2          
        uart_init(9600);                 //串口初始化为9600
        LED_Init();                                  //初始化与LED连接的硬件接口
        LCD_Init();
        Remote_Init();                        //红外接收初始化         
        POINT_COLOR=RED;//设置字体为红色
        LCD_ShowString(60,50,200,16,16,"Mini STM32");       
        LCD_ShowString(60,70,200,16,16,"REMOTE TEST");       
        LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
        //LCD_ShowString(60,110,200,16,16,"2014/3/12");

           LCD_ShowString(60,130,200,16,16,"KEYVAL:");       
           LCD_ShowString(60,150,200,16,16,"KEYCNT:");       
           LCD_ShowString(60,170,200,16,16,"SYMBOL:");                                                                                                                   
        while(1)
        {
                key=Remote_Scan();       
                if(key)
                {         
                        LCD_ShowNum(116,130,key,3,16);                //显示键值
                        LCD_ShowNum(116,150,RmtCnt,3,16);        //显示按键次数                  
                        switch(key)
                        {
                                case 0:str="ERROR";break;                          
                                case 162:str="POWER";break;            
                                case 98:str="UP";break;            
                                case 2:str="PLAY";break;                 
                                case 226:str="ALIENTEK";break;                  
                                case 194:str="RIGHT";break;          
                                case 34:str="LEFT";break;                  
                                case 224:str="VOL-";break;                  
                                case 168:str="DOWN";break;                  
                                case 144:str="VOL+";d++;key=1;break;        //这里按一次,屏幕上显示d连加了好几次            
                                case 104:str="1";break;                  
                                case 152:str="2";break;          
                                case 176:str="3";break;            
                                case 48:str="4";break;                    
                                case 24:str="5";break;                    
                                case 122:str="6";break;                  
                                case 16:str="7";break;                                                                  
                                case 56:str="8";break;         
                                case 90:str="9";break;
                                case 66:str="0";break;
                                case 82:str="DELETE";break;                 
                        }
                        LCD_Fill(116,170,116+8*8,170+16,WHITE);        //清楚之前的显示
                        LCD_ShowString(116,170,200,16,16,str);        //显示SYMBOL
                        LCD_ShowNum(60,110,d,3,16);
                }
                if(key==104)a=1;
                if(key==66)a=0;
                if(a==1)
                {
                       
                        LED0=0;
                        LED1=1;
                        delay_ms(300);
                        LED0=1;
                        LED1=0;
                       
                }
        }
}

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

使用道具 举报

20

主题

122

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
407
金钱
407
注册时间
2016-3-27
在线时间
104 小时
发表于 2016-10-6 17:50:30 | 显示全部楼层
while(1)不是在一直循环扫描嘛
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165462
金钱
165462
注册时间
2010-12-1
在线时间
2114 小时
发表于 2016-10-6 19:07:51 | 显示全部楼层
仿真分析问题。
回复

使用道具 举报

47

主题

212

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
金钱
292
注册时间
2016-1-2
在线时间
80 小时
发表于 2016-10-6 23:48:41 | 显示全部楼层
去看 原子学习资料中的 按键输入  那个Key.c。
支持连续按下 和不支持连续按下
回复

使用道具 举报

84

主题

766

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2770
金钱
2770
注册时间
2015-6-1
在线时间
394 小时
发表于 2016-10-7 08:17:51 | 显示全部楼层
有没有防抖动
自在随心
回复

使用道具 举报

4

主题

63

帖子

0

精华

高级会员

Rank: 4

积分
577
金钱
577
注册时间
2016-2-24
在线时间
94 小时
发表于 2016-10-7 18:49:23 | 显示全部楼层
加延时
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-10-7
在线时间
1 小时
发表于 2016-10-7 20:37:15 来自手机 | 显示全部楼层
肯定是没有防抖或者没有清除按键标志
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-9-8
在线时间
6 小时
发表于 2016-10-8 16:13:11 | 显示全部楼层
需要看你的按键扫描函数,当没有按下按键时key的返回值是否是零,或者是你根本没更新key的值,还是上一次按键的值。
回复

使用道具 举报

10

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
342
金钱
342
注册时间
2016-10-17
在线时间
71 小时
发表于 2016-10-26 22:22:07 | 显示全部楼层
在remate.c文件中的Remote_Scan函数最后加上RmtSta&=0<<6;
回复

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
170
金钱
170
注册时间
2016-2-28
在线时间
35 小时
发表于 2016-12-3 18:47:14 | 显示全部楼层
支持松手检测,需要连按的自己话改一下


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;  
        }
    }

        return 0;  
}
回复

使用道具 举报

5

主题

18

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2017-7-13
在线时间
8 小时
发表于 2017-8-1 14:19:28 | 显示全部楼层
zzqasim 发表于 2016-12-3 18:47
支持松手检测,需要连按的自己话改一下

谢谢 很有用
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-20 02:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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