51单片机按键识别与LED显示(显示0-9的数字)

实验内容:单片机外接10个按键,编号为0-9,编程实现任意按键则LED显示对应数字

一、硬件电路原理图?

1.共阴共阳两种不同的方式

 2.数码管显示表

 3.矩阵键盘介绍

矩阵键盘是 单片机 外部设备中所使用的排布类似于矩阵键盘组。 矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。 中文名 矩阵键盘 外文名 Matrix keyboard 本 质 类似于矩阵键盘组 适 用 单片机外部设备中所使用 识别方法 矩阵 的 键盘 比直接法要复杂一些 作 用 切换中控式HDMI矩阵信号源 目录 1 组成结构 2 识别方法 3 矩阵键盘实验 组成结构 编辑 播报 在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成 矩阵 形式。 在矩阵键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接

工作原理:读取第1行(列)→读取第2行(列) →读取第3行(列) → ……,然后快速循环这个过程,最终实现所有按键同时检测的效果。就以逐行扫描为例: 当给P17,P16,P15,P14赋值0111时P17被选中,读取P13,P12,P11,P10的值判断哪个按键被按下。如果S1按下了那么P13就等于0,如果S2按下了那么P12就等于0...
逐列扫描:当给P13,P12,P11,P10赋值0111时P13被选中,读取P17,P16,P15,P14的值判断哪个按键被按下。如果P17,P16,P15,P14为0111 则P17选中S1按下,如果P17,P16,P15,P14为1011,则S5按下.
 

 

二、程序代码

#include<regx52.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
//数码管段码表 0123456789;
unsigned char Table[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
				        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};	

void Delay(unsigned int x)//延时函数
{
	unsigned char i,j;
	for(i=x;i>0;i--)  ;
	for(j=114;j>0;j--);
}

unsigned char MatrixKey()//按列扫描
{                         
	unsigned char KeyNumber=0;
	
	P1=0xFF;P1_3=0;
	if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=1;} //显示数字0,keynumber是指段码表table对应的序号
	if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=5;}//显示数字4
	if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=9;}//显示数字8
	
	P1=0xFF;P1_2=0;
	if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=2;}//显示数字2
	if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=6;}//显示数字5
	if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=10;}//显示数字9

	P1=0xFF;P1_1=0;
	if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=3;}//显示数字2
	if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=7;}//显示数字6
	
	P1=0xFF;P1_0=0;
	if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=4;}//显示数字3
	if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=8;}//显示数字7
	
	return KeyNumber;
}
 
void Xian_Shi(KeyNum)
{
		P2_4=1;P2_3=1;P2_2=1;//位选,选中LED8
		P0=Table[KeyNum-1];	//数字的首元素为Table[0];
		Delay(1);
}
 			
void main()
{
	while(1)
	{
		unsigned char KeyNum=MatrixKey();//不断循环扫描
		if(KeyNum)	//判断是否有按键按下,如果有就显示					
		{
			Xian_Shi(KeyNum);		
		}	
	}		
}

硬件连接方式

 


  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值