一个按键程序的设计。
常常看到有些小虾米提问一个键按下加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);
}
}
|