sgxluck 发表于 2005-8-15 10:19:13

按键程序的设计

欢迎大家来中华工控网www.gkong.com

一个按键程序的设计。

常常看到有些小虾米提问一个键按下加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=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=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);

               }

      }      




-----此内容被sgxluck于2005-08-15,10:22:20编辑过

dengchongguang 发表于 2005-8-15 10:56:45

谢谢!

先研究研究。

能不能在语句后面加上注释?

sgxluck 发表于 2005-8-15 11:11:47

不会吧!提供的原程序还要提示?我闪。

dengchongguang 发表于 2005-8-15 11:24:38

呵呵!

牺牲你的一点时间,将给大家节约大大的时间。

看别人的程序真的有点头痛。

atommann 发表于 2006-8-29 16:38:56

这段程序缺乏美感。

taofuzhao 发表于 2006-8-30 12:31:28

同意4楼的说法.

beijinggood2008 发表于 2012-7-17 23:18:20

mark 后再研究!

Randomes 发表于 2012-7-19 12:56:21

先看看。。。

Randomes 发表于 2013-6-16 13:40:57

按键确实有很多学问,最好还是状态机结合定时器来写。{:smile:}

robincui 发表于 2016-12-5 11:02:08

这个必须mark
页: [1]
查看完整版本: 按键程序的设计