登录
首页 单片机论坛
回帖 发帖
正文

主题:一个按键程序的设计。

点击:2147 回复:1

sgx

常常看到有些小虾米提问一个键按下加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);
                }
     }      
最后修改:2005-8-15 9:55:55
05-08-15 09:50
不错,学习学习^
05-08-21 12:57

工控新闻

更多新闻资讯