您现在所在的是:

单片机论坛

回帖:1个,阅读:2098 [上一页] [1] [下一页]
2459
sgx
文章数:474
年度积分:50
历史总积分:2459
注册时间:2001/11/22
发站内信
发表于:2005/8/15 9:50:00
#0楼
常常看到有些小虾米提问一个键按下加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编辑过]
骐骥一跃,不能十步;
驽马十驾,功在不舍
953
GOOOD
文章数:19
年度积分:50
历史总积分:953
注册时间:2005/8/6
发站内信
发表于:2005/8/21 12:57:00
#1楼
不错,学习学习^

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

46.8003