1,4 STC89C52矩阵键盘控制数码管输出数字(proteus仿真)

预备基础;keil5和proteus软件简单操作。

keil5与Proteus基本操作

1,keil5

打开我们的keil5软件,新建工程;添加main.c,界面如下

然后,话不多说,直接上代码。

#include <REGX52.H>

//数码管段码表  0 1 2 3 4 5 6 7 8 9
unsigned char NixieTable[]={0x40,0x79,0x24,0x30,0x19,0x12,0x2,0x78,0x0,0x10};


//延时函数
void Delay(unsigned int xms)
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}



//矩阵键盘扫描
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;}
	if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=5;}
	if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=9;}
	if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=13;}
	
	P1=0xFF;
	P1_2=0;
	if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=2;}
	if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=6;}
	if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=10;}
	if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=14;}
	
	P1=0xFF;
	P1_1=0;
	if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=3;}
	if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=7;}
	if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=11;}
	if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=15;}
	
	P1=0xFF;
	P1_0=0;
	if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=4;}
	if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=8;}
	if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=12;}
	if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=16;}
	
	return KeyNumber;
}

//定位键码数
unsigned char KeyNum;
void main()
{

	

	while(1)
	{
		KeyNum=MatrixKey();				//获取矩阵键盘键码
		if(KeyNum)						//如果有按键按下
		{
			P3=NixieTable[KeyNum-1];	//数码管显示
		}
	}
}

 这是全部代码,大家直接粘贴就能使用。(贴心吧嘿嘿)

2,代码讲解

接下来我要大致说一下代码(我把上面的代码一段一段的说)

//数码管段码表  0 1 2 3 4 5 6 7 8 9
unsigned char NixieTable[]={0x40,0x79,0x24,0x30,0x19,0x12,0x2,0x78,0x0,0x10};

很明显这是定义的一个数组,这个数组可以让数码管显示0-9数字。

//延时函数
void Delay(unsigned int xms)
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}

一个普通的延时函数,为了后续的扫描矩阵键盘。

//矩阵键盘扫描
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;}
	if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=5;}
	if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=9;}
	if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=13;}
	
	P1=0xFF;
	P1_2=0;
	if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=2;}
	if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=6;}
	if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=10;}
	if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=14;}
	
	P1=0xFF;
	P1_1=0;
	if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=3;}
	if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=7;}
	if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=11;}
	if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=15;}
	
	P1=0xFF;
	P1_0=0;
	if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=4;}
	if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=8;}
	if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=12;}
	if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=16;}
	
	return KeyNumber;
}

这是一个用于扫描矩阵键盘的函数。矩阵键盘是一种常用的输入设备,通过对键盘进行行列扫描,以检测用户按下了哪个按键。函数的作用是返回按下的按键的编号。

该函数使用了一个4×4的矩阵键盘,通过对键盘的行和列进行扫描,检测是否有按键按下。具体实现如下:

  1. 首先,将P1口设置为高电平(0xFF)。
  2. 然后,将P1口的某一行引脚(P1_3、P1_2、P1_1、P1_0)设置为低电平(0)。
  3. 接着,对P1口的每一列引脚(P1_7、P1_6、P1_5、P1_4)进行检测,判断是否有按键按下。
  4. 如果有按键按下,会进入一个延时函数(Delay(20)),等待按键稳定。
  5. 然后,对于按下的按键,记录其对应的编号(KeyNumber)。
  6. 最后,将记录的按键编号返回。

这里P1口就是我们芯片的引脚(这要结合硬件看,毕竟代码最终都作用于硬件上)下面会有仿真图片。我们先接着讲代码。

//定位键码数
unsigned char KeyNum;
void main()
{

	

	while(1)
	{
		KeyNum=MatrixKey();				//获取矩阵键盘键码
		if(KeyNum)						//如果有按键按下
		{
			P3=NixieTable[KeyNum-1];	//数码管显示
		}
	}
}

这就是我们的逻辑环节了,当我们在矩阵按键中按下对应按键,数码管就会显示对应数字。

3,proteus

打开Proteus软件,新建工程,找到我们所需元件。

我们可以把它们从库里找出来,接下来是连接。

 

 这就是我所连接的,大家可以保存下来放大仔细看连接的线路。(配合代码食用效果更佳)

然后我们把芯片添加刚刚keil5生成的.hex文件。

3,仿真

点击运行仿真(不要点开始仿真)

矩阵按键,数码管

这里好像不能直接插入视频(也可能是我不知道这么搞)

4,思考

4.1        在keil5中我们代码为什么要这么写?含义何在?

4.2        在proteus中我们的电路为什么要这么连,与我们写的代码有什么关联?

4.3       我这次并没有把所有的矩阵键盘用完,用剩余的按键,可以更改代码显示一下E。

提示:我们学习完这个矩阵键盘,大家想一下,是不是加个LCD屏,我们可以利用矩阵键盘做个电子密码锁。大家感兴趣的话可以查阅这方面的资料。

----------------------------------------------我是一条分割线--------------------------------------------------------------

作者水平有限,如有错误,欢迎指正。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盛一碗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值