51单片机数码管显示4*4矩阵键盘按键值

本文详细介绍了使用51单片机进行键盘扫描和数码管显示的程序设计,通过自定义延迟函数实现对键盘输入的读取,并将键盘编码转换为数码管上显示的数字。代码中包含了键盘扫描、数码管段选和位选的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
在这里插入图片描述
#include <reg52.h>
sbit du = P2^6;// 数码管段选
sbit we = P2^7;// 数码管位选
unsigned char jianzhi;//定义全局变量按键编号
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0-9数字
void delay(unsigned char a) //自定义延迟函数
{unsigned int x,y;
for (x=a;x>0;x–)
for (y=114;y>0;y–);
}
void keyscan( )
{ P3=0xf0; //列扫描
if(P3!=0xf0)
{delay(5);
if(P3!=0xf0)
{switch(P3)
{ case 0xe0 :jianzhi=6;break;
case 0xd0 :jianzhi=7;break;
case 0xb0 :jianzhi=8;break;
case 0x70 :jianzhi=9;break;
}
}

P3=0x0f; //行扫描
switch(P3)
{case 0x0e :jianzhi=jianzhi;break;
case 0x0d :jianzhi=jianzhi+4;break;
case 0x0b :jianzhi=jianzhi+8;break;
case 0x07 :jianzhi=jianzhi+12;break;
}
while(P3!=0x0f);
}
}
void main( )
{ while(1)
{keyscan();

 P0=0xff;//关闭数码管全部阴极
 we=1;
 P0=0xfe;//开启第1位数码管阴极
 we=0;
 P0=0;
 du=1;
if(jianzhi>=10)	//判断键盘编码十位是否为0,不为0则显示
 P0=table[jianzhi/10];//计算键盘编码十位值
else
{P0=0;//判断键盘编码十位是否为0,为0则不显示
}
du=0;
delay(10);

P0=0xff;
we=1;
P0=0xfd;// 开启第2位数码管阴极
we=0;
P0=0;
du=1;
P0=table[jianzhi%10];//计算键盘编码个位值
du=0;
delay(10);

}

}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值