C51单片机独立键盘+数码管的使用

练习这两个元器件,我首先想到的就是按钮控制数码管显示数值加减

项目概述:

1.本项目使用了两个独立按键,以及一位数码管。

2.数码管显示范围为0-9,初始状态为0。

3.当按下增加按钮时,数值加1,但是如果当前数字为9(最大值),将无响应。

4.当按下减小按钮时,数值减1,但是如果当前数字为0(最小值),将无响应。

效果展示:

代码:(相信这是大家最期待的地方,但是要适当修改,以适应你的硬件哦)

#include <reg52.h>

#define uchar unsigned char	//宏定义
#define uint  unsigned int	//宏定义
	
sbit WE = P2^7;	//位定义数码管位选锁存器接口
sbit DU = P2^6;	//位定义数码管段选锁存器接口
sbit key_zeng=P3^0; //自增按钮接口
sbit key_jian=P3^1; //自减按钮接口


uchar code leddata[]={ 
                0x3F,  //"0"
                0x06,  //"1"
                0x5B,  //"2"
                0x4F,  //"3"
                0x66,  //"4"
                0x6D,  //"5"
                0x7D,  //"6"
                0x07,  //"7"
                0x7F,  //"8"
                0x6F,  //"9"
};

//毫秒级延时函数
void delay(uint z)
{
	  uint x,y;
	  for(x = z; x > 0; x--);
		    for(y = 114; y > 0 ; y--);
}


void main(){
	uchar num=0;
	WE = 1;//打开位选锁存器
	P0 = 0XFE; //1111 1110
	WE = 0;//锁存位选数据
	
	while(1){
		DU = 1;//打开段选锁存器
		P0 = leddata[num];//
		DU = 0;//锁存段选数据
		
		if(key_zeng==0){
			delay(20);//按键消抖
			if(key_zeng==0 && num<9)
				num++;
			while(!key_zeng);//防止长按多加 
		}
		
		if(key_jian==0){
			delay(20);//按键消抖
			if(key_jian==0 && num>0)
				num--;
			while(!key_jian);//防止长按多加 
		}
	}
}

注意:以下代码需根据自身情况修改

sbit WE = P2^7;	//位定义数码管位选锁存器接口
sbit DU = P2^6;	//位定义数码管段选锁存器接口
sbit key_zeng=P3^0; //自增按钮接口
sbit key_jian=P3^1; //自减按钮接口

那个按键消抖我用下面这张图解释一下:

机械按键在按下或松开时会存在抖动现象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值