[AVR单片机] 请大神看下这个按键程序

[复制链接]
1038|3
 楼主| fff321 发表于 2015-6-4 16:06 | 显示全部楼层 |阅读模式

#define key_pc1 0X02
#define key_pc2 0X04
void KeyRead( void )
{
     unsigned char ReadData=PINC^0x06;
       
         
           ReadData=PINC^0x06;
       Trg=ReadData&(ReadData^Cont);      
       Cont=ReadData;
                                       
}   
void main()
{
   init();
   while(1)
   {
       KeyRead();
       if(Trg&key_pc2)
           {
              while(1)
             {
                display2(0);
                if(Trg&key_pc1)
                    break;
                 }
           }
             display2(1);
                 while(1)
                 {
                   if(num>20)
                   {
                     num=0;
                     break;
                   }
                 }
                 
   }
}
void ms()
{
    TCNT1H=0XFF;
        TCNT1L=0X82;
       
        num++;
}
按下key_pc2后能显示 display2(0),但是再按key_pc1后不能跳出while,不能显示display2(1)。而且按键好像有问题,还没按动一下就跳了,我按网上在后面加了20ms的消抖啊
qq4988 发表于 2015-6-4 17:20 | 显示全部楼层
按下2后,没有KeyRead();怎么知道1按下了啊
 楼主| fff321 发表于 2015-6-4 19:37 | 显示全部楼层
qq4988 发表于 2015-6-4 17:20
按下2后,没有KeyRead();怎么知道1按下了啊

按键就是碰一下就变了,消抖有问题么
小强强12138 发表于 2015-8-3 16:31 | 显示全部楼层
#define Key_DOWN() ((PINB & 0x40)==0x00)
if(Key_DOWN())
{
        while(Key_DOWN());
        _delay_ms(20);//防止按键的抖动影响采集的值
//你要执行的东西
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

39

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部