按键程序的设计
欢迎大家来中华工控网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编辑过 谢谢!
先研究研究。
能不能在语句后面加上注释? 不会吧!提供的原程序还要提示?我闪。 呵呵!
牺牲你的一点时间,将给大家节约大大的时间。
看别人的程序真的有点头痛。 这段程序缺乏美感。 同意4楼的说法. mark 后再研究! 先看看。。。 按键确实有很多学问,最好还是状态机结合定时器来写。{:smile:} 这个必须mark
页:
[1]