51 按键与数码管 用按键实现数码管数字加一减一

按K1数码管数字加一
按K2数码管数字减一

   #include 

//位绑定操作
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;

//按键绑定
sbit KEY1 = P2^4;
sbit KEY2 = P2^5;

unsigned char code LedChar[] = { //数码管显示字符转换表
 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};

void delay();

void main(){
	bit backup = 1; //定义一个位变量,保存前一次扫描的按键值
	bit backup1 = 1; //定义一个位变量,保存前一次扫描的按键值
 unsigned char cnt = 0; //定义一个计数变量,记录按键按下的次数

	
    ENLED = 0;
    ADDR3 =1;
    ADDR2 =0;
    ADDR1 =0;
    ADDR0 =0;

    P2 = 0xf7;
		P0 = LedChar[cnt];

    while (1)
    {
			if (KEY1 != backup) //当前值与前次值不相等说明此时按键有动作
			 {
					delay();
			 if (backup == 0) //如果前次值为 0,则说明当前是由 0 变 1,即按键弹起
			 {
			 cnt++; //按键次数+1
					if (cnt >= 10)
			 { //只用 1 个数码管显示,所以加到 10 就清零重新开始
					cnt = 0;
			 }
					P0 = LedChar[cnt]; //计数值显示到数码管上
			 }
					backup = KEY1; //更新备份为当前值,以备进行下次比较
			 }
			 
			 //按键2
			 if (KEY2 != backup1) //当前值与前次值不相等说明此时按键有动作
			 {
					delay();
			 if (backup1 == 0) //如果前次值为 0,则说明当前是由 0 变 1,即按键弹起
			 {
			 cnt--; //按键次数+1
					if (cnt <= 0)
			 { //只用 1 个数码管显示,所以加到 10 就清零重新开始
					cnt = 10;
			 }
					P0 = LedChar[cnt]; //计数值显示到数码管上
			 }
					backup1 = KEY2; //更新备份为当前值,以备进行下次比较
			 }
	}
}

/* 软件延时函数,延时约 10ms */
void delay()
{
 unsigned int i = 1000;
 while (i--);
}

效果:
51 按键与数码管 用按键实现数码管数字加一减一_第1张图片

你可能感兴趣的:(51 按键与数码管 用按键实现数码管数字加一减一)