浅谈单片机的按键去抖问题

来源:本站
导读:目前正在解读《浅谈单片机的按键去抖问题》的相关信息,《浅谈单片机的按键去抖问题》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《浅谈单片机的按键去抖问题》的详细说明。
简介:本文是我用C51语言写的一个按键去抖程序,大家定会问为什么要去抖呢,说到这里,我要说下去现在去抖的方法有几种,去抖有两种方式,一种是硬件去抖,一种是软件去抖,硬件去抖是加一个电容就可以了,这要加大成本,和电路的复杂性。我们在开发C51的时候一般最常用的是软件去抖。下面看这个矩阵键盘的去抖程序吧。

#include <reg52.h>

#include <intrins.h>

#define uchar unsigned char

sfr KeyPort=0x90;//#define KeyPort P1 -----行在P1口低四位

sbit Key_C1=P1^4; //第1列接P1.4

sbit Key_C2=P1^5; //第2列接P1.5

sbit Key_C3=P1^6; //第3列接P1.6

sfr Led=0x80; //#define Led P0--------P0口LED

void delay(uchar ms); 函数的声明

void main()

{

Led=0xfe; 定义一个LED点亮

while(1)

{

KeyPort=0x6f; //0110 1111

if(KeyPort!=0x6f) //是否有键按下

{

delay(10); //延时10ms去抖

if(KeyPort!=0x6f) //再判断一下

{

switch(KeyPort) //进行矩阵键盘按键判断

{

case 0x6e://0110 1110

Led=_crol_(Led,1);

break;

case 0x6d://0110 1101

Led=_crol_(Led,4);

break;

case 0x6b://0110 1011

Led=_crol_(Led,7);

break;

case 0x67://0110 0111

Led=_crol_(Led,10);

break;

}

while(KeyPort!=0x6f); //松手检测

}

}

KeyPort=0x5f;//0101 1111

if(KeyPort!=0x5f)

{

delay(10);

if(KeyPort!=0x5f)

{

switch(KeyPort)

{

case 0x5e://0101 1110

Led=_crol_(Led,2);

break;

case 0x5d://0101 1101

Led=_crol_(Led,5);

break;

case 0x5b://0101 1011

Led=_crol_(Led,8);

break;

case 0x57://0101 0111

Led=_crol_(Led,11);

break;

}

while(KeyPort!=0x5f);

}

}

KeyPort=0x3f;//0011 1111

if(KeyPort!=0x3f)

{

delay(10);

if(KeyPort!=0x3f)

{

switch(KeyPort)

{

case 0x3e://0011 1110

Led=_crol_(Led,3);

break;

case 0x3d://0011 1101

Led=_crol_(Led,6);

break;

case 0x3b://0011 1011

Led=_crol_(Led,9);

break;

case 0x37://0011 0111

Led=_crol_(Led,12);

break;

}

while(KeyPort!=0x3f);

}

}

}

}

void delay(uchar ms)

{

uchar i;

for(;ms>0;ms--)

for(i=0;i<244;i++);

}

提醒:《浅谈单片机的按键去抖问题》最后刷新时间 2024-03-14 00:58:44,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《浅谈单片机的按键去抖问题》该内容的真实性请自行鉴别。