|   站点首页   |   基础教程   |   好书推荐  设计实例   |  软件下载   |   电子基础  |   常用芯片  |  联系方式  |

您现在位于: → 源码下载

 

单键认别

-------------------------------------------------------------

[实验要求]

每按一次独立键盘的S2键,与P1口相连的一个发光二极管往下移动一位。

注意:关于按键去抖动的解释,我们在手动按键的时候,由于机械抖动或是其它一些非人为的因素很有可能会造成误识别,一般手动按下一次键然后接着释放,按键两片金属膜接触的时间大约为50ms左右,如果我们再首次检测到键被按下后延时10ms左右再去检测,这时如果是干扰信号将不会被检测到,如果确实是有键被按下,则可确认。以上为按键识别去抖动的原理。

[实验目的]

     独立按键的识别。

[硬件电路]

[源代码]

#include <reg52.h>

sbit BY1=P3^4;       //定义按键的输入端S2

unsigned char count; //按键计数,每按一下,count1

unsigned char temp;

unsigned char a,b;

void delay10ms(void) //延时程序

{

    unsigned char i,j;

    for(i=20;i>0;i--)

    for(j=248;j>0;j--);

}

key()           //按键判断程序

{

    if(BY1==0)  //判断是否按下键盘,当单片机上电时所有IO口为//高电平,S2键一端接地另一端接P3.4,所以当键被按下时P3.4//直接接地,此时检测P3.4肯定为低电平。

    {

      delay10ms(); //延时,软件去干扰

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

       {

         count++;     //按键计数加1

         if(count==8) //8次重新计数

         {

          count=0;    //count清零

         }

     }

    while(BY1==0);//等待按键释放,如果键未释放则一直在此等待。

    }

}

 move()         //广告灯向下移动移动函数

{

    a=temp<<count;  //这三句为一个循环移位,相当于前面提到的

    b=temp>>(8-count);//  _crol_()函数

    P1=a|b;

}

 

main()

{

 count=0;  //初始化参数设置

 temp=0xfe;

 P1=0xff;

 P1=temp;

 while(1)  //永远循环,扫描判断按键是否按下

 {

   key();    //调用按键识别函数

   move();   //调用广告灯移动函数

 }

}

 

本站部分软件资料来源于网络,如有涉及版权问题,请及时联系站长删除
594983616@qq.com  594983616