03 蓝桥杯---16位矩阵键盘

在之前的两章中,我们接触的是独立按键。现在,我们可以了解一下16位矩阵按键。首先先看一下原理图:
在这里插入图片描述
首先,需要将条形帽跳至1 2端口,即表示为16位矩阵按键。15单片机的矩阵按键大致可以分为按行扫描和按列扫描。我们用按列扫描的方式,也就是从左边的一根线往下看,分别加到了P37,P36,P35和P34这四个I/O借口上,但我们要注意的是,此时我们用的是15的单片机,P37和P36口已经改变了,我们见一下转接板的图便知晓问题所在。
在这里插入图片描述
从图中可以看出,转接板的P0,P1,P2口都和原来一样,但是P3口有一点是不一样的,P36变成了P42,P37变成了P44.这一点在写程序的时候需要更改过来。我们先来想两排的按键,考虑到精准的问题,程序写的会复杂一些。首先,我们是按行扫描,比方说先是第一行按键,就要令P44=0,之后呢需要精准一下,就要将P42=0,以确保不会混乱。再然后,就是要判断哪个被按下了,就需要行列的协同作战才能达到的。还是以之前的为例子,就要写if((P30=0)&&(P44=0))就能精准判断哪个被按下了。下面我们贴这个程序:
//两排按键控制数码管
#include<stc15f2k60s2.h>

#define uchar unsigned char
#define uint unsigned int

uchar code tab[]={0xc0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0Xbf,0XFF};//ROM

void delayms(int ms);
void keyscan();

void main()
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF; //板子初始化程序
P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF; //数码管初始化程序

while(1)
{
	keyscan();
}

}

void keyscan()
{
P44=0;P42=1;
if((P300)&&(P440))//用来判断哪一行和列被按下
{
delayms(5);
if(P30==0)
{
P0=tab[0];
}
while(!P30);
}

else if((P31==0)&&(P44==0))
{
	delayms(5);
	if(P31==0)
	{
		P0=tab[1];
	}
	while(!P31
  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值