您的位置 首页 基础

单片机一般按键的规划

一、机械按键的抖动键盘,作为向系统操作人员的干预指令的接口,以其特定的按键序列代表着各种确定的操作命令,所以,准确无误的辨认每个键

一、机械按键的颤动

键盘,作为向体系操作人员的干涉指令的接口,以其特定的按键序列代表着各种承认的操作指令,所以,准确无误的辨认每个键的动作和其所在的状况,是体系能否正常作业的要害。大都键盘的按键多运用机械式弹性开关,一个电信号经过机械触点的断开,闭合进程完结凹凸电平的切换。因为机械触点的弹性效果,一个按键开关在闭合及断开的瞬间必定伴随着一连串的颤动,其波形如图所示:

颤动进程的长短是由按键的机械特性决议,一般是10~20ms。为了使CPU对一次按键动作只承认一次,有必要消除颤动的影响,能够从硬件及软件两个方面着手。本文只介绍软件方面的防抖。

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

二、proteus仿真

源程序:

#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];//数码管显现
}
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/jichu/258577.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部