独立按键程序.zip

  • 浏览量:5744
  • 下载量:122
  • 资料大小:30.29 KB
  • 日期:2014-04-16
  • 上传者:ww4160
  • 分享
  • 评论
  • 举报
  • 收藏

资料描述

          通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消抖。


     


    抖动时间
    抖动时间的长短由按键的机械特性决定,一般为5ms~10ms。这是一个很重要的时间参数,在很多场合都要用到。按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒,大家可以用示波器测试一下。键抖动会引起一次按键被误读多次。为确保cpu对键的一次闭合仅作一次处理,必须去除键抖动。在键闭合稳定时读取键的状态,并且必须判别到键释放稳定后再作处理。


    消抖有硬件消抖和软件消抖,这里硬件消抖不做分析,如有兴趣可以查阅相关资料


       这里主要讲的是软件消抖


    分析思路:


      io口去读取数值,是否为0,当读取到0时,延时10ms,再次读取是否为0.当确实是0的时候,说明按键按下。检测是否按键松掉,执行语句


    程序如下:


    if(key==0) //按键按下


    {


    delay_ms(10);//延时10ms


    if(key==0)//确认按键按下


    {


    执行语句;//按照题目要求编写


    }


       while(!key);//等待按键释放


    }


    那怎么用一个开关控制一个小灯的开和关呢?仿真图如下:


     


    程序:


    #include


    #define uint unsigned int


    #define uchar unsigned char


    void delay_ms(uint);


    sbit led0=p0^0;


    sbit key1=p3^2;


    void main()


    {


       uchar i;


        while(1)


    {


       if(key1==0)


       {


         delay_ms(10);


    if(key1==0)


    {


    i++;


    i=i%2;


    switch(i)


    {


     case 0: led0=1; brea
评论(0)

登录后可评论,请 登录注册

   
相关资料
换一换