首页 > 代码库 > 单片机第7课:独立按键消抖程序

单片机第7课:独立按键消抖程序

JP3连接P0口,数码管的VCC接+5V电源,JP5的8、1分别接P2.0和P2.1。

#include<reg51.h>
/*
* 功能:独立按键消除抖动程序,按下KEY1,数值加1,按下KEY8,数值减去1
*
*/
#define uchar unsigned char
#define uint unsigned int

int num;
uchar code table[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
sbit plus_key = P2^0;
sbit minus_key = P2^1;

void init();
void delay_10ms();

void main()
{
	init();
	while(1)
	{
	 	//检测P2.0的电平状态,低电平说明按键按下去了,数值+1
		if(plus_key == 0)
		{
		 	//延时一下,消去按下时产生的抖动
			delay_10ms();
			//再次检测确保是否真的按下去了,处于稳定闭合状态
			if(plus_key == 0)
			{
			 	num++;
				if(num == 10)
				{
				  	num = 0;
				}
				//松手之后显示数值
				while(!plus_key);
				//按键延时消去释放抖动
				delay_10ms();
				//再次检测
				while(!plus_key);	
			}	
		}
		//减去1
		//检测P2.1的电平状态,低电平说明按键按下去了,数值-1
		if(minus_key == 0)
		{
		 	//延时一下,消去按下时产生的抖动
			delay_10ms();
			//再次检测确保是否真的按下去了,处于稳定闭合状态
			if(minus_key == 0)
			{
			 	num--;
				if(num == -1)
				{
				  	num = 9;
				}
				//松手之后显示数值
				while(!minus_key);
				//按键延时消去释放抖动
				delay_10ms();
				//再次检测
				while(!minus_key);	
			}	
		}
		//显示数值
		P0 = table[num];
	}
}
//初始化函数
void init()
{
	//让共阳极数码管显示0
	P0 = table[0];
	//初始化变量
	num = 0;
}
//延时函数,大约延时10毫秒左右
void delay_10ms()
{
	uint i = 1500;
	while(i--);
}

单片机第7课:独立按键消抖程序