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