单片机
返回首页

单片机一般按键的设计

2015-09-30 来源:eefocus

一、机械按键的抖动

 

键盘,作为向系统操作人员的干预指令的接口,以其特定的按键序列代表着各种确定的操作命令,所以,准确无误的辨认每个键的动作和其所处的状态,是系统能否正常工作的关键。多数键盘的按键多使用机械式弹性开关,一个电信号通过机械触点的断开,闭合过程完成高低电平的切换。由于机械触点的弹性作用,一个按键开关在闭合及断开的瞬间必然伴随着一连串的抖动,其波形如图所示:

 

 06单片机一般按键的设计
 

抖动过程的长短是由按键的机械特性决定,一般是10~20ms。为了使CPU对一次按键动作只确认一次,必须消除抖动的影响,可以从硬件及软件两个方面着手。本文只介绍软件方面的防抖。

 

软件防抖的思路:当第一次检测到有建按下时,先用软件延时(10~20ms),而后再确认键电平是否依旧维持闭合状态的电平。若保持闭合状态电平,则确认此间已按下,从而消除抖动影响。

 

二、proteus仿真

06单片机一般按键的设计

 

源程序:

 

#include
#include
#define uchar unsigned char
#define uint unsigned int

sbit jia_key=P2^0;
sbit jian_key=P2^1;

uint i;        //定义要显示的数字、字符
uchar duan_code[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};                        //共阴极数码管段码0~F

void delay_ms(uint z)   //ms级延迟函数,z表示形参,是几就是几ms延迟
{
  uint x,y;
  for(x=z;x>0;x--)
   for(y=99;y>0;y--)
    { _nop_();
   _nop_(); 
 }
}

void scankey(void)     //按键扫描函数
{
 if(jia_key==0)     //加按键检测
  {
    delay_ms(150);    //延迟防抖
    if(jia_key==0)    //加按键检测
      i++;
    if(i>15)
      i=15;
   }

 if(jian_key==0)     //减按键检测
  {
    delay_ms(150);    //延迟防抖
    if(jian_key==0)    //减按键检测
      i--;
    if(i<0)
      i=0;
   }

}
void main(void)    //主函数
{
 P0=0X00;    //初始化P0口为低电平
 while(1)  
   { 
     scankey();   //检测按键
     P0=duan_code[i]; //数码管显示 
   }
}

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • PIC单片机控制的遥控防盗报警器电路

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 用NE555制作定时器

  • 如何构建一个触摸传感器电路

  • 基于ICL296的大电流开关稳压器电源电路

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章