(简单易懂)按下矩阵按键在数码管上显示对应数值

/按下矩阵按键在数码管上显示对应数值/
#include “reg52.h”
#define u8 unsigned char
#define u16 unsigned int
#define dig P0 //数码管对应IO口
#define key P1 //矩阵对应IO口
u8 num;//用来存放读取到的键值
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;//138译码
delay(u16);//延时函数声明
u8 keyscan();//矩阵键盘扫描函数声明
u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值
/code表示将数据从RAM改存进ROM区,节省内存/

void main()
{
LSA=0;
LSB=0;
LSC=0;//给第一个数码管提供位选
while(1)
{
num=keyscan(); //按键扫描函数
dig=smgduan[num];
}

}
u8 keyscan()
{
u8 a;
key=0x0f;//高四位为行,低四位为列
if(key!=0x0f)//检测按键是否按下
{
delay(10);//消抖
if(key!=0x0f)
{
key=0x0f;//检测列
switch(key)
{
case(0x07):num=0;break;
case(0x0b):num=1;break;
case(0x0d):num=2;break;
case(0x0e):num=3;break;
}

	   key=0xf0;//检测行
	   switch(key)
	   {
	   		case(0x70):num=num;break;
			case(0xb0):num=num+4;break;
			case(0xd0):num=num+8;break;
			case(0xe0):num=num+12;break;		   
	   
	   }		
	while((a<50)&&(key!=0xf0))
	{
		delay(10);
		a++; //检测按键松手检测
	}					
	 }
}

return num;//返回num作为函数值
}
delay(u16 x)//延时ms函数
{
u8 i,j;
for(i=x;i>0;i–)
{
for(j=120;j>0;j–);
}
return x;
}

谢谢观看,本人初学,如有错误之处,希望各位前辈指出。
  • 7
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值