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--);
}原文地址:http://blog.csdn.net/kotei_88_luluc_66/article/details/40184021