查看: 755|回复: 0
打印 上一主题 下一主题

按键程序的设计

[复制链接]
跳转到指定楼层
沙发
发表于 2016-5-20 23:17:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一个按键程序的设计。

常常看到有些小虾米提问一个键按下加1,多按一会连加怎么写,为什么我的按键不松开别的按键按下会无反应,或数码管总是闪动,而一松开又正常显示。下面是我笨笨的一个按键程序的相关段,此程序只做抛砖引入之用,本程已验证通过,如有不明之处请自行处理能 :)  

芯片 AVR之ATMEGA8515L 编译环境:ICCAVR6.31A



下面这段程序可放入主程序中

//************************上设定1按键(单次)***********************

if( ((PINB&up1) ==0 )&&( (flag2&0x01) == 0) )

{delay_nms(10);

  if( (PINB&up1) ==0 )

  {flag2|=BIT(0);

                                //****此处是我切入的相关程序*******//

  timelat1--;

  if(timelat1<0) timelat1=99;

  consumer_rd[4]=99-timelat1;

  distime0=0;

                                flag3=BIT(1);

                                //*******************//

  }

}

if( ((PINB&up1) ==up1)&&((flag2&0x01)==0x01) )

   {delay_nms(10);

    if((PINB&up1) ==up1)

  {flag2&=~BIT(0);

  }  

    }



下面这段程序请放入时间中断中:

//***************************1号上连调*****************************

if(((PINB&up1)==0)&&((flag4&0x02)==0))   

{count11++;

  if(count11>=500)

   {flag4|=BIT(1);

   }

}

if(((PINB&up1)==0)&&((flag4&0x02)==0x02))

{count12++;

  if(count12>=100)

   {count12=0;

                                //****此处是我切入的相关程序*******//

  timelat1--;

  distime0=0;

  if(timelat1<0) timelat1=99;

  consumer_rd[4]=99-timelat1;

                               //******************************//

   }

}



顺便送一个添头 (单键启停)

//************************启停1开关********************************

if( ((PIND&star1) ==0 )&&( (flag1&0x02) == 0) )

{delay_nms(10);

     if( (PIND&star1) ==0 )

      {flag1|=BIT(1);

                     flag_runstop^=BIT(1);

                     flag3=BIT(1);

      }

}

if(((PIND&star1) ==star1 )&&((flag1&0x02)==0x02) )

     {delay_nms(10);

      if( (PIND&star1) ==star1 )

{flag1&=~BIT(1);

                 }

      }      
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

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